在这一章中我们介绍Android中Service的用法,让大家都能用Serveice
你将了解:
- 为什么在Service中创建子线程而不是Activity中
- Service的两种启动方法有什么区别
- IntentService的使用场景与特点
一、为什么在Service中创建子线程而不是Activity中
这是因为Activity很难对Thread进行控制,当Activity被销毁之后,就没有任何其它的办法可以再重新获取到之前创建的子线程的实例。而且在一个Activity中创建的子线程,另一个Activity无法对其进行操作。但是Service就不同了,所有的Activity都可以与Service进行关联,然后可以很方便地操作其中的方法,即使Activity被销毁了,之后只要重新与Service建立关联,就又能够获取到原有的Service中Binder的实例。因此,使用Service来处理后台任务,Activity就可以放心地finish,完全不需要担心无法对后台任务进行控制的情况。
二、Service的两种启动方法有什么区别
- 在Context中通过public boolean bindService(Intent service,ServiceConnection conn,int flags)方法来进行Service与Context的关联并启动,并且Service的生命周期依附于Context(不求同时同分同秒生,但求同时同分同秒死)
- 通过public ComponentName startService(Intent service)方法去启动一个Service,此时Service的生命周期与启动它的Context无关。
注意:
都需要在xml里注册你的Service,就像这样:
<service
android:name=".packnameName.youServiceName"
android:enabled="true" />
三、IntentService的使用场景与特点
其是Service的子类,异步会自动停止的服务,处理完耗时操作自动停止并销毁服务
优点:
- 不需手动new Thread 本身就异步嘛。
- 不需考虑什么时候关闭,自动关闭嘛
onStartCommand中回调了onStart,onStart中通过mServiceHandler发送消息到该handler的handleMessage中去。最后handleMessage中回调onHandleIntent(intent)。