• 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. 停止服务

  • 相关阅读:
    UVA 11859
    [OpenGL]OpenGL坐标系和坐标变换
    树状数组
    编程算法
    乞讨 间隔[a,b]在见面p^k*q*^m(k>m)中数号码
    解析Android的 消息传递机制Handler
    Atitit.故障排除系列---php 计划网站数据库错误排除过程
    Remove Element
    [Angular Directive] Write a Structural Directive in Angular 2
    [Compose] 18. Maintaining structure whilst asyncing
  • 原文地址:https://www.cnblogs.com/wanghaoyuhappy/p/5293341.html
Copyright © 2020-2023  润新知