2014-09-18 31 views
2

可以说我有一个类,其中包含名为fooTask的扩展AsyncTask的内部类和名为getFoo()的方法返回一些int值。如果我在AsyncTask's doInBackground()方法内调用getFoo()方法,这个getFoo()方法会在主线程还是后台线程中执行?Android AsyncTask:在主线程或后台线程中执行doInBackground()内部调用的方法吗?

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; 
    } 
} 
+2

它将从您的后台线程中调用。这个方法在代码中的位置并不重要,它在什么地方被调用。 – zgc7009 2014-09-18 19:00:43

回答

1

一切都在后台运行。它与您的GUI或不同的线程没有关系。

1

里面的一切doInBackground在后台运行,除非你包里面runOnUiThread

+0

你也可以是极端的,直接从主线程调用'doInBackground' :) – 2014-09-18 19:17:39

1

它会在后台线程作为AsyncTask文档中提到的被执行,

这个类的一些代码块允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。

链接Android文档里面你写doInBackground here

1

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

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

相关问题