Java Android AsyncTask:在doInBackground()内调用的方法将在主线程还是后台线程中执行?

Java Android AsyncTask:在doInBackground()内调用的方法将在主线程还是后台线程中执行?,java,android,android-asynctask,Java,Android,Android Asynctask,假设我有一个类,它包含一个名为fooTask的内部类,该类扩展了AsyncTask,还有一个名为getFoo的方法,该方法返回一些int值。如果我在AsyncTask的doInBackground方法中调用这个getFoo方法,这个getFoo方法会在主线程还是后台线程中执行 public class SomeClass extends Activity { @Override public void onCreate(Bundle savedInstanceState){

假设我有一个类,它包含一个名为fooTask的内部类,该类扩展了AsyncTask,还有一个名为getFoo的方法,该方法返回一些int值。如果我在AsyncTask的doInBackground方法中调用这个getFoo方法,这个getFoo方法会在主线程还是后台线程中执行

public class SomeClass extends Activity {


    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        fooTask task = new fooTask();
        task.execute();
    }

    private class fooTask extends AsyncTask<Void, Void, Integer>{

        @Override
        protected Integer doInBackground(Void... params) {
            int foo = getFoo();
            return foo;
        }

    }

    private int getFoo(){
        // Will this method be executed in main or background thread?
        return 1;
    }
}

内部的所有内容都在后台运行,除非您将某些代码块包装在内部,否则它将在后台线程中执行,如AsyncTask文档中所述

此类允许在UI线程上执行后台操作和发布结果,而无需操纵线程和/或处理程序


链接到android文档

您在doInBackground中编写的所有内容都在后台运行。它与您的GUI或其他线程没有连接。

它不是在后台或主线程中运行的方法-它是字节码。但是,字节码可以安排在任何线程中执行


特别是,如果您直接从主线程调用doInBackground,它将在主线程上运行。如果您将实现保持原样,则不会直接访问此方法-它将在后台线程中运行。

它将从后台线程调用。方法在代码中的位置并不重要,重要的是调用它的位置。您也可以非常极端,直接从主线程调用doInBackground: