如果我理解正确,默认情况下,Android Service
会在主UI线程上运行。
因此,对于任何非主线程操作,我发现人们建议在Service
中启动一个单独的线程。
但是,我的问题是,如果在另一个线程中调用Service
的方法,即AsyncTask
或new Thread(...).start();
,Service
的方法是否在调用线程?还是它在主线程上运行,据说Service
正在运行?
换句话说,
new Thread(new Runnable() {
@Overrde
public void run() {
myAndroidService.doSomething();
}
}).start();
在这个新的MyAndroidService#doSomething()
中会Thread
调用吗?
答案 0 :(得分:6)
方法总是在调用它的线程中运行。
方法实际上并不属于任何线程,所以是的,即使在您的服务中定义了该方法,它也将在AsyncTask
线程中执行,而不是在您的服务运行的主线程中执行。
答案 1 :(得分:1)
是的,正如马丁上面提到的那样。
此外,您可以通过以下方式查看方法的主题信息:
private void doSomething(){
Log.i(TAG, "I'm doing something in thread " + Thread.currentThread().toString());
}