简介:我有3项活动,DashBoard
,Feed
和Events
。 DashBoard是应用程序启动时启动的。用户可以从那里转到Feed或事件。
问题:我希望在DashBoard
启动时启动下载(当然是在单独的线程中)。用户可以从那里转到Feed
或Events
,下载工作正在进行中或已经完成。应通知活动Feed
或Event
(在实例中适用),下载已完成并且数据可用。实现这一目标的最佳方法是什么?
我当前的代码:我有一个下载程序类DownloadHandler
,它由DashBoard
活动启动。该类在单独的线程上下载。该类跟踪一个名为completed
的布尔值。它被实例化为false
,下载完成后会更改为true
。
目前,我的类Feed
或Events
将在一个单独的线程中每100ms左右轮询变量completed
,因此它不会阻止UI线程。当completed
变量变为true
时,它调用该特定类中的函数,然后查询DataHandler
类以获取下载的数据。
这确实有效,但我觉得我的逻辑有点混乱,必须有更好的方法来做到这一点。因为我使用两个单独的线程,一个用于下载,一个用于轮询已完成的变量。有更好的方法吗?
我已阅读AsyncTask
和不同的回调,但问题是我无法在特定类中指定回调。因为下载完成后,当前活动可能是DashBoard
,Events
或Feeds
。下载完成后,无法保证哪些活动会在前面。
答案 0 :(得分:1)
我会在我的下载线程中启动一个广播(为此设置一个intentfilter)和在Feeds and Events中注册接收者(不要忘记在onStop()中取消注册它们)。 我经常为此目的使用这个解决方案 - 它很容易并且做得很好。
BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
}
};
你应该自己解决剩下的问题:)不是很难。有很多关于这个或购买标准书来进入Android。