RTCによる待機電力の問題について
2311 ワード
プラットフォーム:android 4.0シーン:お客様が反応をテストし、機器がwifiをつけている場合、一晩待機した後に消費電力が多くなります.時間:2012.9.5
お客様が提供したロゴを表示すると、6分おきにシステムが起動します.dumpsys alarmで表示:
ELAPSED_WAKEUP #0: Alarm{41189630 type 2 com.android.phone} type=2 when=+2m50s514ms repeatInterval=0 count=0 operation=PendingIntent{4118b2f8: PendingIntentRecord{411cd028 com.android.phone broadcastIntent}}
このELAPSED_WAKEUPは6分に1回のRTC覚醒を招いた.それはPhoneを通じてです.apkこのapkはframeworksbasetelephonyの下のシステムapiを呼び出して起動するRTCを設定します.役割は、gsmまたはcdmaの接続に失敗した場合に、ネットワークに再接続しようとすることです.なぜならapkこのapkには3 Gネットワークに関する呼び出しが含まれており,このapkを除去することはできない.
解決策:AlarmManagerServices.JAvaでは次のように制限されています.
private int addAlarmLocked(Alarm alarm) { +//add by fox 2012.9.5 + if(alarm.type == 2 && alarm.operation.getTargetPackage().equals(“com.android.phone”)){ + alarm.type = 3; + } +//end
cpuを呼び覚ますことができるalarmを,cpuが止まらない場合にのみ機能するalarmに変更した.
Alarmタイプの紹介を添付し、転載:http://blog.csdn.net/angle_birds/article/details/17301147
enum android_alarm_type { ANDROID_ALARM_RTC_WAKEUP, ANDROID_ALARM_RTC, ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP, ANDROID_ALARM_ELAPSED_REALTIME, ANDROID_ALARM_SYSTEMTIME,
};
5種類のAlarmを列挙で定義し,それぞれ0~4,ANDROID_を自動的に付与した.ALARM_TYPE_COUNT=5で、alarmタイプの種類数を表します.
_WAKEUPタイプは、Alarmをトリガする際にデバイスを起動する必要があり、逆にデバイスを起動する必要がないことを示す.
ANDROID_ALARM_RTCタイプは、指定された時刻にAlarmをトリガすることを示す.
ANDROID_ALARM_ELAPSED_REALTIMEは、機器の起動後、経過した時間が総時間に達した後にAlarmをトリガすることを示す.
ANDROID_ALARM_SYSTEMTIMEタイプはシステム時間を表す.
ANDROID_ALARM_ TYPE_COUNTはAlramタイプのカウントです.
注意経過時間には設備の睡眠時間も含まれており、経過時間の計算点は最後の起動から計算されます.
Javaコードを参照すると、よりよく理解できます.
1、public static final int ELAPSED_REALTIME
システムが睡眠状態に入ると、このタイプのアラームはシステムを起動しません.次にシステムが起動するまで伝達されないが、このアラームにかかる時間は相対時間であり、システムの起動後から計時を開始するものであり、睡眠時間を含めてSystemClockを呼び出すことができる.ElapsedRealtime()を取得します.システム値は3(0 x 0000000003)です.
2、 public static final int ELAPSED_REALTIME_WAKEUP
システムを起動することができて、使い方はELApSED_と同じですREALTIME、システム値は2(0 x 000000002)です.
3、public static final int RTC
システムが睡眠状態に入ると、このタイプのアラームはシステムを起動しません.システムが次に起動するまで伝達する、このアラームにかかる時間は絶対時間、かかる時間はUTC時間であり、Systemを呼び出すことができる.CurrentTimeMillis()を取得します.システム値は1(0 x 00000001)です.
4、public static final int RTC_WAKEUP
システムを起動でき、RTCタイプと同じ使い方で、システム値は0(0 x 00000000)です.
お客様が提供したロゴを表示すると、6分おきにシステムが起動します.dumpsys alarmで表示:
ELAPSED_WAKEUP #0: Alarm{41189630 type 2 com.android.phone} type=2 when=+2m50s514ms repeatInterval=0 count=0 operation=PendingIntent{4118b2f8: PendingIntentRecord{411cd028 com.android.phone broadcastIntent}}
このELAPSED_WAKEUPは6分に1回のRTC覚醒を招いた.それはPhoneを通じてです.apkこのapkはframeworksbasetelephonyの下のシステムapiを呼び出して起動するRTCを設定します.役割は、gsmまたはcdmaの接続に失敗した場合に、ネットワークに再接続しようとすることです.なぜならapkこのapkには3 Gネットワークに関する呼び出しが含まれており,このapkを除去することはできない.
解決策:AlarmManagerServices.JAvaでは次のように制限されています.
private int addAlarmLocked(Alarm alarm) { +//add by fox 2012.9.5 + if(alarm.type == 2 && alarm.operation.getTargetPackage().equals(“com.android.phone”)){ + alarm.type = 3; + } +//end
cpuを呼び覚ますことができるalarmを,cpuが止まらない場合にのみ機能するalarmに変更した.
Alarmタイプの紹介を添付し、転載:http://blog.csdn.net/angle_birds/article/details/17301147
enum android_alarm_type { ANDROID_ALARM_RTC_WAKEUP, ANDROID_ALARM_RTC, ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP, ANDROID_ALARM_ELAPSED_REALTIME, ANDROID_ALARM_SYSTEMTIME,
ANDROID_ALARM_TYPE_COUNT,
};
5種類のAlarmを列挙で定義し,それぞれ0~4,ANDROID_を自動的に付与した.ALARM_TYPE_COUNT=5で、alarmタイプの種類数を表します.
_WAKEUPタイプは、Alarmをトリガする際にデバイスを起動する必要があり、逆にデバイスを起動する必要がないことを示す.
ANDROID_ALARM_RTCタイプは、指定された時刻にAlarmをトリガすることを示す.
ANDROID_ALARM_ELAPSED_REALTIMEは、機器の起動後、経過した時間が総時間に達した後にAlarmをトリガすることを示す.
ANDROID_ALARM_SYSTEMTIMEタイプはシステム時間を表す.
ANDROID_ALARM_ TYPE_COUNTはAlramタイプのカウントです.
注意経過時間には設備の睡眠時間も含まれており、経過時間の計算点は最後の起動から計算されます.
Javaコードを参照すると、よりよく理解できます.
1、public static final int ELAPSED_REALTIME
システムが睡眠状態に入ると、このタイプのアラームはシステムを起動しません.次にシステムが起動するまで伝達されないが、このアラームにかかる時間は相対時間であり、システムの起動後から計時を開始するものであり、睡眠時間を含めてSystemClockを呼び出すことができる.ElapsedRealtime()を取得します.システム値は3(0 x 0000000003)です.
2、 public static final int ELAPSED_REALTIME_WAKEUP
システムを起動することができて、使い方はELApSED_と同じですREALTIME、システム値は2(0 x 000000002)です.
3、public static final int RTC
システムが睡眠状態に入ると、このタイプのアラームはシステムを起動しません.システムが次に起動するまで伝達する、このアラームにかかる時間は絶対時間、かかる時間はUTC時間であり、Systemを呼び出すことができる.CurrentTimeMillis()を取得します.システム値は1(0 x 00000001)です.
4、public static final int RTC_WAKEUP
システムを起動でき、RTCタイプと同じ使い方で、システム値は0(0 x 00000000)です.