gpt4 book ai didi

java - AsyncTask线程执行完还在,正常吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:41:47 27 4
gpt4 key购买 nike

当我在 DDMS 中使用 AsyncTasks 检查时,线程在 onPostExecute() 方法之后作为等待线程保留在内存中,这正常吗?这是重现我的问题的简化 Activity :

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 并执行它,然后返回到池中。然后重复该过程,直到队列中没有更多任务。

这种方法有两个重要的特点:

  1. 没有每次创建线程的开销
  2. 大量任务的情况下,系统性能会正常降低:大部分任务将在队列中等待,只有少数任务会一次执行;最终他们都会被处决。否则,如果为每个任务启动一个单独的线程,则系统可能会耗尽内存或线程,或者任务将占用永远结束。

AsyncTask 完成后在 DDMS 中看到的线程是池中的空闲线程。

关于java - AsyncTask线程执行完还在,正常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6714085/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com