我搜索了这里的大多数答案,所有答案都建议我们添加一个标志来 Intent 终止旧 Activity 。问题是我的 Activity 仅接收来自其他应用程序的 Intent ,并且无法控制它。
更具体地说,我的 Activity 收到加载图片的 Intent ,然后它使用 Asynctask 加载该图片并对其进行一些复杂的后台处理,例如,可能需要 2 分钟。
如果此时用户退出(假设只调用了 onStop,还没有调用 onDestroy)并分享另一张图片到应用程序,这将启动一个新的 Activity,并且无法访问之前的 Activity,但其 Asynctask 会保留启动线程,以便我的新 Activity 只是卡住而不启动自己的异步任务。
(我后来尝试了并行线程执行器,但这并不能阻止旧线程运行,从而消耗计算资源)。
知道我应该做什么吗?
(我不想在 onStop 中停止任务,因为这很容易被调用。但我确实想在共享新图片时停止任务,因为不再需要它。)
(Asynctask 会吐出一大堆在主 Activity 中声明的自定义对象,因此 Activity 会立即从后台进程获取结果更新,并且在调用 onPostExecute 后 UI 会立即更新。)
最佳答案
编辑: 看来您的问题是您试图在您的 Activity 启动的异步任务中完成所有这些图像处理工作。您是否考虑过更改您的应用程序架构以将所有这些后台处理依赖于 service ?
当您在服务中处理图像时,您可以使用该 Activity 来显示一些 UI 信息,或者如果您不需要此 UI,只需与服务进行通信(例如通过广播)以向其提供图像并让服务通过通知显示进程的一些信息。
<小时/>如果您不想在退出时让 Activity 保持 Activity 状态,您可以使用
android:noHistory="true"
在 list 的 Activity 声明中
更多信息here
关于java - Android Intent打开新 Activity 但没有关闭旧 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22588591/