Android中Service介绍

       Service是运行在后台的Android组件,位于android.app包下。当应用程序不需要显示外在界面但是需要其在后台运行时,可以使用Service,如在后台完成的数据计算、后台音乐播放、资源下载等。Service是运行在后台的长生命周期的、没有UI的代码。

       和Activity不一样的是,Service不能自运行,它需要通过某一个Activity或者其他Context对象来调用,如Context.startService()和Context.bindService()等。Service既可以运行在自己的进程中,也可以运行在其他应用程序进程的上下文(context)里面。其它的组件还可以绑定到一个Service上面,通过远程过程调用来调用它。

      像Activity一样,Service也有自己的生命周期函数,一般需要通过重载下列函数来控制Service的生命周期:onCreate()、onStart()、onDestory()等。

 

Service的启动和停止大致有两种方法:

      方法一:通过调用context.startService()来启动,它可以传递参数给Service。流程一般是依次调用onCreate()和onStart()方法启动Service(注:onStart()可被多次调用)。当Service需要停止时,一般是调用stopService()方法结束之,之后再调用onDestroy()方法销毁它。需要注意的是,通过startService()启动Service后,即使调用startService()的进程结束了,Service仍然还存在,直到有进程调用stopService()或者Service通过stopSelf()方法终止时才能结束。如果直接退出而没有调用stopService(),Service会一直在后台运行,这也是一般的音乐播放器在后台运行时的状态。

      过程:context.startService()--onCreate()--onStart()--stopService()--onDestroy()。

      方法二:通过调用context.bindService()方式来启动,流程一般是依次调用onCreate()和onBind()方法启动Service。当通过unbindService()方法结束Service时,会依次调用context.unbindService()和context.onDestroy()方法。通过bindService()方法,Service就和调用bindService()的进程同生共死了,就是说,当调用bindService()的进程结束后,其bindService()也要跟着被结束。这一点是和startService()不一样的地方。

       过程:context.bindService()--onCreate()--onBind()--unbindService()--onDestroy()。

      上述两种方式可以混合使用。比如说startService()后,可以再bindService(),但只有执行了stopService()或unbindservice()后,这个Service才会被结束。以音乐播放器为例,在后台的工作的Service通过context.startService()启动某个特定音乐播放,但在播放过程中如果用户需要暂停音乐播放,则可能通过context.bindService()获取服务链接和Service对象,进而通过调用Service的对象中的函数来暂停音乐播放并保存相关信息。

      启动Service一般需要在AndroidMenifest.xml文件中注册这个Service,此时需要在AndroidManifest.xml中增加对Service的说明。

      如果在Service的onCreate()或者onStart()中做了一些比较耗时的动作,最好启动一个新线程来运行这个Service,以免其影响到主线程中的其他内容。

你可能感兴趣的:(Android)