加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 执行后仍然存在AsyncTask线程,这是正常的吗?

发布时间:2020-12-14 05:51:32 所属栏目:Java 来源:网络整理
导读:当我在DDMS中使用AsyncTasks检查时,线程在onPostExecute()方法之后作为等待线程保留在内存中,这是正常的吗?这是一个简化的Activity,它可以重现我的问题: package com.example.async;import android.app.Activity;import android.content.Intent;import and
当我在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并执行它,然后返回池.然后重复该过程,直到队列中不再有任务为止.

这种方法有两个重要特征:

>每次创建一个线程都没有开销
>在大量任务的情况下,系统性能优雅地降级:大多数任务将在队列中等待,其中只有少数将会
一次执行;最终所有人都会被处决.
否则,如果为每个任务启动了单独的线程,则
系统可能会耗尽内存或线程,或任务将耗尽
永远完成.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读