zoukankan      html  css  js  c++  java
  • Android中服务的生命周期与两种方式的区别

    服务的生命周期跟Activity的生命周期类似。但是生命周期甚至比你关注服务如何创建和销毁更重要,因为服务能够在用户不知情的情况下在后台运行。

    服务的生命周期---从创建到销毁---可以被分为以下两个路径:

    1.  启动类型的服务: onCreate()- >onStartCommand()->Service running--调用context.stopService() ->onDestroy()

    2.  绑定类型的服务: onCreate()->onBind()->Service running--调用>onUnbind() -> onDestroy()

    其中绑定服务才可以调用服务中的方法

    以下是笔者写的一个demo代码:

     1     @Override
     2     public void onCreate() {
     3         System.out.println("服务被创建了concreate");
     4         super.onCreate();
     5     }
     6     
     7     @Override
     8     public int onStartCommand(Intent intent, int flags, int startId) {
     9         System.out.println("开启服务 onStartCommand ");
    10         return super.onStartCommand(intent, flags, startId);
    11     }
    12     
    13     @Override
    14     public IBinder onBind(Intent intent) {
    15         System.out.println("绑定服务调用了 onBind");
    16         return new MyBinder();
    17     }
    18     
    19     @Override
    20     public boolean onUnbind(Intent intent) {
    21         System.out.println("解绑服务  onUnbind");
    22         return super.onUnbind(intent);
    23     }
    24     
    25     
    26     @Override
    27     public void onDestroy() {
    28         System.out.println("服务被销毁了ondestroy");
    29         super.onDestroy();
    30     }
    31     

     

    其中onCreate方法已经过时,取而代之的是onStartCommand()

    1.  启动类型的服务

    (1) 第一次启动服务时:

    执行了onCreate方法和onStartCommand方法

    (2) 再次点击开启服务:

    只会执行onStartCommand方法

    (3) 停止服务

    执行onDestroy方法

    2.  绑定类型的服务

    (1) 绑定服务

    调用了onCreate方法和onBind方法

    (2) 解绑服务

    先调用了onUnBind方法再调用onDestroy方法

    下图说明了一个服务的典型回调方法。尽管这个图把由startService()方法创建的服务与由bindService()方法创建的服务给分开了,

    但是请记住,任何服务,不管它是怎样启动的,都可能允许客户绑定它。

    因此用onStartCommand()方法(通过一个客户端调用startService()方法)初始启动的服务,

    依然能够接收onBind()的调用(在客户端调用bindService()方法时)。

    图的左边显示了用startService()方法创建服务时的生命周期

    图的右边显示了用bindService()方法创建服务时的生命周期

    注意: 建议启动服务的顺序,这样不会出现问题:

    1. 开启服务  --- 保证服务一直后台运行
    2. 绑定服务  --- 可以调用服务中的方法
    3. 调用服务中的方法
    4. 解绑服务  --- 这时服务依然后台运行
    5. 停止服务

  • 相关阅读:
    我要好offer之 二叉树大总结
    我要好offer之 字符串相关大总结
    楼层扔鸡蛋问题[转]
    Linux System Programming 学习笔记(十一) 时间
    Linux System Programming 学习笔记(十) 信号
    Linux System Programming 学习笔记(九) 内存管理
    Linux System Programming 学习笔记(八) 文件和目录管理
    Linux System Programming 学习笔记(七) 线程
    Linux System Programming 学习笔记(六) 进程调度
    APUE 学习笔记(十一) 网络IPC:套接字
  • 原文地址:https://www.cnblogs.com/wanghaoyuhappy/p/5293341.html
Copyright © 2011-2022 走看看