zoukankan      html  css  js  c++  java
  • Android Wear 2.0 AlarmManager 后台定时任务

    以前在Android 4.0时,alarmManager 没什么问题。后来android为了优化系统耗电情况,引入了doze模式,参见此页

    https://developer.android.com/training/monitoring-device-state/doze-standby

    简单地说,系统会长时间待机后,会自动进入doze模式,这种模式里,alarmManager啥的都不好用了,系统会自动从doze模式转出来一小段时间,把刚在在doze里被忽略的事件(比如说alarmManager)执行。这样一来,alarmManager根本无法定时调用了。

    其实,对于每个应用,这个模式是可以配置的,一般在 Settings > Battery > Battery Optimization,也可以用代码打开设置页面,让用户设置,下面是一段别人写的代码:

     Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);  
               intent.setData(Uri.parse("package:user.zhuku.com"));  
               startActivity(intent);  

    但是在android wear手表上,比如华为 watch2,是没有这个设置项的,也就是说,手表放置在桌子上,不使用,一段时间后,所有应用一定会停用。经过测试发现,手表进入doze模式后,的确如开发文档说的那样,定时唤醒系统,并且频率越来越低。

    试了好多方法,比如JobService,setAndAllowWhileIdle 在 华为手表上,都无法越过这个限制。

    好在手表有一个设定,就是带在手上后,系统就不会进入doze模式了,不知道是使用的什么方法判断的手表是否带在手上。

    测试基于 华为 watch 2 ,andoroid 8.0 ,android wear 2.x,

    手表长时间不带的话,会进入doze模式,后台任务都会停止,好在我们的应用是要求用户一直呆在手上,所以不用介意手表doze后的情况。
    手表进入doze后,再次移动手表,系统会立即唤醒,后台任务可以继续正常执行,满足我们的需求 :用户白天带上手表,系统执行跟踪;晚上摘下,系统doze后停止跟踪;第二天再次带上时,系统继续跟踪。

    由于手表带在手上时,手表存在一定的移动,所以系统不会doze,理论上可以使用任何后台技术实现需求。我们的demo中,使用的是系统alarm+后台service 的方案。 系统中有3个alarm,第一个负责添加 sersor listener, 第二个负责移除 sensor listener,第三个负责触发网络请求,发送数据。这3个alarm定期向service中的线程发送message,触发相应操作。

    为了减少耗电,目前是每分钟开启监控30秒,关闭监控30秒。为了减少数据库的数据量,目前是每3秒录入一次数据。

    demo是一款 在手表上独立运行的应用。充满电后,可满足一个白天12小时的使用(wifi条件下)(大约20小时以上?)(晚上会进入doze,耗电很少)。

    另外华为手表目前没有发现 doze的白名单设置。

    demo仅仅验证了方案的可行性,具体实现时需要优化。比如把service bind上,去掉handler的使用。再比如针对新的alarm机制调整alarm的注册和使用。再比如 对 front service 的notification界面 进行动态调整,让用户在通知栏看到更多的跟踪信息。

  • 相关阅读:
    JQuery中的id选择器含有特殊字符时,不能选中dom元素
    解决Mac下MySQL登录问题
    Mac 安装mysql
    禁止chrome浏览器自动填充表单的解决方案
    Eclipse 编译错误 Access restriction: The type 'JPEGCodec' is not API (restriction on required library 'C:Program FilesJavajre7lib t.jar')
    羊皮纸月亮计划
    ActionSupport.getText()方法
    linux入门经验之谈
    tomcat设置默认启动项
    网页设置下载apk
  • 原文地址:https://www.cnblogs.com/breezemist/p/8995640.html
Copyright © 2011-2022 走看看