我正在使用异步任务下载一些图像,所有的东西都运行良好,然后我想到了Idea在通知区域显示下载进度,所以我使用了本教程并获得了100%的成功。看到这个链接我觉得这对初学者来说是个不错的link。
但后来我测试了一些东西,并且在这里遇到了极其失败的原因:
这是我观察到的
1>当我使用任务管理器关闭应用程序或实际执行此操作时,异步任务停止工作。
@Override
protected void onDestroy() {
super.onDestroy();
System.exit(0);
}
使用此代码的目的是测试我的asynctask是否在后台运行。
2 - ;我想,如果我的应用程序被销毁,下载过程应继续进行并继续更新通知栏中的下载进度,是的,我想在通知中显示用于停止下载和打开活动的按钮。 / p>
请告诉我如何才能实现这两点。我注意到了Play商店应用程序的下载过程,它与我想要的完全一样。
请帮助我解决这两点。
答案 0 :(得分:2)
您应该使用service来执行此操作。服务具有与使用UI的活动不同的生命周期,以确保即使UI被销毁也能继续工作。实际上,这就是服务的全部意义,长期运行并不直接与UI相关联。
服务可以向条形图发布通知并从中接收输入
答案 1 :(得分:0)
使用给出的代码,您不会测试AsyncTask是否能够在Background中运行。您试图让AsyncTask在没有您的App的情况下运行。嗯。除非您的AsyncTask是另一个程序的一部分,否则这不起作用。
使用此行
System.exit(0);
你的进程被破坏,并且它的所有线程都被破坏了。这与关闭用户界面不同。 你应该改为使用
yourActivity.finish()
然后它应该可以正常工作。
的更新强> 的
如果您需要下载以继续加载,即使应用程序被例如强迫关闭,你需要这个:
实现一个粘贴服务,注册一个Intent,比如说“example.com.START_DOWNLOAD”,将URI作为额外内容放入此Intent中。该服务可以通过此意图或系统启动来启动 - 无论哪种情况更适合您的需求。
您的应用会发送此Intent,而不是自行创建AsyncTask。
您的服务和活动必须是独立的套餐;如果该应用程序已关闭,则不会对您的下载产生任何影响。
请注意,服务可能会崩溃或被迫关闭。即使是粘性服务也可以有这个原因,但它会直接重启(最多两次重启,之后判断它已损坏)。因此,如果继续下载,则必须实现“恢复下载”功能。如果下载的大小不是很大,则重启下载可能是有效的。