分两种情况:

1.当手机连接usb电源时,息屏不会造成定时器暂停运行

2.当手机未连接usb电源时,息屏会造成定时器暂停运行,并在再次点亮屏幕时定时器重新开始工作

测试:

1.service保活,在service中启动定时器,无法解决

2.开启WakeLock无法解决

3.使用AlarmManager、CountDownTimer、Handler、Timer定时器,无法解决

……

分析:

通过网上的一系列方法都不能很好的解决这个问题,所以归根结底还是回到手机本身系统来看这个问题。随着android版本的一天天升级,普通软件的后台运行也越来越难搞(当然跟微信、qq这种厂商的合作软件无法相比)。现在手机主要有两大功能影响后台运行,第一个是用户必须允许软件能自启动后台运行,第二个用户要关闭此软件的省电权限(加入白名单)。

解决:

1.关闭省电权限(加入白名单)

先添加权限

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

判断并申请加入白名单

 /*** 判断我们的应用是否在白名单中** @param context* @return*/@RequiresApi(api = Build.VERSION_CODES.M)public static boolean isIgnoringBatteryOptimizations(Context context) {boolean isIgnoring = false;PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);if (powerManager != null) {isIgnoring = powerManager.isIgnoringBatteryOptimizations(context.getPackageName());}return isIgnoring;}/*** 申请加入白名单** @param context*/@RequiresApi(api = Build.VERSION_CODES.M)public static void requestIgnoreBatteryOptimizations(Context context) {try {Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);intent.setData(Uri.parse("package:" + context.getPackageName()));context.startActivity(intent);} catch (Exception e) {e.printStackTrace();}}

华为请求加入白名单后就会弹出提示框,点击允许。

2.开启软件可自启动能后台运行权限

