用例:
用户启动将加载验证码的应用程序。用户填写验证码并尝试下载一些信息。
问题:
如果用户在下载时旋转设备,Activity
则会被破坏。在执行结束时,AsyncTask 试图更新被破坏Activity
的对象,结果是“视图未附加到窗口管理器”。
“错误”解决方案:
我可以用 a 掩盖问题,android:configChanges="orientation|keyboardHidden|screenSize"
但这样布局不会更新为横向。
我在问什么:
是否可以更改方向并更改传递给 Context 的“参考” 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);
}
}