现象 平均电流5mA
【通过标准是 小于等于 4 mA】
具体唤醒情况如下
【GMS】设置type 2的定时 3125756
01-02 11:09:29.186104 19796 22496 V AlarmManager: APP set(PendingIntent{9eaa3ee: PendingIntentRecord{20a678d com.google.android.gms broadcastIntent}}) : type=2 triggerAtTime=3125756 win=-1 tElapsed=3125756 maxElapsed=4273831 interval=0 flags=0x0
【21分钟后】唤醒
01-02 11:36:36.083157 19796 19962 V AlarmManager: sending alarm Alarm{3f98b29 type 2 when 3125756 com.google.android.gms} success
01-02 11:36:36.086213 19796 19962 V AlarmManager: sending alarm Alarm{45ceeae type 3 when 3220372 com.google.android.gms} success
01-02 11:36:36.109095 19796 19962 V AlarmManager: sending alarm Alarm{baaa7dc type 3 when 3220503 com.google.android.gms} success
【GMS】设置type 2的定时 5021914
01-02 11:36:36.129115 19796 19980 V AlarmManager: APP set(PendingIntent{d2865c8: PendingIntentRecord{9e67661 com.google.android.gms startService}}) : type=3 triggerAtTime=5021914 win=1349985 tElapsed=5021914 maxElapsed=6371899 interval=0 flags=0x0
01-02 11:36:36.568509 19796 20553 V AlarmManager: APP set(PendingIntent{d204a4: PendingIntentRecord{20a678d com.google.android.gms broadcastIntent}}) : type=2 triggerAtTime=5022246 win=-1 tElapsed=5022246 maxElapsed=6372151 interval=0 flags=0x0
【GMS 的兄弟】
【30分钟后】唤醒
01-02 12:06:37.123076 19796 19962 V AlarmManager: sending alarm Alarm{2ec4f79 type 3 when 5021914 com.google.android.gms} success
01-02 12:06:37.126226 19796 19962 V AlarmManager: sending alarm Alarm{f6ae4be type 2 when 5022246 com.google.android.gms} success
【GMS】设置type 2或3 的定时 5021914
01-02 12:06:37.160249 19796 20804 V AlarmManager: APP set(PendingIntent{8a346c: PendingIntentRecord{e596a35 com.google.android.gms startService}}) : type=3 triggerAtTime=6822956 win=1349994 tElapsed=6822956 maxElapsed=8172950 interval=0 flags=0x0
01-02 12:06:37.470891 19796 20804 V AlarmManager: APP set(PendingIntent{bb9909c: PendingIntentRecord{20a678d com.google.android.gms broadcastIntent}}) : type=2 triggerAtTime=6823197 win=-1 tElapsed=6823197 maxElapsed=8173139 interval=0 flags=0x0
01-02 11:09:28.914825 19796 20552 V AlarmManager: APP set(PendingIntent{7f87597: PendingIntentRecord{3eff609 com.google.android.gms broadcastIntent}}) : type=3 triggerAtTime=6994715 win=4049997 tElapsed=6994715 maxElapsed=11044712 interval=0 flags=0x0
【4分钟后】唤醒
01-02 12:40:37.136259 19796 19962 V AlarmManager: sending alarm Alarm{3d1c846 type 3 when 6822956 com.google.android.gms} success
01-02 12:40:37.139299 19796 19962 V AlarmManager: sending alarm Alarm{77bca07 type 2 when 6823197 com.google.android.gms} success
01-02 12:40:37.143821 19796 19962 V AlarmManager: sending alarm Alarm{fad5734 type 3 when 6994715 com.google.android.gms} success
【GMS】设置type 2或3 的定时 8503003
01-02 12:04:37.202920 19796 19808 V AlarmManager: APP set(PendingIntent{711ded4: PendingIntentRecord{78a87d com.google.android.gms broadcastIntent}}) : type=2 triggerAtTime=8503003 win=0 tElapsed=8503003 maxElapsed=8503003 interval=0 flags=0x1
【60分钟后】唤醒
01-02 13:04:38.107170 19796 19962 V AlarmManager: sending alarm Alarm{f5803d0 type 2 when 8503003 com.google.android.gms} success
【GMS】设置type 2或3 的定时 8862945
01-02 12:40:37.204791 19796 20552 V AlarmManager: APP set(PendingIntent{70b9a1e: PendingIntentRecord{a19f2ff com.google.android.gms startService}}) : type=3 triggerAtTime=8862945 win=1349994 tElapsed=8862945 maxElapsed=10212939 interval=0 flags=0x0
01-02 12:40:37.511517 19796 20876 V AlarmManager: APP set(PendingIntent{5eef564: PendingIntentRecord{20a678d com.google.android.gms broadcastIntent}}) : type=2 triggerAtTime=8863239 win=-1 tElapsed=8863239 maxElapsed=10213182 interval=0 flags=0x0
【30分钟后】唤醒
01-02 13:10:39.113842 19796 19962 V AlarmManager: sending alarm Alarm{ec681da type 3 when 8862945 com.google.android.gms} success
01-02 13:10:39.117196 19796 19962 V AlarmManager: sending alarm Alarm{eb1e60b type 2 when 8863239 com.google.android.gms} success
【GMS】设置type 2或3 的定时 10664926
01-02 13:10:39.132902 19796 22502 V AlarmManager: APP set(PendingIntent{d587ce8: PendingIntentRecord{82c0f01 com.google.android.gms startService}}) : type=3 triggerAtTime=10664926 win=1349995 tElapsed=10664926 maxElapsed=12014921 interval=0 flags=0x0
01-02 13:10:39.594389 19796 20938 V AlarmManager: APP set(PendingIntent{b83f53a: PendingIntentRecord{20a678d com.google.android.gms broadcastIntent}}) : type=2 triggerAtTime=10665202 win=-1 tElapsed=10665202 maxElapsed=12015055 interval=0 flags=0x0
【30分钟后】唤醒
01-02 13:44:38.123607 19796 19962 V AlarmManager: sending alarm Alarm{7f23eb7 type 3 when 10664926 com.google.android.gms} success
01-02 13:44:38.126259 19796 19962 V AlarmManager: sending alarm Alarm{9caa624 type 2 when 10665202 com.google.android.gms} success
【GMS】设置type 的定时 12103965
01-02 13:04:38.165847 19796 20179 V AlarmManager: APP set(PendingIntent{ae0c6ce: PendingIntentRecord{f9b99ef com.google.android.gms broadcastIntent}}) : type=2 triggerAtTime=12103965 win=0 tElapsed=12103965 maxElapsed=12103965 interval=0 flags=0x1
【60分钟后】唤醒
01-02 14:04:39.101542 19796 19962 V AlarmManager: sending alarm Alarm{c03c031 type 2 when 12103965 com.google.android.gms} success
其他GCM推送带来的唤醒
主要是注册如下配置的应用
<receiver android:exported="true" android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
<action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
<category android:name="com.staros.analyticssdk"/>
</intent-filter>
</receiver>
<receiver android:exported="false" android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"/>
<service android:exported="true" android:name="com.google.firebase.iid.FirebaseInstanceIdService">
<intent-filter android:priority="-500">
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
<provider android:authorities="com.staros.analyticssdk.firebaseinitprovider" android:exported="false" android:initOrder="100" android:name="com.google.firebase.provider.FirebaseInitProvider"/>
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
上述存在
两个定时分别是30和60分钟一次的定时,这里代码无法修改故进行对齐唤醒处理
对齐唤醒-优化后的改善
进一步优化
AlarmManagerService.java
if(operation != null && isDeviceIdle && isSkipAlarm(operation)){
Binder.restoreCallingIdentity(oldId);
return;
}
private boolean isSkipAlarm(final PendingIntent operation){
if(isActiveNetwork()){
return isGmsGcmAlarmWithconnect(operation);
}
if(isGmsGcmAlarmWithDisconnect(operation)){
return true;
}
return false;
}