android Service认知

Service的生命周期:onStart onDestroy onBind

http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html

  • #使用场景:
    • 用户离开activity后,仍需继续工作,例如从网络下载文件,播放音乐
    • 无论activity出现(重现)或离开,都需持续工作,例如网络聊天应用 -连接网络服务,正在使用一个远程API提供 的服务
      -定时触发的服务,例如Linux中的cron

什么情况下使用 startService 或 bindService 或 同时使用startService 和 bindService?

  1. startservice():长期在后台执行某个任务. onstartcommand- oncreate bindservcie():
    需要通信与servie通信
  2. [ ]
  3. ######Service 与 Thread 的区别
    — 很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下。
    **1) Thread:**Thread 是程序执行的最小单元,它是分配CPU的基本单位。可以用 Thread 来执行一些异步的操作。
    **2) Service:**Service 是android的一种机制,当它运行的时候如果是Local Service,那么对应的 Service 是运行在主进程的 main 线程上的。

Example:
onCreate,onStart 这些函数在被系统调用的时候都是在主进程的 main 线程上运行的。
如果是Remote Service,那么对应的 Service 则是运行在独立进程的 main 线程上。因此请不要把Service理解
成线程,它跟线程半毛钱的关系都没有!

既然这样,那么我们为什么要用 Service 呢?
其实这跟 android 的系统机制有关,我们先拿 Thread 来说。Thread 的运行是独立于 Activity 的,也就是说当一个 Activity 被 finish 之后,如果你没有主动停止 Thread 或者 Thread 里的 run 方法没有执行完毕的话,Thread 也会一直执行。因此这里会出现一个问题:当 Activity 被 finish 之后,你不再持有该 Thread 的引用。另一方面,你没有办法在不同的 Activity 中对同一 Thread 进行控制。

  • 举个例子: 如果你的 Thread 需要不停地隔一段时间就要连接服务器做某种同步的话,该 Thread 需要在 Activity
    没有start的时候也在运行。这个时候当你 start 一个 Activity 就没有办法在该 Activity 里面控制之前创建的
    Thread。因此你便需要创建并启动一个 Service ,在 Service 里面创建、运行并控制该
    Thread,这样便解决了该问题(因为任何 Activity 都可以控制同一 Service,而系统也只会创建一个对应 Service
    的实例)。

    因此你可以把 Service 想象成一种消息服务,而你可以在任何有 Context 的地方调用
    Context.startService、Context.stopService、Context.bindService,
    Context.unbindService,来控制它,你也可以在 Service 里注册
    BroadcastReceiver,在其他地方通过发送 broadcast 来控制它, 当然这些都是 Thread 做不到的。

发布了46 篇原创文章 · 获赞 21 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/u012922981/article/details/89351855
今日推荐