gpt4 book ai didi

android - 替换 fragment 时停止 AsyncTask

转载 作者:行者123 更新时间:2023-11-30 00:55:44 24 4
gpt4 key购买 nike

在我的 fragment 中,我有 2 个连续运行的 AsyncTasks。要求是当用户使用抽屉菜单切换到不同的框架时,这些任务应该被取消。然而,当用户按下主页按钮时,这些任务应该继续运行。

我在该 fragment 中使用了以下代码:

@Override
public void onStop() {
super.onStop();

if(asyncTripWaiter != null && asyncTripWaiter.getStatus() == AsyncTask.Status.RUNNING)
asyncTripWaiter.cancel(true);

if(asyncTripTracker != null && asyncTripTracker.getStatus() == AsyncTask.Status.RUNNING)
asyncTripTracker.cancel(true);
}

问题是即使按下主页按钮,这段代码也会执行。怎么才能让它只在fragment切换的时候生效。

最佳答案

没那么简单,请考虑当您的 fragment 要返回堆栈时的情况,然后您可以访问方法 onPause()onStop()。当 AsyncTask 仍在运行时,用户可以在一秒钟内返回此 fragment 。那么再次调用 AsyncTask 可能效率不高。

其实有两种选择,第一个是同步架构解决方案,当您将模型与可见 fragment 分开同步时,您不必取消 AsyncTask 但它需要更改您的应用程序逻辑。你可以在 Android Application Architecture (Android Dev Summit 2015)正如讲师所说,你拥有什么样的架构并不重要,重要的是你如何处理你的数据加载和缓存。

因此第一个选项是将数据与 fragment 和 Activity 分开缓存。

第二个选项是让您的 AsyncTask 保持 Activity 状态,但检查是对 Activity 任务进行分段和/或缓存数据,即使它不是。用户可以稍后返回到此 fragment 。

fragmentdestroyed 时,这不会发生,所以你可以监听 onDestroy 方法并设置标志,如 destroyed = true ;。当 AsyncTask 返回时,您可以检查

if (!destroyed) { 
// do your job
}

关于android - 替换 fragment 时停止 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40200816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com