zoukankan      html  css  js  c++  java
  • android四大组件之service生命周期

     和activity一样,service服务同为android的四大组件之一。而和activity不同的是,service并不会显示出来,也就是没有用户界面,它是后台运行的,但需要activity或其它context来触发。

           简单的一个例子是android手机里的音乐播放器,打开应用看得到的界面是activity,点击播放音乐启动的音乐服务则是service(听得到但看不到。例如舞台上的幕后服务者,为大家操作着音响和灯光,却从不亮相)。而且就算退出了音乐播放器,却依然能够在桌面或其它应用里面听得到音乐,那么何时停止呢,下面就开始介绍service的生命周期。

    先附上service生命周期图

    android四大组件之service生命周期

    图中左右分别为启动service的两种不同实现方式。

    两种启动方式的区别:

    通过startService()(左边)

    service的生命周期:

    context.startService()->onCreate()->onStartCommand()->service runing-->context.stopService()->onDestroy()->service stop

    startService()经过onCreate->onStartCommand()(注意这里不是onStart(),原因是onStart()方法已被淘汰,被onStartCommand()方法所取代);

    stopService()的时候直接调用onDestroy()。

    当调用者直接退出而不stopService()的话,service将一直在后台运行,直到下次调用者再来stopService()或被系统强杀。

    通过bindService()(右边)

    service的生命周期:

    context.bindService()->onCreate()->onBind()->service runing-->context.unbindService()->onUnbind()->onDestroy()->service stop

    bindService()经过onCreate->onBind();

    unbindService()的时候调用onUnbind()和onDestroy()。

    调用者通过bindService()绑定服务时,调用者与service就成了结拜兄弟(不求同时生,但求同时死),调用者退出的话service也会跟着退出。

    注意:

    1、service的onCreate()只会调用一次,就是无论startService或bindService多少次,service都只会创建一次。

    例如第一次startService时会调用onCreate()和onStartCommand(),第二次再startService时只会调用onStartCommand(),除非stopService之后再次startService才会再次调用onCreate()。

    2、在service每一次的开启关闭过程中,onStartCommand()可多次调用(通过多次startService调用),但onCreate(),onBind(),onUnbind(),onDestory()只能调用一次

    3、onbindService之后不能通过stopService停止service,只能通过unbindService取消绑定之后停止。

    下面通过实例来加深理解

    这是一个用户界面,通过点击按钮来启动和关闭service


    通过日志logcat来查看其生命周期

    实验一、

    1、点击startService


    2、再次点击startService

    实验二、
    1、点击startService之后点击stopService

    2、再次点击startService

    实验三、

    1、点击bindService

    2、接着点击unbindService或按返回键退出


    实验四、

    1、点击bindService

    2、再次点击bindService或点击stopService

    实验五、

    1、点击bindService之后点击startService


    2、接着点击unbindService

    3、接着点击stopService

  • 相关阅读:
    14-快速排序
    linux上挂在windows的共享文件系统,大小写不敏感
    【mount】linux挂共享盘
    监控windows服务或者进程
    自定义时间间隔
    示例
    filebeat
    kafka
    文档碎片
    简单DOM操作
  • 原文地址:https://www.cnblogs.com/kangweifeng/p/4887390.html
Copyright © 2011-2022 走看看