活动的成员作用域和异步任务
我在活动类中初始化成员变量
private String test = new String("A");
然后我用它来写入登录从活动启动的匿名异步任务的方法的长时间耗时的循环doInBackground()
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
}
@Override
protected void onPostExecute(Void result) {
}
@Override
protected Void doInBackground(Void... params) {
for (int j = 10; j >= 0; j--) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i("DOINBACKGROUND ", test);
}
}.execute();
问:当我在活动仍在执行时离开活动,并且在执行活动的 onDestroy()
之后,我在日志中看到成员变量仍然处于活动状态且未被销毁。有人可以向我解释一下这怎么可能吗?Asynctask
赏金问题:成员变量仍然处于活动状态,因为即使在 之后,由于 gc 条件和 gc 优先级,它尚未被丢弃。这没关系。onDestroy()
但我的怀疑是,如果
- 在引用异步任务结束其内容之前,'test'成员变量(以及活动的上下文)不会被丢弃,因此异步任务可以始终且肯定地完成其而不会崩溃(尽管会暂时消耗内存)
doInBackground()
或者相反
- 无论异步任务是否正在运行,'test'成员变量迟早都会被丢弃,这可能会导致asysnctask崩溃