My IntentServiceは、アラームまたはアクティビティによって2つの場所から起動されます。また、持続時間は、Webから取得する必要があるデータの量と関連しています。部分的なwakelockを保持する必要があります。IntentService内のAquire部分的なウォークロック
ここに私の実装です:
@Override
protected void onHandleIntent(Intent intent) {
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WakeLock");
try {
wakeLock.setReferenceCounted(false);
wakeLock.acquire(3600000);
///other code here
}
catch{
}
finally{
if (wakeLock.isHeld()) {
wakeLock.release();
}
}
私の質問は:この作品は十分だろうか? finally
はどんな状況でもワockロックが解放されることを確認しますか?私が知っていることから、onHandleIntent
は1つずつインテントを処理するので、同時に2つのインテント/ 2つのウォークロックを持つリスクはありません。
その後編集:
IntentServiceは2通りの方法で呼び出されます。
私の活動から、使用してトリガ
Alarm
からstartService(new Intent(context, MyService.class).putExtra()..);
2のようにPendingIntent
PendingIntent pendingIntent = PendingIntent.getService(context, someId, myServiceIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Alarm
から実行された場合、サービスにはウォークロックを取得するのに十分な時間がありますか?
'これは冗長です –