首页 > 代码库 > Android Service
Android Service
- Service组件一直在后台运行,没有用户界面,也需要再AndroidManifest.xml中配置Service,Android系统本身提供了大量Service组件,用于访问Android
- Service的生命周期:
- Service类中定义了一系列方法,如:
- onBind:是必须实现的一个方法,返回一个绑定的接口IBinder,用于与Service通信
- onCreate:当Service第一次被创建时由系统调用。
- onStartCommand:当通过startService方法启动Service时,该方法被调用
- onDestroy:当Service被关闭之前,系统调用该方法.
- onUnbind:当Service上绑定的所有客户端都断开连接时将回调该方法
- 若想使用Service必须在AndroidManif.xml配置文件中使用<service>元素声明该Service, 在其他组件中启动一个Service的方法有:
- 使用Context.startService(Intent intent)方法,类似与启动一个Activity,用该方法启动的service访问者与该service没有联系,无法进行通信和数据访问,访问者退出了,service仍可以运行,当我们调用startService方法时,被调用的Service会调用它的onCreate方法,接着调用onStart方法,一旦Service启动将一直运行到调用Context.stopService()或者stopSelf()。
- 另种调用Service的方法是通过bindService()来绑定一个Service,Service会调用onCreate方法来创建Service,但是它不会调用onStart,而是调用onBind返回一个IBinder接口,绑定Service一般用于远程Service调用,bindService(intent intent,ServiceConnection conn,Service.BIND_AUTO_CREATE)该方法启用service,并会执行Service.onBind方法,该方法会返回IBinder.访问者与service绑定在一起,访问者退出
- ServiceConnection对象:该对象的方法在主线程中运行,监听访问者与service的连接情况,创建该对象时要实现其onServiceConnected()和onServiceDisconnected(),当访问者与Service之间连接成功时会回调onServiceConnected,当Service的宿主进程由于异常或者其他原因终止,导致Service与访问者之间的连接断开会回调onServiceDisconnected方法,此时到Service的绑定仍然存在,Service再次启动时仍会触发onServiceConnected方法,但调用者主动通过unBindService方法断开与service的连接时onServiceDisconnected方法不会被调用.
onBind返回的IBinder作为ServiceConnection.onServiceConnected的第二个参数用于与Service通信 - 当Activity调用bindService绑定一个已启动的Service时,系统只是把IBinder对象传给Activity.此时要销毁Service必须先调用unbindService和stopService两个方法
- Service中通常启动新线程处理后台任务,即使Activity被销毁也不会影响执行。Service运行在UI线程中,执行耗时操作也会抛ANR异常。另外Service系统优先级较低,当系统内存不足时有可能首先被回收,为了防止Service被系统kill,可以用 startForeground(id,notification)把service变为前台Service
- Android平台中各个组件运行在自己的进程中,进程间相互通信使用RPC,并且Android通过接口定义语言来生成两个进程之间相互访问的代码
- IntentService:使用队列管理Intent请求,有新Intent请求时,就会把Intent加入队列,启动一个新的worker线程来处理Intent,不会阻塞主线程,具有如下特性:
- IntentService会创建单独的worker线程来运行onHandleIntent方法
- 所有请求处理完成后IntentService会自动终止,开发者无需执行stopService
- 为service的onstartCommand方法提供了默认实现,该实现将请求Intent加到队列中
Android Service
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。