[Android] setRepeating() の誤差と setExact() setWindow()

Android 19 からAlarmMangerでの、set()、setRepeating()などの時間経過の誤差が大きくなりました。(inexact になったとあります)
理由は、バッテリー電力消費量を改善するためのようですが、実際どの程度なのか試してみました。



setRepeating(), set()のinexact

 
確かに、毎朝7時のアラームが7時1分であれば、多少は許容される場合もあるでしょうが
そもそも誤差がどれだけなのかよくわかりません。OSに依存させているというのは、けっこう出たとこ勝負ではないでょうか。
 
テストを実施してみました。
Activity から Service を呼び、AlarmManager にそれぞれのメソッドをセットします
アラーム起動は1秒後で、その後1分間隔で繰り返すテストです
Nexus7 2013 を使用
またスマホはwakeupの状態
targetSdkVersion = 25 です
 

setRepeating

 

相当ばらついています
1分間隔ですが24秒後にアラームが出てることもあります
 
alarm inexact 1 300x112 - [Android] setRepeating() の誤差と setExact()  setWindow()
 

set

 
setは単発アラームなので、Serviceでアラーム起動後、次のアラームを設定する方法をとりました

 
毎回設定しているためか、setRepeating よりはマシですが
時々ズレます
 
alarm inexact 2 300x116 - [Android] setRepeating() の誤差と setExact()  setWindow() 

setExact

 

 
setExact のReferenceでは
http://developer.android.com/reference/android/app/AlarmManager.html#setExact(int, long, android.app.PendingIntent)

This method is like set(int, long, PendingIntent), but does not permit the OS to adjust the delivery time. The alarm will be delivered as nearly as possible to the requested trigger time.

ということで、努力目標でしょうか
CPUに負荷がかかってしまうと確実ではないような感じですね
 
alarm inexact 3 300x116 - [Android] setRepeating() の誤差と setExact()  setWindow()
 

setWindow

 
 
window の幅は 1000 msec に設定
 

 
SetWindow のReferenceでは
http://developer.android.com/reference/android/app/AlarmManager.html#setWindow(int, long, long, android.app.PendingIntent)

Schedule an alarm to be delivered within a given window of time. This method is similar to set(int, long, PendingIntent), but allows the application to precisely control the degree to which its delivery might be adjusted by the OS.

windowの範囲内であればOSが調整してくれる(たぶん)
ということですね
 
alarm inexact 4 300x114 - [Android] setRepeating() の誤差と setExact()  setWindow()
 
window の範囲内でアラームが出ていますが
繰り返しによる遅れがだんだん積み重なっています
setWindow、setExact 以外に繰り返しのAPIがないようです

x setExactRepeatingというのが無い

setWindowがとりあえず、バッテリー消費と時間精度の妥協策でしょうか

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加




アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう、時間の制約がないところが一番の魅力です。

以下の3つはAndroidが学習できるオンラインスクールです。


TECH ACADEMY
Androidアプリコース



侍エンジニア塾
侍エンジニア塾 無料体験レッスン



CodeCamp
~約8,000名の受講生と80社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp





正直ネットや本では限界があります。直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。

尚、スクールがダメだと言う人がいますが、やる気があれば問題ありません。与えられるのを待っていてはいけないですね
欲しいものは取りに行くのです。


Google Pixel 3 XLグローバル版
SIMフリー 並行輸入品
6.3インチの大画面
背景をぼかすポートレートモード撮影


Anker PowerCore II Slim 10000
Power IQ 2.0搭載
iPhone & Android対応

シェアする

  • このエントリーをはてなブックマークに追加

フォローする