我已经宣布在后台做工作课后:活动的局部变量仍然有效的OnDestroy()
public class ReportLoadTask extends AsyncTask<Void,Void, ReportLoadTaskResult> {
public ReportLoadTask(Context context, String barcode, ReportLoadTaskListener l) {
...
}
}
我使用这个类的一个实例为Activity
的局部变量:
private ReportLoadTask mReportLoadTask;
...
类代码一点
我准备一个任务,然后让用户决定是否继续或不显示AlertDialog
:
mReportLoadTask = new ReportLoadTask(this, barcode, this)
...
new AlertDialog.Builder(this)
.setMessage("Continue with search?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mReportLoadTask.execute();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mReportLoadTask = null;
return;
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
当测试我期待mReportLoadTask
成为null
如果我摧毁Activity
(例如通过旋转设备),而显示AlertDialog
。但实际上这并未发生。所有Activity
生命周期方法(OnPause
,OnStop
,OnDestroy
)是否被正确调用,即使其他的局部变量(一些int
S)被破坏,但这个变量在某种程度上似乎“生存”。这是为什么?
在探索网络之后,似乎Android在某处保留了这个对象的引用,但它在哪里可以保留它?对这个对象的唯一引用是在我的Activity
中,它正在被销毁。
大概'mReportLoadTask'运行你试过它使'mReportLoadTask'对象空之前调用'mReportLoadTask.cancel'后? –
'mReportLoadTask'只有在你明确设置为'null'的情况下才会变为'null' – nandsito