我尝试使用带有PendingIntent的AlarmManager每1分钟运行一次服务。通过使用setInexactRepeating功能,我可以在除三星设备之外的所有手机中运行该服务,直到现在我都进行了测试。
案例1:Android 5.1 - 以下代码在Samsung Device中每1分钟运行一次,后期阶段则转为5分钟间隔
案例2:Android 6.0 - 以下代码在Samsung Device和后期阶段每隔5分钟运行一次
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, 1, 1000 * 60, alarmIntent);
三星Android 5.1 - 记录
04-17 15:53:06.856 12381-13117/com.example.android.scheduler D/LL_LOG: loadFromNetwork
04-17 15:54:16.291 12381-13949/com.example.android.scheduler D/LL_LOG: loadFromNetwork
04-17 15:55:00.036 12381-14679/com.example.android.scheduler D/LL_LOG: loadFromNetwork
04-17 15:56:01.121 12381-15660/com.example.android.scheduler D/LL_LOG: loadFromNetwork
04-17 15:57:16.591 12381-16773/com.example.android.scheduler D/LL_LOG: loadFromNetwork
04-17 15:58:23.066 12381-17318/com.example.android.scheduler D/LL_LOG: loadFromNetwork
04-17 16:01:14.366 12381-19279/com.example.android.scheduler D/LL_LOG: loadFromNetwork
04-17 16:06:13.901 12381-25377/com.example.android.scheduler D/LL_LOG: loadFromNetwork
Samsung Android 6.0 Log
04-17 15:27:18.621 12920-31956/com.example.android.scheduler D/LL_LOG: loadFromNetwork
04-17 15:32:18.681 12920-5003/com.example.android.scheduler D/LL_LOG: loadFromNetwork
04-17 15:37:18.651 12920-9665/com.example.android.scheduler D/LL_LOG: loadFromNetwork
04-17 15:42:18.641 12920-10642/com.example.android.scheduler D/LL_LOG: loadFromNetwork
04-17 15:47:18.831 12920-11739/com.example.android.scheduler D/LL_LOG: loadFromNetwork
04-17 15:52:18.741 15868-15882/com.example.android.scheduler D/LL_LOG: loadFromNetwork
04-17 15:57:18.661 15868-17146/com.example.android.scheduler D/LL_LOG: loadFromNetwork
注意:如上所述(NKosi's answer& AlarmManager not working on Samsung devices in Lollipop)我已经改变了APP优化。我的问题仍然存在。
我希望能够解决这个或任何替代方案以同样的方式运行服务而不会耗尽电池。
答案 0 :(得分:1)
由于各种省电机制,您无法在大多数现代设备上使用此高频重复警报。每分钟唤醒你的设备都会对电池寿命产生不利影响。
但是,如果您真的想这样做,则需要每次重新安排闹钟。而不是安排重复警报,只需安排一个会在一分钟内响起的警报。当该警报响起时,执行您的处理,然后安排一个警报,该警报将在1分钟后熄灭。通过这种方式,您将能够获得准确的计时。