java - Android Intent打开新 Activity 但没有关闭旧 Activity

标签 java android multithreading android-intent android-asynctask

我搜索了这里的大多数答案,所有答案都建议我们添加一个标志来 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/

相关文章:

java - 在 Java 中打开端口时出错

android - 如何立即在 TextView 中显示来自 Edittext 的文本?

java - 无法切换屏幕 [Libgdx]

c++ - condition_variable.notify 是同步点吗?

java - 多线程环境下 LinkedList<T> clear 和 new LinkedList<T> 的区别

javascript - 使用线程 - UbuntuTouch/QML/Javascript

java - 启动进程时出现 IOException

java - Matchers.any() 用于 Mockito 中的空值

android - 非导出 Activity : launched on emulators; SecurityException on phones

java - GLSL 着色器无法在 Mac 上运行