gpt4 book ai didi

android - 后台任务、进度对话框、方向更改 - 是否有任何 100% 可行的解决方案?

转载 作者:IT老高 更新时间:2023-10-28 12:51:55 24 4
gpt4 key购买 nike

我在后台线程(我使用 AsyncTask)中从 Internet 下载一些数据,并在下载时显示进度对话框。方向改变,Activity 重新启动,然后我的 AsyncTask 完成 - 我想关闭进程对话框并开始一个新的 Activity。但是调用dismissDialog有时会抛出异常(可能是因为Activity被销毁了,新的Activity还没有启动)。

处理此类问题的最佳方法是什么(从后台线程更新 UI,即使用户改变方向也能正常工作)? Google 是否有人提供了一些“官方解决方案”?

最佳答案

第 1 步:将您的 AsyncTask 设为 static 嵌套类,或完全独立的类,而不是内部(非静态嵌套)类。

第 2 步:让 AsyncTask 通过数据成员持有 Activity,通过构造函数和 setter 设置。

第 3 步:创建 AsyncTask 时,将当前 Activity 提供给构造函数。

第 4 步:在 onRetainNonConfigurationInstance() 中,将 AsyncTask 与原始的、即将消失的 Activity 分离后返回它。

第 5 步:在 onCreate() 中,如果 getLastNonConfigurationInstance() 不是 null,则将其转换为您的 AsyncTask 类并调用您的 setter 以将您的新 Activity 与任务相关联。

第 6 步:不要从 doInBackground() 中引用 Activity 数据成员。

如果你按照上面的方法,一切都会奏效。 onProgressUpdate()onPostExecute()onRetainNonConfigurationInstance() 开始和后续 onCreate()< 结束之间暂停

Here is a sample project演示技术。

另一种方法是放弃 AsyncTask 并将您的工作转移到 IntentService 中。如果要完成的工作可能很长并且无论用户在 Activity 方面做什么(例如,下载大文件)都应该继续进行,这将特别有用。您可以使用有序广播 Intent 让 Activity 响应正在完成的工作(如果它仍在前台)或引发 Notification 让用户知道如果工作已经完成。 Here is a blog post有关此模式的更多信息。

关于android - 后台任务、进度对话框、方向更改 - 是否有任何 100% 可行的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3821423/

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