1. Service组件一直在后台运行,没有用户界面,也需要再AndroidManifest.xml中配置Service,Android系统本身提供了大量Service组件,用于访问Android

  2. Service的生命周期:
  3. Service类中定义了一系列方法,如:
    • onBind:是必须实现的一个方法,返回一个绑定的接口IBinder,用于与Service通信
    • onCreate:当Service第一次被创建时由系统调用
    • onStartCommand:当通过startService方法启动Service时,该方法被调用
    • onDestroy:当Service被关闭之前,系统调用该方法.
    • onUnbind:当Service上绑定的所有客户端都断开连接时将回调该方法

  4. 若想使用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绑定在一起,访问者退出

  5. ServiceConnection对象:该对象的方法在主线程中运行,监听访问者与service的连接情况,创建该对象时要实现其onServiceConnected()和onServiceDisconnected(),当访问者与Service之间连接成功时会回调onServiceConnected,当Service的宿主进程由于异常或者其他原因终止,导致Service与访问者之间的连接断开会回调onServiceDisconnected方法,此时到Service的绑定仍然存在,Service再次启动时仍会触发onServiceConnected方法,但调用者主动通过unBindService方法断开与service的连接时onServiceDisconnected方法不会被调用.
    onBind返回的IBinder作为ServiceConnection.onServiceConnected的第二个参数用于与Service通信


  6. 当Activity调用bindService绑定一个已启动的Service时,系统只是把IBinder对象传给Activity.此时要销毁Service必须先调用unbindService和stopService两个方法

  7. Service中通常启动新线程处理后台任务,即使Activity被销毁也不会影响执行。Service运行在UI线程中,执行耗时操作也会抛ANR异常。另外Service系统优先级较低,当系统内存不足时有可能首先被回收,为了防止Service被系统kill,可以用 startForeground(id,notification)把service变为前台Service

  8. Android平台中各个组件运行在自己的进程中,进程间相互通信使用RPC,并且Android通过接口定义语言来生成两个进程之间相互访问的代码

  9. IntentService:使用队列管理Intent请求,有新Intent请求时,就会把Intent加入队列,启动一个新的worker线程来处理Intent,不会阻塞主线程,具有如下特性:
    • IntentService会创建单独的worker线程来运行onHandleIntent方法
    • 所有请求处理完成后IntentService会自动终止,开发者无需执行stopService
    • 为service的onstartCommand方法提供了默认实现,该实现将请求Intent加到队列中


更多相关文章

  1. android thread handler timertask
  2. Android如何平移一个View
  3. 如何检查后台服务(Android的Service类)是否正在运行?
  4. Android(安卓)webkit 事件传递流程
  5. Android使用WebView和JS互相调用
  6. android IPC及原理简介
  7. Android强制使用WebView不调用系统或外部浏览器
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. 关于activity之间及activity与baseAdapte
  2. MSM7627的内存分布图
  3. Android如何缩放应用中的字体大小
  4. 【Android】intent-filter里data匹配分析
  5. [置顶] android MultiDex multide
  6. 通过ViewPager实现类似微信的页面切换(Fra
  7. android获取本地视频路径
  8. Android-SDK-Manager 不能更新最有效的解
  9. eclipse中修改工程的Android版本
  10. public static final int a;static和final