每日一点点积攒

一、Service的启动方式

  1.采用startService的方式开启服务

     生命周期 : onCreate()--->onStartCommand()onStart()方法已过时) ---> onDestory()

          特点 :     一旦服务开启跟调用者(开启者)就没有任何关系了,开启者退出了,开启者挂了,服务再后台长期运行,开启者不能调用服务里面的方法

      如果希望能调用

      2. 采用bindService的方式开启服务

          生命周期 : onCreate() --->onBind()--->onunbind()--->onDestory()

     特点 : bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉,绑定者可以调用服务里面的方法

二、BroadcastReceiver注册方式

  1.动态注册广播和静态广播的区别

    第一种不是常驻型广播,也就是说广播跟随程序的生命周期

    第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行 

  2.发送广播的方式

   无序广播 、有序广播  、自定广播    

三、进程保活

  黑色保活 :  不同的app进程,用广播相互唤醒(包括利用系统提供的广播进行唤醒)

  白色保活 :  启动前台Service

  灰色保活 :  利用系统的漏洞启动前台Service

 

  黑色保活的原理 : 就是利用不同的app进程使用广播来进行相互唤醒

  白色保活的原理 : 调用系统api启动一个前台的Service进程,这样会在系统的通知栏生成一个Notification,用来让用户知道有这样一个app在运行着,哪怕当前的app退到了后台

  灰色保活的原理 : 白色保活的基础之上,不会让系统通知栏有一个Notification这样的通知

  同时启动两个id相同的前台Service,然后再将后启动的Service做stop处理

  private final static int GRAY_SERVICE_ID = 1001;

  public static class GrayInnerService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { startForeground(GRAY_SERVICE_ID, new Notification()); stopForeground(true); stopSelf(); return super.onStartCommand(intent, flags, startId); }
}

  

   

  

猜你喜欢

转载自www.cnblogs.com/liunx1109/p/10919445.html