Android服务的方法在不同的线程中调用。它仍然在主线程上运行吗?

时间:2015-05-14 01:37:43

标签: java android multithreading service

如果我理解正确,默认情况下,Android Service会在主UI线程上运行。 因此,对于任何非主线程操作,我发现人们建议在Service中启动一个单独的线程。

但是,我的问题是,如果在另一个线程中调用Service的方法,即AsyncTasknew Thread(...).start();Service的方法是否在调用线程?还是它在主线程上运行,据说Service正在运行?

换句话说,

new Thread(new Runnable() {

    @Overrde
    public void run() {
        myAndroidService.doSomething();
    }
}).start();

在这个新的MyAndroidService#doSomething()中会Thread调用吗?

2 个答案:

答案 0 :(得分:6)

方法总是在调用它的线程中运行。

方法实际上并不属于任何线程,所以是的,即使在您的服务中定义了该方法,它也将在AsyncTask线程中执行,而不是在您的服务运行的主线程中执行。

答案 1 :(得分:1)

是的,正如马丁上面提到的那样。

此外,您可以通过以下方式查看方法的主题信息:

private void doSomething(){
    Log.i(TAG, "I'm doing something in thread " + Thread.currentThread().toString());
}