zoukankan      html  css  js  c++  java
  • Android菜鸟的成长笔记(19)——Service的生命周期

    前面两篇文章介绍了关于Service的两种启动方式,简要总结如下:

    Context.startService() 

    Context.bindService()

    1. startService()的目的是回调onStart()方法,onCreate() 方法是在Service不存在的时候调用的,如果Service存在(例如之前调用了bindService,那么Service的onCreate方法已经调用了)那么startService()将跳过onCreate() 方法。

    2.  bindService()目的是回调onBind()方法,它的作用是在Service和调用者之间建立一个桥梁,并不负责更多的工作(例如一个Service需要连接服务器的操作)。

    这里再补充两点:

    1、Service 的onStart()方法只有在startService()启动Service的情况下才调用,故使用onStart()的时候要注意这点。

    2、一般使用bindService来绑定到一个现有的Service(即通过StartService启动的服务)。

    如果我们想保持和 Service 的通信,又不想让 Service 随着 Activity 退出而退出呢?你可以先 startService() 然后再 bindService() 。当你不需要绑定的时候就执行 unbindService() 方法,执行这个方法只会触发 Service 的 onUnbind() 而不会把这个 Service 销毁。这样就可以既保持和 Service 的通信,也不会随着 Activity 销毁而销毁了。

    下图是官网上Service生命周期示意图。


    Service的生命周期还有一种特殊情形,如果Service已由某个客户端通过startService()方法启动了,接下来其他客户端再调用bindService()方法来绑定该Service后,再调用unbindService()方法解除绑定,最后又调用bindService()方法再次绑定到Service,这个过程所触发的生命周期如下:

    onCreate()——>onStartCmmmand()——>onBind()——>onUnbind()[如果重写了此方法并返回了true]——>onRebind()

    这里需要注意的是:如果希望onRebind方法被回调,除了需要该Service是由Activity的startService()方法启动之外,还需要Service子类重写onUnbind()方法并返回true.



  • 相关阅读:
    VIVADO固化
    Keil MDK 编译器 AC5 和 AC6 优化选项重要内容和区别
    STM32时钟
    STlink/v2中SWD模式连线方式
    搭载M33内核,支持最新蓝牙5.1,晚到的DA1469x生正逢时
    超全国内外蓝牙芯片原厂总结(含芯片型号)
    芯片封装类型大全
    国务院办公厅关于2012年部分节假日安排的通知
    美国摇滚乐队Metro致敬黄家驹,全粤语翻唱Beyond经典《海阔天空》
    国务院办公厅发布2010年部分节假日安排通知
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469464.html
Copyright © 2011-2022 走看看