zoukankan      html  css  js  c++  java
  • Android Service初步学习的笔记

    1.Service的应用场景

      条件:a.并不依赖于用户可视化界面(不是绝对的,如前台service就是与notification界面结合使用的)

           b.具有较长时间的运行特性。

      service的应用场景有很多,如:

    • 当用户离开音乐应用时,Music playback以Service运行;
    • 当后台文件正在下载时它以Service实现;
    • Google应用维持一个Service来从网络中获取推送服务;
    • 当一些特殊的数据同步需要进行时,Sync adapters以Service运行于后台;
    • 活动壁纸以Service运行于后台;

    2.service的基本用法

      a.启动的两种方式

    • 通过startService启动
    • 通过bindService启动

      两种启动方式的区别

    • 通过startService启动的,就跟Activity无关了,在其它地方也可以关闭
    • 通过bindService启动的,是和Activity绑定的,Activity挂了,它就挂了

      b.生命周期

      

    service积极活动的生命时间(active lifetime)是从onStartCommand() onBind()被调用开始,它们各自处理由startService()或 bindService()方法传过来的Intent对象。

      如果service是被开启的,那么它的活动生命周期和整个生命周期一同结束。

      如果service是被绑定的,它们它的活动生命周期是在onUnbind()方法返回后结束。

      注意:尽管一个被开启的service是通过调用 stopSelf() 或 stopService()来停止的,没有一个对应的回调函数与之对应,即没有onStop()回调方法。所以,当调用了停止的方法,除非这个service和客户组件绑定,否则系统将会直接销毁它,onDestory()方法会被调用,并且是这个时候唯一会被调用的回调方法。

      c.创建了几个实例?

      不管调用多少次都只有1个实例,因为只走了一个oncreate方法。

      在启动(startService)的时候不要忘了在某一个地方给他停止(StopService)

      同样在绑定(bindService)的时候,也要在后面给他解绑(onUnbind)

    3.Service跟Activity通信

      通信方式

    • 继承Binder类

      这个方式只有当你的Acitivity和Service处于同一个Application和进程时,才可以用,比如你后台有一个播放背景音乐的Service,这时就可以用这种方式来进行通信。在Service里定义一个内部类,Binder的子类,通过这个类,把Service的对象传给Activity,这样Activity就可以调用Service里的公用方法和公用属性了,但这种方式,一定要在同一个进程和同一个Application里。

    • 使用Messenger

         上面的方法只能在同一个进程里才能用,如果要与另外一个进程的Service进行通信,则可以用Messenger。

          其实实现IPC的方式,还有AIDL,但推荐使用Messenger,有两点好处:

            1. 使用Messenger方式比使用AIDL的方式,实现起来要简单很多

            2. 使用Messenger时,所有从Activity传过来的消息都会排在一个队列里,不会同时请求Service,所以是线程安全的。如果你的程序就是要多线程去访问Service,就可以用AIDL,不然最好使用Messenger的方式。

    • 使用AIDL

         这个方法略,如果知道上面两种方法,这个方法基本很少会用到。

    4.Service和Thread的关系

      Service和Thread的关系:一毛钱关系都没有

      Service和Thread的区别:

    • 正常情况下Service运行于主线程,Thread是一个子线程
    • Service的优先级高于挂起的Activity,也高于Activity所创建的Thread

      Thread的生命周期

    • 在Activity中被创建:Thread的生命周期即为整个Activity的生命周期
    • 在Application中被创建:Thread的生命周期即为整个Application的生命周期
    • 在Service中被创建:这是保证Thread最长生命周期的唯一方式,只要Service不退出,Thread就一直在后台执行

      

      

      

  • 相关阅读:
    HTB-靶机-Charon
    第一篇Active Directory疑难解答概述(1)
    Outlook Web App 客户端超时设置
    【Troubleshooting Case】Exchange Server 组件状态应用排错?
    【Troubleshooting Case】Unable to delete Exchange database?
    Exchange Server 2007的即将生命周期,您的计划是?
    "the hypervisor is not running" 故障
    Exchange 2016 体系结构
    USB PE
    10 months then free? 10个月,然后自由
  • 原文地址:https://www.cnblogs.com/prescheng/p/5898939.html
Copyright © 2011-2022 走看看