在销毁父活动后保留对片段的引用

时间:2014-10-15 15:22:42

标签: android android-activity android-fragments android-asynctask

应用程序流图像(无法直接发布 - 尚未提供足够的声誉) http://i.stack.imgur.com/gnlEJ.jpg

简介

我们正在创建一个管理我们产品的应用程序。我们有几种类型的产品(1),每种类型的产品都有几十种类型(2)(例如视频)。

我们的网站上有一个xml文件,其中包含每个产品的所有信息。当用户选择产品类型(1)时,它会到达我们的网站下载填充产品列表的xml文件(2)。然后,用户从列表中选择产品,然后将信息传递给产品单一活动(3)。

哦,哲学是在创建应用程序时创建一个用户可以下载与其相关的产品和材料的地方,但让应用程序管理您下载的产品。您下载了所需的一切,因此当您没有互联网连接时,您仍然可以使用该应用程序并查看您下载的产品。

问题

我们的应用程序中的一些产品相当大,需要更长的时间才能下载。当用户参与产品单一活动(3)时,他们可以下载产品,当配置发生变化时,我们知道我们需要使用片段来维护按钮上的进度条和文本。

!当用户点击后退按钮时会出现问题。

我们不想只为用户取消下载。

  1. 下载完成需要一段时间
  2. 我们希望用户能够一次下载多个产品。
  3. 不取消ASyncTask实际上让它在用户点击后退按钮时继续运行,甚至允许我们发送Toast消息以显示它仍在运行。问题出现在用户导航回活动时,UI未显示文件仍在下载,因为我们丢失了对正在运行的ASyncTask的引用。

    解决方案

    我们正在尝试提出一个解决方案,以便用户可以退出产品单一活动(3)并稍后返回它并查看ASyncTask的状态(如果它是先前启动的)。问题是如果活动被破坏,我们如何保持对ASyncTask或Fragment的引用。

2 个答案:

答案 0 :(得分:0)

首先,即使你的应用程序显示在屏幕上还是死了,有些服务可以进行后台工作..其次,有线程可以正常工作和工作。 第三,有一个名为onBind的方法将一个活动绑定到一个服务..

你的解决方案??

use threads in services and whenver your activity is called or app is opened
bind it to the service to get what you want...

注意:如果您的文件需要一些时间下载,那么asynctask不是推荐的方法..那就是它需要一个时间的地狱.. 希望我有所帮助... thnks

答案 1 :(得分:0)

您的问题的解决方案是使用服务。 Android中的服务旨在用于长时间运行的后台任务。虽然您无法直接从服务挂钩到UI线程,但您可以使用处理程序发布到UI。只要需要,您的服务就会保持不变(Android只会在内存不足的情况下杀死它们,甚至会试图远离正在运行的服务)。

AsyncTask旨在仅用于短操作。可以使用它进行一些更改来运行更长的进程,但Android更喜欢不这样做。 Android专门试图引导您使用后台线程和进程。

您看到的问题是因为AsyncTask(通常是从活动类中定义的)与Activity本身绑定并保持对它的引用。但是当一个活动进入后台并且在后台保持一段时间后,活动可能会被破坏并且GC会在此时,AsyncTask失去对父项的引用。通过服务,您的活动是否仍然可用无关紧要。您可以随时连接到服务,然后查询服务以查找下载状态。