子线程启动的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