子线程启动的Service运行在子线程吗

子线程启动的Service运行在子线程吗

我们基本上再启动Service的时候一般都是在UI线程中,service也是运行在UI线程中的,这个我们能很好理解。如果我们在子线程中启动我们的Service呢,Service将会运行在UI线程中还是子线程中。这个问题想弄清楚非常之简单,打印几句log即可。我们先创建一个Service:

public class ThreadService extends Service {
    private String TAG = ServiceTestActivity.TAG_PREFIX+getClass().getSimpleName();

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG,"oncreate, threadId = "+Thread.currentThread().getId());
    }
}

然后我们在Activity里面新建一个线程,在线程的执行方法里面启动Service,代码如下:

public class ServiceTestActivity extends AppCompatActivity {
    public static String TAG_PREFIX = "ServiceTest---";
    private String TAG = TAG_PREFIX + getClass().getSimpleName();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG,"oncreate,threadId = "+Thread.currentThread().getId());
        new Thread(new Runnable()
        {

            @Override
            public void run() {
                Log.d(TAG,"new threadid = "+Thread.currentThread().getId());
                Intent intent = new Intent(ServiceTestActivity.this,ThreadService.class);
                startService(intent);
            }
        }).start();
    }


}

运行结果如下:

07-26 16:06:35.784  D/ServiceTest---ServiceTestActivity: oncreate,threadId = 1
07-26 16:06:35.785  D/ServiceTest---ServiceTestActivity: new threadid = 1072
07-26 16:06:35.814  D/ServiceTest---ThreadService: oncreate, threadId = 1

从运行日志来看,子线程启动的Service任然是在UI线程中运行的。

猜你喜欢

转载自blog.csdn.net/baidu_27196493/article/details/81223048
今日推荐