2012-03-26 72 views
0

简介:我有3个活动,DashBoardFeedEvents。 DashBoard是应用程序启动时启动的。从那里用户可以转到Feed或活动。不同活动访问的独立下载程序类别(单独的线程)

问题:我想在启动DashBoard时启动下载(当然,在单独的线程中)。从那里用户可以转到FeedEvents,并且下载将在进行中或已经完成。应该通知活动FeedEvent(在实例中合适),通知下载完成并且数据可用。什么是完成这个最好的方法?

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

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


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

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

+1

https://github.com/rajeshcp/Android-Download-Manager,看到这个基本上这是一个单一的类(DownloadManager),它会照顾你的应用程序内所有的http调用,你可以看看这,这是我在我的许多应用程序中使用的相同的东西,谢谢 – Triode 2012-03-26 15:03:50

+0

恐怕下载管理器类不是我所需要的。我已经有一个有效的下载管理员课程。我只需要它能够根据哪个活动打开 – 2012-03-26 16:04:41

回答

1

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

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

你应该自己解决其余的问题:)没有那么难。有很多内容,或购买一个标准的书来获得Android。

+0

听起来是个不错的主意就可以完成回调功能。你能给我一些代码示例吗?只是一个概述。如何在事件和馈送中特别注册广播接收者。因为我在互联网上看到的所有例子都使用一个单独的BroadcastReciever类。 – 2012-03-26 16:37:03

+0

因为昨天被接受为答案...一个更智能的解决方案将是一个抽象类,扩展这个抽象类的活动和Feed和Events。在下载线程中设置一个监听器,并在抽象活动的onStart中注册一个监听器(不要忘记在onPause中取消注册)会做出明智的工作。 但广播方法也做得很好,并且具有活动不必知道关于下载线程的生命周期的一些优点的优点。 – 2013-02-28 22:25:43

+0

是的。实际上,我带着一个子俱乐部模式与活动和单身下载课程一起进行。这与你所说的完全相同。 – 2013-03-01 17:28:13