Service:
1.Service:是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求要长期运行的任务。
2.Service和Thread的区别:
Sercice是运行在主线程的,Service确实是运行在主线程里的,也就是说如果你在Service里编写了非常耗时的代码,程
序必定会出现ANR的。
3.既然在Service里也要创建一个子线程,那为什么不直接在Activity里创建呢?
这是因为Activity很难对Thread进行控制,当Activity被销毁之后,就没有任何其它的办法可以再重新获取到之前创建的
子线程的实例。而且在一个Activity中创建的子线程,另一个Activity无法对其进行操作。但是Service就不同了,所有
的Activity都可以与Service进行关联,然后可以很方便地操作其中的方法,即使Activity被销毁了,之后只要重新与
Service建立关联,就又能够获取到原有的Service中Binder的实例。因此,使用Service来处理后台任务,Activity就可
以放心地finish,完全不需要担心无法对后台任务进行控制的情况。
4.绑定
bindService
unbindService
5.Service和Activity的区别:
1.Activity:
*Activity对应一个界面
*应用退出,Activity对象就会死亡
*应用再次进入,启动的Activity对象是重新建立的
2.Service:
*不与任何界面关联
*应用退出,Service仍在运行
*应用再次进入,启动的Service还是前面运行的Service对象
6.Service的定义:
1.定义一个类继承于Service类
public class MainService extends Service{
}
2.在AndroidManiFest.xml中配置Service
7.Service的启动与停止:
1.一般启动和停止
context.startService(Intent intent)
context.stopService(Intent intent)
2.绑定启动与解绑
context.bindService(Intent intent,ServiceConnection connection)
context.unbindService(ServiceConnection connection)
8.Service的生命周期:
1.onCreate()
首次创建服务时,系统将调用此方法来执行一次性设置程序(在调用 onStartCommand() 或onBind() 之前)。如果服
务已在运行,则不会调用此方法,该方法只调用一次
2.onStartCommand()
当另一个组件(如 Activity)通过调用 startService() 请求启动服务时,系统将调用此方法。一旦执行此方法,服
务即会启动并可在后台无限期运行。 如果自己实现此方法,则需要在服务工作完成后,通过调用 stopSelf() 或
stopService() 来停止服务。(在绑定状态下,无需实现此方法。)
3.onBind()
当另一个组件想通过调用 bindService() 与服务绑定(例如执行 RPC)时,系统将调用此方法。在此方法的实现中,
必须返回 一个IBinder 接口的实现类,供客户端用来与服务进行通信。无论是启动状态还是绑定状态,此方法必须重
写,但在启动状态的情况下直接返回 null。
4.onUnbind()
5.onDestroy()
当服务不再使用且将被销毁时,系统将调用此方法。服务应该实现此方法来清理所有资源,如线程、注册的侦听器、接
收器等,这是服务接收的最后一个调用。
注意:每次startService都会调用Service的onStartCommand().
9.远程Service的使用(AIDL)
1.AIDL的基本理解
2.使用AIDL
10.应用练习:
1.音乐播放的相关操作:MediaPlayer
2.使用localService实现音乐播放功能
3.监听电话状态:TelephonyManager
4.需要在Service中添加电话监听
5.使用AIDL实现挂断电话的功能