Android无界面编程之Service生命周期
移动终端的程序UI是很重要的,程序员往往在界面上花费很大的功夫,但也可能会因为太过关注界面忽略一些很重要的知识。刚刚接手一个项目是pc客户端android手机驻留程序,在android这边的开发主要是完成pc端需要的手机数据的读取和与pc客户端的通信。首先要说明一下这个程序是没有界面的,在程序启动器是找不到应用程序入口的。程序都是以Service的形式在后台偷偷摸摸的进行的。实现这些工作的方式用到的组件主要是Service和BroadcastReceiver。所以我就温习了一下这两个组件的相关知识和联系。
-Service
生命周期:
相比较Activity,在生命周期中少了对界面的处理,少了OnResume()和OnPause()和OnStop()而OnStart(Intent i,int startId)在sdk2.0之后弃用,由OnStartCommand(Intent I,int flags,int startId)代替。由于服务的跨进程、常驻留的特性,在生命周期上分两种情况,在官方文档中如下图。
情况一:无绑定服务--在程序上下文中调用了startService(),服务建立回调onCreate(),之后调用onStartCommand()启动服务,直到当其他组件stopService(Intent service)或它自身调用stopSelf()停止服务Service进入生命周期的onDestory()状态。表明服务已经中止。
情况二:有绑定服务—在程序上下文中调用了bindService(),如果将要绑定的服务未建立即先建立,同时回调onCreate(),之后是绑定回调onBind(),即绑定了服务。当程序上下文中调用了unBindService(),该服务回调onUnbind(),最终中止服务回调onDestory()。
有绑定服务的具体生命周期如图:
对于有绑定的服务如果是纯粹用context.bindService()启动的,其生命周期由系统自动管理,即是当所有绑定到服务的client组件都解绑后自动中止。
而如果用startService()启动的服务,无论是否绑定,最终都需要通过Service自身调用stopSelf()或别的组件调用stopService()来终止服务。