Android Intent打开了新活动,但没有关闭旧活动

时间:2014-03-23 08:26:47

标签: java android multithreading android-intent android-asynctask

我在这里搜索了大多数答案,并建议我们添加一个标志来杀死旧活动。问题是我的活动只接收来自其他应用程序的意图,并且无法控制它。

更具体地说,我的活动收到加载图片的意图,然后它使用Asynctask加载并对该图片进行一些复杂的后台处理,比方说,可能是2分钟。

如果此时用户退出(假设只调用onStop,尚未onDestroy)并与应用程序共享另一张图片,则会启动一个新活动,并且无法访问上一个活动,但其Asynctask保持不变提升线程,以便我的新活动冻结而不启动自己的Asynctask。

(我后来尝试了并行线程执行程序,但是这并没有阻止旧线程运行,从而消耗了计算资源)。

知道我应该做什么吗?

(我不想在onStop中停止任务,因为这很容易被调用。但我确实想要在共享新图片时停止任务,因为不再需要它。)

(Asynctask将吐出在主活动中声明的大量自定义对象,因此活动立即从后台进程更新结果,并在调用onPostExecute后立即更新UI。)< / p>

2 个答案:

答案 0 :(得分:1)

修改 您的问题似乎是您正在尝试在您的活动启动的asynctasks中执行所有这些图像处理工作。您是否考虑过更改自己的应用架构,以便将所有后台处理功能都归结为service

您可以使用该活动在您处理服务中的图像时显示一些UI信息,或者如果您不需要此UI只是简单地与服务通信(例如通过广播)来提供它图像,让服务通过通知显示流程的一些信息。


如果您在退出活动时不想让活动保持活跃,可以使用

清单

中活动声明中的

android:noHistory="true"

更多信息here

答案 1 :(得分:0)

这是一种解决方法,目前似乎运作良好:

获取共享首选项prefs后,请在onCreate中执行此操作:

prefs.edit().putBoolean("ForceClose", true).commit();

onPreExecute()的{​​{1}}中,输入:

AsyncTask

prefs.edit().putBoolean("ForceClose", false).commit(); 的{​​{1}}中,不断检查

doInBackground()

并在AsyncTask中致电if (prefs.getBoolean("ForceClose", false)) cancel(true); 以完成活动。