android保活,有效的代码保活

公众号:码农乐园 等级 535 0 0
标签: Java

需要APP暗屏情况下进行后台执行一些任务,但是google现在为了优化手机的体验,以及流畅性,做了很多的限制,电量优化,休眠模式,以及进入深度睡眠状态,进入深入休眠状态系统会根据黑白名单的应用进行管理,杀掉非白名单的后台进程以及网络请求;Android系统的优化是守护后台进程造成了很大困扰,线程之间守护已经是不在可靠,使用wakelock耗电过大也会是系统杀掉应用进程。下面就对我们的经历说说守护进程的。

1,从官网上可以看出google为了系统更加流畅以及优化内存,Google做了很大的处理,在手机暗屏或者睡眠状态就停止后台运行;若要保持service的常驻,需要做一些前端的活动,Notification重要属性:notification.flags = Notification.FLAG_NO_CLEAR|Notification.FLAG_ONGOING_EVENT;然后startForeground(setClass().hashCode(), notification);使得服务能挂在通知栏。

2,通过wakelock占用CPU,若一直占用CPU的话,当然这是比较耗电的,要是耗电太高的话系统会直接回收,杀死程序进程。

我是使用定时器唤醒cpu 后台服务将接收到定时任务执行未完成的任务:下面是我实现的代码

在mainfest中注册

关键代码定时任务:

publicvoidstartAlarm(Context context){      
Intent intent =newIntent(context, WakeCPUAlarmReceiver.class);      
alarmIntent = PendingIntent.getBroadcast(context,0, intent,0);      
alarmMgr = (AlarmManager) context .getSystemService(Context.ALARM_SERVICE);//    alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,//          1000, alarmIntent);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {   
     alarmMgr.setExactAndAllowWhileIdle(       
       AlarmManager.ELAPSED_REALTIME_WAKEUP,        
      SystemClock.elapsedRealtime() + chekcTime, alarmIntent);    
  }else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  
      alarmMgr.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP,              SystemClock.elapsedRealtime() + chekcTime, alarmIntent);    
  }else{      
  alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,             
 SystemClock.elapsedRealtime() + chekcTime, alarmIntent);    
  }     
 FileLogUtil.e(TAG ,"startAlarm 设置定时任务");  }

接收到定时任务:

