AsyncTask中的WeakReference

时间:2017-12-01 12:38:56

标签: java android android-asynctask

活动启动AsyncTask,完成后,此任务需要检查此活动是否已销毁并收集垃圾。我以为WeakReference帮我解决了这个问题。但即使我旋转屏幕并且活动被破坏,我仍然不会为空。我做错了什么?

class MyAsyncTask extends AsyncTask<String,String,String> {

WeakReference<ActivitySecond> sactivity;
MyAsyncTask(ActivitySecond a)
{
    sactivity = new WeakReference<>(a);
}
@Override
protected String doInBackground(String... strings) {
    try {
        Thread.sleep(5000);
    }
    finally {
        return "Ok";
    }
}

@Override
protected void onPostExecute(String s) {
    super.onPostExecute(s);
    if (sactivity!=null)
    {
        ActivitySecond activity =    sactivity.get();
        if (activity!=null)
            Toast.makeText(activity,s,Toast.LENGTH_LONG).show();
    }
}
}

1 个答案:

答案 0 :(得分:1)

如果除了弱引用之外没有对该对象的其他引用,则允许该对象被垃圾收集。

但实际完成后不保证。