基本上我有两个标签。
其中, first 选项卡包含数据,第二选项卡包含一些基于第一个选项卡数据的汇总数据。
在第一个选项卡中有事件列表。每当对事件进行添加/更新/删除操作时,摘要都需要重新计算。重新计算的摘要将创建数据库中的行列表。并在这些行中显示汇总选项卡。
因此,总结计算需要很长的时间。所以它阻塞了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值来更新汇总选项卡数据。
下面是一些令人困惑的情况。请随意问一下,你是否对了解情况有任何疑问。
提前感谢!
发布于 2015-12-21 16:18:00
使用事件总线,这样您就可以更新UI,并避免对AsyncTasks的限制。
您可以创建事件"recalculateSummary",就在作业开始之前(将其视为onPreExecute),使用显示用户屏幕上的信息不最新的内容更新UI,并在作业完成后更新结果。
事件总线上的例子有奥托,EventBus,AutoBus .
发布于 2015-12-21 16:15:43
您可以使用AsyncTask。
在doInBackground(.)中执行处理方法,并更新onPostExcecute(..)中的UI。方法
https://stackoverflow.com/questions/34399924
复制相似问题