publicclassWakeCPUAlarmReceiverextendsWakefulBroadcastReceiver{
privateAlarmManageralarmMgr;
privatePendingIntentalarmIntent;
privatefinallong chekcTime =30*1000;    
public static boolean isCheckFlag =false;
privatestaticStringTAG=WakeCPUAlarmReceiver.class.getSimpleName();
@Override
public void onReceive(Contextcontext,Intentintent) {
// TODO Auto-generated method stub
Intentservice =newIntent(context,WakecpuIntentService.class);
FileLogUtil.e(TAG,"onReceive 接收定时任务");          
startWakefulService(context, service);  
}

在service中执行需要执行的任务:

public class WakecpuIntentService extends IntentService{
private static String TAG=WakecpuIntentService.class.getSimpleName() +" :";
private NotificationManager mNotificationManager;
private PowerManager.WakeLockwl;
NotificationCompat.Builderbuilder;  
public WakecpuIntentService() {
super("WakecpuIntentService");
// TODO Auto-generated constructor stub
}
@Override
protected void onHandleIntent(Intentintent) {
// TODO Auto-generated method stubBundle
extras = intent.getExtras();
FileLogUtil.e(TAG,"Service接收到WakeLock定时任务。");
PollService.startService(getApplicationContext());
FileLogUtil.e(TAG,"Service接收到WakeLock定时任务在定时任务中启动轮询Service。");
// Do the work that requires your app to keep the CPU running.
// Release the wake lock provided by the WakefulBroadcastReceiver.
//checkScreenOff();
WakeCPUAlarmReceiver.completeWakefulIntent(intent);//释放wake
WakeCPUAlarmReceiver.setCheckFlag(false);
WakeCPUAlarmReceivermAlarmReceiver =newWakeCPUAlarmReceiver();      
mAlarmReceiver.startAlarm(WakecpuIntentService.this);
FileLogUtil.e(TAG,"Service释放wakelock后设置定时任务。");  
    }
}

service在后台也能够打印log 保持一直执行,最重要的是不耗电也不会卡机的问题。欢迎大家一起讨论学习。 关注公众号获取更多干货 android保活,有效的代码保活

收藏
评论区

相关推荐

Android 内存管理机制
前言:Android系统是基于Linux内核开发的操作系统,而Linux系统有其独到的内存管理机制,会在进程活动停止后结束该进程。Android在此基础上优化了内存管理,会把进程都保存在内存中,直到系统需要更多内存为止,释放部分进程。这些被保存在内存中的进程,并不会影响系统的运行速度,相反,在重新打开这些进程时,会提升进程启动速度 Android 内存管
PHP 8 有哪些值得期待的新特性
新的 PHP 主要版本 PHP8 预计将于 2020 年底发布。 它现在正处于非常活跃的开发中,所以在接下来的几个月里,开发速度和开发进程可能会有很大的变化。 在这篇文章中,我会罗列出 PHP8 中会发生的一些改变:新功能、性能改进和突破性变化。 因为 PHP8 是一个新的主要版本,所以代码及语法向下兼容性会更低。 如果您一直保持与最新版本保持同步,
4 Java 如何判定是否存活或者死亡
在堆中存放着几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事就是要确定这些对象之中哪些还活着,哪些对象已经死去. 判断对象是否已经死亡有以下几种算法: 引用计数法算法 定义 : 给对象中添加一个引用计数器,当有一个地方引用时,计数器加1,引用失效时,就减1,当对象的引用计数器为0时,对象就是不可再被使用的. 特点 : JAVA虚拟机中很少使用这
android保活,有效的代码保活
需要APP暗屏情况下进行后台执行一些任务,但是google现在为了优化手机的体验,以及流畅性,做了很多的限制,电量优化,休眠模式,以及进入深度睡眠状态,进入深入休眠状态系统会根据黑白名单的应用进行管理,杀掉非白名单的后台进程以及网络请求;Android系统的优化是守护后台进程造成了很大困扰,线程之间守护已经是不在可靠,使用wakelock耗电过大也会是系统杀
自己对与生活的一点看法
人的一生 有活下去 几十年吧 就算活百年吧 你打算怎么活? 前20岁,碌碌无为? 前30岁 ,还是白蛋一个? 前40岁,本该稳定的生活却还在荡漾不勘吗? 就这样一生? 那你出生 在这个世上干啥? 干脆别出来吧 对于我们程序员,技术是天,不要求你有多高的情商,找到一份好一点的工作也不要多高的智商。 当然或许你不是程序员,其他行业的 如果你最后的出
Compose Weekly #1: 小狗领养应用
本文同步发表于我的微信公众号,在微信搜索 OpenCV or Android 即可关注。 前言 最近Android官方发起了Jetpack Compose的推广活动:Jetpack Compose开发者挑战赛。活动时间一个月,每周一题,广大开发者根据官方需求,Clone官方模板工程并使用Jetpack Compose技术结题后按要求提交,即可参与活动。
Compose Weekly #2:Countdown Timer
本文同步发表于我的微信公众号,在微信搜索 OpenCV or Android 即可关注。 前言 最近Android官方发起了Jetpack Compose的推广活动:Jetpack Compose开发者挑战赛。活动时间一个月,每周一题,广大开发者根据官方需求,Clone官方模板工程并使用Jetpack Compose技术结题后按要求提交,即可参与活动。
Prometheus学习系列(四)之FAQ
一、一般问题 1\. Prometheus是什么? Prometheus是一款高活跃生态系统的开源系统监控和警告工具包。详见 2\. Prometheus与其他的监控系统比较 详见 3\. Prometheus有什么依赖? Prometheus服务独立运行,没有其他依赖 4\. Prometheus有高可用的保证吗?
深度剖析APP保活案例
这是作者在去年处理的一个关于进程保活的案例一. 引言 1.1 保活概述什么是保活?保活就是在用户主动杀进程,或者系统基于当前内存不足状态而触发清理进程后,该进程设法让自己免于被杀的命运或者被杀后能立刻重生的手段。保活是”应用的蜜罐,系统的肿瘤“,应用高保活率给自己赢得在线时长,甚至做各种应用想做而用户不期望的行为,给系统带来的是不必要的耗电,以及系统额外的性
DeDeCMS v5.7 SP2 正式版 前台任意用户密码修改
写在前面 学了这么久了回过头来一看,这居然是我自己复现的第一个漏洞,哪怕是之前打 hvv 的时候都是百度到了就用,没有进行深入的研究,刚好这回网络渗透测试课安排了复现漏洞的任务,所以水一篇博客记录一下,以后有时间了也得搭环境复现一下其他的洞 漏洞简介+ 在用户密码重置功能处,php 代码存在弱类型比较,如果用户没有设置密保问题,可以直接绕过验证密保问题,直接
永久激活并汉化webstorm
激活 1、下载webstorm链接:https://pan.baidu.com/s/13kPsfZmPIZP2EtaNcNqn8A提取码:di43 2、下载补丁文件: 链接:https://pan.baidu.com/s/10uXF1PH9Q6b6wWH2WqmWg提取码:hpr8 3、修改两个文件把我们下载好的补丁文件 JetbrainsC
Supervisor 开始
Supervisor 是 Linux/Unix 操作系统上的进程管理工具。本文介绍了于 Ubuntu 18 上如何使用 Supervisor 开机启动、保活守护自己的服务进程。 安装建议系统方式安装,可开机启动。bashsudo apt install supervisor ySystemd 查看服务状态:bash$ sudo systemctl statu
活文档零散笔记
重新思考文档 简单的说主要几点:1. 支持对话和集中办公,而不是各种形式的文档。大多数只是已经存在,只需要把他们找出来即可。2. 大多数只是已经存在。你只需要用缺失的上下文、意图和原理来扩充它即可。3. 注意变更频率。4. 思考文档是将人们的注意力引到系统质量或缺乏质量上的一种方法。 DDD概述DDD是一种解决软件开发核心复杂性的方法。它主要提倡将重点放在特
大厂必备面试题———JVM内存结构
JVM 一,基本介绍解释:java虚拟机,准确的来说是java二进制字节码的运行环境。(jvm是一套规范),用来执行class文件,保证java语言跨平台。Java虚拟机可以看作是一台虚拟的计算机,和真是的计算机一样,有着自己的指令集以及各种运行时内存。jvm就是一个字节码翻译器,它将字节码文件翻译成各个系统对应的的机器码,确保字节码文件能在各个系统上正确的
作为一名程序员我不忘初心,复习指南
01 kafka入门 1.1 什么是kafka  1.2 kafka中的基本概念   1.2.1 消息和批次   1.2.2 主题和分区   1.2.3 生产者和消费者、偏移量、消费者群组   1.2.4 Broker和集群   1.2.5 保留消息 02 为什么选择kafka 2.1 优点  2.2 常见场景   2.2.1 活动跟踪   2.2.2 传递