/*** 开启软件可自启动,后台运行   需进入页面自己手动设置*/public static void openAutoStart(Context context) {try {if (isHuawei()) {goHuaweiSetting(context);} else if (isXiaomi()) {goXiaomiSetting(context);} else if (isOPPO()) {goOPPOSetting(context);} else if (isVIVO()) {goVIVOSetting(context);} else if (isMeizu()) {goMeizuSetting(context);} else if (isSamsung()) {goSamsungSetting(context);} else if (isLeTV()) {goLetvSetting(context);} else if (isSmartisan()) {goSmartisanSetting(context);}else {Intent intent = new Intent();if (Build.VERSION.SDK_INT >= 9) {intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");intent.setData(Uri.fromParts("package", context.getPackageName(), null));} else if (Build.VERSION.SDK_INT <= 8) {intent.setAction(Intent.ACTION_VIEW);intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");intent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName());}context.startActivity(intent);}}catch (Exception e){Intent intent = new Intent(Settings.ACTION_SETTINGS);context.startActivity(intent);}}/*** 跳转到指定应用的首页*/private static void showActivity(Context context, @NonNull String packageName) {Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);context.startActivity(intent);}/*** 跳转到指定应用的指定页面*/private static void showActivity(Context context, @NonNull String packageName, @NonNull String activityDir) {Intent intent = new Intent();intent.setComponent(new ComponentName(packageName, activityDir));intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intent);}/*** 华为厂商判断** @return*/public static boolean isHuawei() {if (Build.BRAND == null) {return false;} else {return Build.BRAND.toLowerCase().equals("huawei") || Build.BRAND.toLowerCase().equals("honor");}}/*** 小米厂商判断** @return*/public static boolean isXiaomi() {return Build.BRAND != null && Build.BRAND.toLowerCase().equals("xiaomi");}/*** OPPO厂商判断** @return*/public static boolean isOPPO() {return Build.BRAND != null && Build.BRAND.toLowerCase().equals("oppo");}/*** VIVO厂商判断** @return*/public static boolean isVIVO() {return Build.BRAND != null && Build.BRAND.toLowerCase().equals("vivo");}/*** 魅族厂商判断** @return*/public static boolean isMeizu() {return Build.BRAND != null && Build.BRAND.toLowerCase().equals("meizu");}/*** 三星厂商判断** @return*/public static boolean isSamsung() {return Build.BRAND != null && Build.BRAND.toLowerCase().equals("samsung");}/*** 乐视厂商判断** @return*/public static boolean isLeTV() {return Build.BRAND != null && Build.BRAND.toLowerCase().equals("letv");}/*** 锤子厂商判断** @return*/public static boolean isSmartisan() {return Build.BRAND != null && Build.BRAND.toLowerCase().equals("smartisan");}/*** 跳转华为手机管家的启动管理页* 操作步骤:应用启动管理 -> 关闭应用开关 -> 打开允许自启动** @param context*/public static void goHuaweiSetting(Context context) {try {showActivity(context, "com.huawei.systemmanager","com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity");} catch (Exception e) {showActivity(context, "com.huawei.systemmanager","com.huawei.systemmanager.optimize.bootstart.BootStartActivity");}}/*** 跳转小米安全中心的自启动管理页面* 操作步骤:授权管理 -> 自启动管理 -> 允许应用自启动** @param context*/public static void goXiaomiSetting(Context context) {showActivity(context, "com.miui.securitycenter","com.miui.permcenter.autostart.AutoStartManagementActivity");}/*** 跳转 OPPO 手机管家* 操作步骤:权限隐私 -> 自启动管理 -> 允许应用自启动** @param context*/public static void goOPPOSetting(Context context) {try {showActivity(context, "com.coloros.phonemanager");} catch (Exception e1) {try {showActivity(context, "com.oppo.safe");} catch (Exception e2) {try {showActivity(context, "com.coloros.oppoguardelf");} catch (Exception e3) {showActivity(context, "com.coloros.safecenter");}}}}/*** 跳转 VIVO 手机管家* 操作步骤:权限管理 -> 自启动 -> 允许应用自启动** @param context*/public static void goVIVOSetting(Context context) {showActivity(context, "com.iqoo.secure");}/*** 跳转魅族手机管家* 操作步骤:权限管理 -> 后台管理 -> 点击应用 -> 允许后台运行** @param context*/public static void goMeizuSetting(Context context) {showActivity(context, "com.meizu.safe");}/*** 跳转三星智能管理器* 操作步骤:自动运行应用程序 -> 打开应用开关 -> 电池管理 -> 未监视的应用程序 -> 添加应用** @param context*/public static void goSamsungSetting(Context context) {try {showActivity(context, "com.samsung.android.sm_cn");} catch (Exception e) {showActivity(context, "com.samsung.android.sm");}}/*** 跳转乐视手机管家* 操作步骤:自启动管理 -> 允许应用自启动** @param context*/public static void goLetvSetting(Context context) {showActivity(context, "com.letv.android.letvsafe","com.letv.android.letvsafe.AutobootManageActivity");}/*** 跳转锤子手机管家* 操作步骤:自启动管理 -> 允许应用自启动** @param context*/public static void goSmartisanSetting(Context context) {showActivity(context, "com.smartisanos.security");}

华为跳转页面如下,然后手动打开自启动后台运行

这样操作下来,不是特殊情况下息屏后定时器就能持续运行了。

