公众号:QXF069

摘要:

需要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中注册

android:name="com.txtws.wakeloackdemo.service.WakecpuIntentService" >

关键代码定时任务:

public void startAlarm(Context context){

Intent intent = new Intent(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 设置定时任务");

}

接收到定时任务:

public class WakeCPUAlarmReceiver extends WakefulBroadcastReceiver { private AlarmManager alarmMgr; private PendingIntent alarmIntent; private final long chekcTime = 30* 1000;

public static boolean isCheckFlag = false; private static String TAG = WakeCPUAlarmReceiver.class.getSimpleName(); @Override

public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub

Intent service = new Intent(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.WakeLock wl; NotificationCompat.Builder builder;

public WakecpuIntentService() { super("WakecpuIntentService"); // TODO Auto-generated constructor stub

} @Override

protected void onHandleIntent(Intent intent) { // TODO Auto-generated method stub

Bundle 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); WakeCPUAlarmReceiver mAlarmReceiver = new WakeCPUAlarmReceiver();

mAlarmReceiver.startAlarm(WakecpuIntentService.this); FileLogUtil.e(TAG, "Service释放wakelock后设置定时任务。");

}

}

service在后台也能够打印log 保持一直执行,最重要的是不耗电也不会卡机的问题。欢迎大家一起讨论学习。

关注公众号:QXF069

跑步app保活_android APP保活机制相关推荐

  1. java类安卓app 简介_android.app.Activity 的介绍

    文章可随意转载,但务必注明源地址 发现当前Android的资料不是很多,而且对于Activity的介绍也很少,所以把官方文档的android.app.Activity的介绍翻译了一下,加入了一些自己的 ...

  2. 什么是Android进程(app)保活、进程保活的方案

    想了解什么是Android 进程.Android 进程的生命周期.Android 进程回收策略 可参照地址什么是Android 进程.Android 进程的生命周期.Android 进程回收策略_lm ...

  3. Android后台驻留:保活和回收的机制

    简介 众所周知,Android平台的管理机制下,App进入后台后,为了提供持续的及时服务(如推送.音乐),或进行驻留获取收益(跟踪.信息收集.广告)等,会利用一些方法来让自身保持活跃,躲过被Andro ...

  4. android重复拉起app首页_Android进程管理:Framework层概念

    前情回顾 RickAi,公众号:安卓尖端技术研究Android进程管理:从Kernel到LowMemoryKiller 上一篇文章从Native角度讲解了Android进程管理的相关概念,本文将继续从 ...

  5. 浅谈APP的回收和重启机制

    /   今日科技快讯   / 近日不少用户发现微信开始内测在企业号入口增加微信公众号内容的推荐.具体情况是,在微信的服务通知的企业微信企业状态提醒中,会推送同事阅读较多的文章内容,而且微信还会选择性推 ...

  6. 安卓源码,跑步打卡项目app源码

    安卓源码,跑步打卡项目app源码,包括源码和简单文档 YID:9675644491117436Robergean

  7. 安卓源码,安卓开发,跑步打卡项目app源码

    安卓源码,安卓开发,跑步打卡项目app源码,包括源码和简单文档 YID:6975644491117436

  8. 安卓源码,安卓开发,跑步打卡项目app源码,包括源码和简单文档

    安卓源码,安卓开发,跑步打卡项目app源码,包括源码和简单文档 ID:6975644491117436Robergean

  9. 可以测试体育跑步的软件,乐健体育如何跑步作弊?哪些app可以跑步作弊?

    乐健体育是一款常用的运动教学辅助软件,不少学校都喜欢用这个app,因为管理起来特别方便,对双方都好,还可以看到他们的完成情况,时间,经过的地方等等,具体的功能和特色可以在搜一搜手游网上下载这个软件后自 ...

最新文章

  1. win10 动态磁盘 linux,win10系统动态磁盘改为基本磁盘的方法
  2. javascript之prototype总结常用方法
  3. 【Animations】使用缩放动画放大视图(7)
  4. Objective-c在宏里拼接字符串
  5. readonly时禁用删除键,readonly按删除键后页面后退解决方案
  6. 百度资源管理平台 站长工具 批量添加主站域名 子站域名 域名主动推送
  7. 多个应用SD-WAN实现业务连续性的方法——微云网络
  8. 事件标志组的等待与通知
  9. pixhawk commander--navigator--modules之间的联系
  10. reporting services订阅
  11. MFC静态文本超链件
  12. Sublime Text 由于中文用户名导致无法安装插件
  13. 2010年VMware中国获奖总结(1/2)
  14. 考勤管理系统详细功能分析
  15. net 4.6.2安装不成功_源泉设计安装不成功的问题之解决办法
  16. php7实践指南-ch15MySQL数据库的使用
  17. github如何配置ssh
  18. python抓取视频真实地址_快手批量获取真实地址python
  19. 简单的通过DockerFile 构建自己的nacos镜像 并持久化到 MySQL8.0
  20. 简化 Spring 控制器:只须写接口即可

热门文章

  1. 导excel到SAP行数不能超过9999,字符不能超过50个处理
  2. 通信工程/电子信息工程保研 各院校面试难度分析
  3. 如何看待同济版《线性代数》引发激烈争议?
  4. 欧盟RAPEX电子烟类通报情况
  5. mt7620a上带机量的提高(三)
  6. linux文本编辑器由命令模式进入编辑模式操作
  7. 阿里云服务器购买和配置全流程
  8. 劳动保障协管员计算机考试,劳动保障协管员考试题
  9. 轻松搞定手机在线制作gif动态表情图的操作技巧
  10. unity 穿山甲 广告关于如何将信息流广告和banner广告直接关闭窗口 而不是通过按钮