当我在 DDMS 中使用 AsyncTasks 检查时,该线程在 onPostExecute() 方法之后作为等待线程保留在内存中,这正常吗?这是一个重现我的问题的简化活动:
package com.example.async;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
public class ASyncTaskExampleActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new ExampleAsyncTask().execute();
}
private class ExampleAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
for (int i =0; i<50000;i++){
int j=i*2;
}
return null;
}
protected void onPostExecute(Void result) {
Log.d("Test","End onPostExecute");
}
}
}
AsyncTask 使用“线程池”技术。您启动的每个 AsyncTask 都会进入队列; “池”中有一些空闲线程(或者它们是根据需要创建的,达到一定限制)等待任务。池中的空闲线程获取 AsyncTask 并执行它,然后返回到池中。然后重复该过程,直到队列中没有更多任务为止。
这种方法有两个重要特点:
- 没有每次创建线程的开销
- 的情况下huge任务数量导致系统性能下降优雅地:大多数任务都会在队列中等待,只有少数任务会在队列中等待
一次执行;最终他们所有人都会被处决。
否则,如果为每个任务启动一个单独的线程,
系统可能会耗尽内存或线程,或者任务将占用
永远完成。
AsyncTask 完成后,您在 DDMS 中看到的线程是池中的空闲线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)