首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:用户界面上线程完成执行后的输出

Android:用户界面上线程完成执行后的输出
EN

Stack Overflow用户
提问于 2015-12-21 16:12:13
回答 2查看 30关注 0票数 0

基本上我有两个标签。

其中, first 选项卡包含数据,第二选项卡包含一些基于第一个选项卡数据的汇总数据。

在第一个选项卡中有事件列表。每当对事件进行添加/更新/删除操作时,摘要都需要重新计算。重新计算的摘要将创建数据库中的行列表。并在这些行中显示汇总选项卡。

因此,总结计算需要很长的时间。所以它阻塞了UI线程。因此,我将线程中的计算移动到平滑的UI操作中。

现在,由于摘要计算在线程中运行,我不知道计算什么时候完成,现在我需要更新汇总选项卡数据,并在计算过程中显示一些内容。

我目前的设置如下所示:

我的DatabaseHelper班:

代码语言:javascript
复制
add() {
    ...
    // Do Add operation 
    ...

    reCalculateSummary();
}

remove() {
    ...
    // Do remove operation 
    ...

    reCalculateSummary();
}

reCalculateSummary() {

    new Thread(new Runnable() {
        @Override
        public void run() {
            ...
            // calculate summary (may call another method)
            ...

            // Add calculated summary to DB
        }
    }).start();

}

在运行reCalculateSummary()时,“汇总到”选项卡应该显示加载消息。

那么,我如何才能实现这一局面呢?

我如何知道线程是否已经完成它的执行?这样,我就可以通过检索摘要数据的新db值来更新汇总选项卡数据。

下面是一些令人困惑的情况。请随意问一下,你是否对了解情况有任何疑问。

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2015-12-21 16:18:00

使用事件总线,这样您就可以更新UI,并避免对AsyncTasks的限制。

您可以创建事件"recalculateSummary",就在作业开始之前(将其视为onPreExecute),使用显示用户屏幕上的信息不最新的内容更新UI,并在作业完成后更新结果。

事件总线上的例子有奥托EventBusAutoBus .

票数 1
EN

Stack Overflow用户

发布于 2015-12-21 16:15:43

您可以使用AsyncTask

在doInBackground(.)中执行处理方法,并更新onPostExcecute(..)中的UI。方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34399924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档