android息屏休眠定时器心跳停止运行相关推荐

  1. Android息屏状态下启动App

    Android息屏状态下启动App 需求简介 分析 1.点亮屏幕 2.通过startActivity方法启动App 启动失败问题 原因 解决 需求简介 设备在息屏的状态下,通过特定的物理按键去启动Ca ...

  2. Android息屏与亮屏

    最近的项目要求apk能在空闲一会后让屏幕熄灭,检测到有用户到来(距离传感器触发)后点亮屏幕.百度了一大堆发现很多都不靠谱,google了一会才勉强找到一种能满足需求的方法,说勉强是因为这种方法需要到系 ...

  3. 关于解决移动端息屏后定时器不工作的问题

    不管是Android还是iOS都存在息屏后,过了一段时间后定时器会停止工作,再次打开后才继续工作的问题,且息屏后多长时间定时器会停止工作不确定. 本回答只提供息屏后,定时器停止,而软件未被后台杀死的情 ...

  4. Android 息屏亮屏代码实现

    1,实现效果 : 2,实现代码 [1]创建接收者 package com.xiaoshuai.www.screendemo;import android.app.admin.DeviceAdminRe ...

  5. ionic监听android息屏和后台运行的生命周期

    Hi,宝宝们,我又来了,我最近遇到一个问题,就是在ionic中监听android的息屏.应用退出在后台运行,之后重新进入应用的事件,这个写过原生的都知道,android会在不用的时间,运行不同的生命周 ...

  6. 息屏通知 android,息屏提醒app免费版

    息屏提醒app免费版(SmileSoft-AOD)是一款手机桌面美化软件,这里拥有很多好玩有趣的功能,让用户可以在不同的场景中使用.息屏提醒app免费版不需要root也能正常使用,而且可以自由的调节手 ...

  7. android 自动息屏代码,Android息屏弹Activity详解

    代码解析: FLAG_KEEP_SCREEN_ON :保持屏幕常亮 FLAG_TURN_SCREEN_ON:启动Activity的时候点亮屏幕,FLAG_TURN_SCREEN_ON This con ...

  8. Android 息屏Socket

    服务端会无心跳,断开. 客户端会在半个小时开始重新连接,可能是系统休眠情况,目前没有解决方法! 会保持2个小时左右连接,我也不知道为什么,做一个笔记! :客户端:读取数据异常 :服务端:比客户端先心跳 ...

  9. android 锁屏后定时器,iOS锁屏或者后台计时器定时解决方法

    我们知道,当程序进入后台时,计时器就会暂时停止,当重新进入程序时,计时器又会重新开始,有时候,我们需要在程序进入后台时,计时器依然能够计时,所以,就想到了一种解决方案,利用进入后台和前台的时间差来让计 ...

最新文章

  1. 算法 - 最好、最坏、平均复杂度
  2. 能说明白为啥三次握手的文章节选
  3. Asp.Net源码(转载)
  4. 统一过程(UP)定义了初启阶段、精化阶段、构建阶段、移交阶段和产生阶段,每个阶段以达到某个里程碑时结束,其中()的里程碑是生命周期架构。 A.初启阶段 B.精化阶段 C.构建阶段 D.移交阶段
  5. 部署SAP UI5应用到ABAP服务器时,Webcontent path的determine逻辑
  6. linux中安装软件,查看、卸载已安装软件方法
  7. egg前面加什么_国威说阀:阀门前面为什么加国标美标日标之类的?
  8. react(87)--控制禁用disabled
  9. JSON(JavaScript Object Notation) 格式
  10. 200多位大牛!2019两院院士拟推荐候选人最新名单
  11. 从C语言中的指针看C#中委托
  12. [转]VSTO+WinForm+WebService+WCF+WPF示例
  13. 用指针实现对二维数组元素的访问
  14. jquery视频教程(jquery视频教程全集)
  15. java jdom dom4j_实例分析jdom和dom4j的使用和区别
  16. xss.haozi.me靶机
  17. oracle得到最大日期,Oracle最大日期获取方法
  18. 那些年,我们一起写的情诗
  19. win10+python3.6+百度AI——实现人脸识别
  20. 纹理分析以及结合深度学习来提升纹理分类效果

热门文章

  1. 期末作业成品代码——麦路客电子购物商城(37页) HTML5期末考核大作业,网站——购物商城
  2. The 15th Heilongjiang Provincial Collegiate Programming Contest (A、G、H、L)
  3. 字符串倒序输出的三种方法-java版
  4. Eclipse中使用git解决冲突的方法
  5. Optimization Options Reference
  6. Arduino常见芯片板卡引脚示意图
  7. python环境下用open3d可视化mesh
  8. 去掉谷歌浏览器输入框默认的黄色背景
  9. 2010年-2020年数学二真题之偏导数+全微分
  10. C#实现http的GET/POST请求封装类-HttpRequest