由不同活动访问的单独的下载程序类(单独的线程)

时间:2012-03-26 14:56:53

标签: android multithreading asynchronous download

简介:我有3项活动,DashBoardFeedEvents。 DashBoard是应用程序启动时启动的。用户可以从那里转到Feed或事件。

问题:我希望在DashBoard启动时启动下载(当然是在单独的线程中)。用户可以从那里转到FeedEvents,下载工作正在进行中或已经完成。应通知活动FeedEvent(在实例中适用),下载已完成并且数据可用。实现这一目标的最佳方法是什么?

我当前的代码:我有一个下载程序类DownloadHandler,它由DashBoard活动启动。该类在单独的线程上下载。该类跟踪一个名为completed的布尔值。它被实例化为false,下载完成后会更改为true

目前,我的类FeedEvents将在一个单独的线程中每100ms左右轮询变量completed,因此它不会阻止UI线程。当completed变量变为true时,它调用该特定类中的函数,然后查询DataHandler类以获取下载的数据。


这确实有效,但我觉得我的逻辑有点混乱,必须有更好的方法来做到这一点。因为我使用两个单独的线程,一个用于下载,一个用于轮询已完成的变量。有更好的方法吗?

我已阅读AsyncTask和不同的回调,但问题是我无法在特定类中指定回调。因为下载完成后,当前活动可能是DashBoardEventsFeeds。下载完成后,无法保证哪些活动会在前面。

1 个答案:

答案 0 :(得分:1)

我会在我的下载线程中启动一个广播(为此设置一个intentfilter)和在Feeds and Events中注册接收者(不要忘记在onStop()中取消注册它们)。 我经常为此目的使用这个解决方案 - 它很容易并且做得很好。

BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
        }
};

你应该自己解决剩下的问题:)不是很难。有很多关于这个或购买标准书来进入Android。