使用场景:
用户启动应用程序加载验证码。用户填写验证码并尝试下载一些信息。
问题:
如果用户在下载过程中旋转设备,则Activity
会被销毁。在执行结束时,AsyncTask正在尝试更新已销毁的Activity
,结果是"View not attached to window manager"。
"错误"解决方案:
我可以使用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);
}
}