Android:完成执行后在UI上输出线程

时间:2015-12-21 16:12:13

标签: android multithreading

基本上我有两个标签。

其中 第一个 标签包含数据,而 第二个 包含一些基于数据的摘要类型在第一个标签的数据上。

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

所以问题是汇总计算需要很长时间。所以它阻止了UI线程。所以我在线程中移动了计算以实现流畅的UI操作。

现在由于汇总计算在线程中运行,我不知道计算何时完成,现在我需要更新摘要标签数据并在计算过程中显示某些内容。

我当前的设置是这样的:

我的DatabaseHelper类:

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值来更新摘要选项卡数据。

所以这里有一些令人困惑的情况。如果您对了解情况有任何疑问,请随时询问。

提前致谢!

2 个答案:

答案 0 :(得分:1)

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

您可以创建事件" recalculateSummary",并在作业开始之前(将其视为onPreExecute),使用向用户显示屏幕上的信息未达到的内容更新UI约会,并在工作完成时更新结果。

事件总线的示例包括OttoEventBusAutoBus ......

答案 1 :(得分:0)

您可以使用 AsyncTask doInBackground(..)方法中进行处理,并更新 onPostExcecute(..)方法中的UI