android的新手 - 这个背景会被调用多少次

use*_*565 1 java multithreading android

我创建了以下后台线程:

public class loadSomeStuff extends AsyncTask <String, Integer, String>
{       
    @Override
    protected String doInBackground(String... params) {
        Intent i = new Intent("com.example.nadir_services.himan.class");           startActivity(i);
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我还创建了一个按钮,我在其中调用此线程:

new loadSomeStuff().execute("");
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,每次按下这个按钮,它会创建一个新线程吗?如果是这样,为什么那么糟糕?我的意思是,会发生什么?

还有一个问题,我注意到这被称为"后台线程".这是否意味着有另一种方法来创建新线程?我只知道这种方式.

the*_*osh 5

no,AsyncTask由4个线程的ThreadPool构造,默认情况下系统选择其中一个线程运行.

一般来说,如果你想避免内存问题,你应该从onClick初始化AsyncTask并从那里执行它,而不是每次都像这样创建一个新的:

private loadingTask = new LoadSomeStuff();

@Override
public void onClick(View v) {
    loadingTask.execute("");
}
Run Code Online (Sandbox Code Playgroud)

编辑,以供将来参考,请查看AsyncTask源代码