Enr*_*man 8 java android android-asynctask android-activity
使用案例:
用户启动将加载验证码的应用程序.用户填写验证码并尝试下载一些信息.
问题:
如果用户在下载时旋转设备Activity则被销毁.在执行结束时,AsyncTask正在尝试更新被破坏的内容Activity,结果是"View not attached to window manager".
"错误的"解决方案:
我可以用a掩盖问题,android:configChanges="orientation|keyboardHidden|screenSize"但是这样布局不会更新为横向.
我在问什么:
是否可以更改方向并更改传递给上下文的"参考" AsyncTask?
这个答案建议检查对话框是否为空,但它不是我正在寻找的.
在这里,他建议使用WeakReference(这里有一个关于如何使用它的好片段),但我不明白它是否是我正在寻找的.
更明确一点,这就是我在onPostExecute中所做的:
@Override
protected void onPostExecute(Auto result) {
progress.dismiss();
new DownloaderCaptcha(context).execute("");
((EditText)context.findViewById(R.id.editTextCaptcha)).setText("");
context.findViewById(R.id.progrBar).setVisibility(View.VISIBLE);
context.findViewById(R.id.captcha).setVisibility(View.INVISIBLE);
if(result != null) {
Storage.storeHistory(context, result.getTarga().getValue());
Intent i = new Intent(context, MenuActivity.class);
i.putExtra("result", result);
context.startActivity(i);
} else {
ErrorDialog.show(context, error);
}
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*ood 16
这是我的提示:
千万不能使用android:configChanges来解决这个问题.
千万不能使用Activity#onRetainNonConfigurationInstance()来解决,要么(此方法已过时).
相反,使用保留的工作人员Fragment.我最近发布了一篇文章,描述了如何使用retain Fragments 处理配置更改.它解决了保持AsyncTask旋转变化很好的问题.你基本上需要托管AsyncTask里面Fragment,叫setRetainInstance(true)上Fragment,报告AsyncTask的进度/结果返回给它Activity通过保留Fragment.
| 归档时间: |
|
| 查看次数: |
8438 次 |
| 最近记录: |