这是场景:
- 账户登录页面
- 单击“登录”会触发登录 AsyncTask
- 要在网络访问期间阻止 UI,会弹出 ProgressDialog
- 返回时,ProgressDialog 被关闭,用户转发
此流程运行良好。
这是问题所在:
- 用户可以在 AsyncTask 登录时旋转屏幕
目前,ProgressDialog 由类字段引用,并使用该指针和调用 .dismiss() 将其关闭。
但是,如果屏幕旋转,一切都会崩溃。
可能是因为重新创建了 Activity?我怀疑该字段引用周围的闭包指向一个无法访问的对象。你怎么看?
我怎样才能可靠而优雅地解决它?只需添加if (... != null)
支票?
更一般地说,我必须承认我不明白在这样的情况下应用的“最佳实践”:
- 活动 A 触发 AsyncTask
- 用户离开活动 A(后退按钮?旋转屏幕?onClick 启动 Intent?)
当 Activity A 不再是最顶层但其 onPostExecute() 具有 UI 效果时,AsyncTask 返回,注意:原始委托观察者不再可用。
困惑*(注意:我是初学者,所以彻底的解释会对我有很大帮助)