应用程序销毁时,通知栏中的异步任务和下载进度无效

时间:2015-11-10 07:29:25

标签: android android-asynctask android-notification-bar

我正在使用异步任务下载一些图像,所有的东西都运行良好,然后我想到了Idea在通知区域显示下载进度,所以我使用了本教程并获得了100%的成功。看到这个链接我觉得这对初学者来说是个不错的link

但后来我测试了一些东西,并且在这里遇到了极其失败的原因:

这是我观察到的

1>当我使用任务管理器关闭应用程序或实际执行此操作时,异步任务停止工作。

@Override
    protected void onDestroy() {
        super.onDestroy();
        System.exit(0);
    }

使用此代码的目的是测试我的asynctask是否在后台运行。

2 - ;我想,如果我的应用程序被销毁,下载过程应继续进行并继续更新通知栏中的下载进度,是的,我想在通知中显示用于停止下载和打开活动的按钮。 / p>

请告诉我如何才能实现这两点。我注意到了Play商店应用程序的下载过程,它与我想要的完全一样。

请帮助我解决这两点。

2 个答案:

答案 0 :(得分:2)

您应该使用service来执行此操作。服务具有与使用UI的活动不同的生命周期,以确保即使UI被销毁也能继续工作。实际上,这就是服务的全部意义,长期运行并不直接与UI相关联。

服务可以向条形图发布通知并从中接收输入

答案 1 :(得分:0)

使用给出的代码,您不会测试AsyncTask是否能够在Background中运行。您试图让AsyncTask在没有您的App的情况下运行。嗯。除非您的AsyncTask是另一个程序的一部分,否则这不起作用。

使用此行

    System.exit(0);

你的进程被破坏,并且它的所有线程都被破坏了。这与关闭用户界面不同。 你应该改为使用

yourActivity.finish()

然后它应该可以正常工作。

更新

如果您需要下载以继续加载,即使应用程序被例如强迫关闭,你需要这个:

  1. 实现一个粘贴服务,注册一个Intent,比如说“example.com.START_DOWNLOAD”,将URI作为额外内容放入此Intent中。该服务可以通过此意图或系统启动来启动 - 无论哪种情况更适合您的需求。

  2. 您的应用会发送此Intent,而不是自行创建AsyncTask。

  3. 您的服务和活动必须是独立的套餐;如果该应用程序已关闭,则不会对您的下载产生任何影响。

  4. 请注意,服务可能会崩溃或被迫关闭。即使是粘性服务也可以有这个原因,但它会直接重启(最多两次重启,之后判断它已损坏)。因此,如果继续下载,则必须实现“恢复下载”功能。如果下载的大小不是很大,则重启下载可能是有效的。