android service灰色保活

您所在的位置:网站首页 android保活机制service android service灰色保活

android service灰色保活

2023-08-12 05:29| 来源: 网络整理| 查看: 265

**

使用场景

** 自助设备远程管理上报设备故障信息,接收服务器指令, 使用的事webSocket,需要启动service,并且服务要尽量保活;

**

保活手段

** 当前业界的Android进程保活手段主要分为** 黑、白、灰 **三种,其大致的实现思路如下:

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

白色保活:启动前台Service

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

本文主要介绍灰色保活,黑色保活主要监听系统广播;白色保活类似QQ音乐,导航栏显示通知;灰色保活实际上也是将Service设置为前台服务,不过将通知栏屏蔽了,这样在用户无感的情况将将服务的优先级提高到前台服务的级别,在系统内存不足时,也不会被kill掉;

**

代码实现

** 对于 API level < 18 :调用startForeground(ID, new Notification()),发送空的Notification ,图标则不会显示。 对于 API level >= 18:在需要提优先级的service A启动一个InnerService,两个服务同时startForeground,且绑定同样的 ID。Stop 掉InnerService ,这样通知栏图标即被移除。

//定义一个灰色保活service 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); } @Override public IBinder onBind(Intent intent) { return null; } } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d(TAG,"onStartCommand"); //初始化websocket initSocketClient(); mHandler.postDelayed(heartBeatRunnable, HEART_BEAT_RATE);//开启心跳检测 //设置service为前台服务,提高优先级 if (Build.VERSION.SDK_INT < 18) { //Android4.3以下 ,隐藏Notification上的图标 startForeground(GRAY_SERVICE_ID, new Notification()); } else if(Build.VERSION.SDK_INT>18 && Build.VERSION.SDK_INT


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3