Utilizzo di Android 19+AlarmManager setExact con WakefulBroadcastReceiver a volte non è esatta
setExact in congiunzione con WakefulBroadcastReceiver a volte non si attiva in tempo (può essere un paio di secondi o così tardi). Intendo la maggior parte del tempo che fa. probabilmente 49 volte su 50 è corretto.
non sono sicuro se il suo solo perché il sistema è occupato al momento e non è in grado di gestire il carico di lavoro o che cosa
Ecco come ho impostato la sveglia:
AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(AlarmReceiver.INTENT_FILTER);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, MyApplication.ALARM_REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, timeToWakeUp, alarmIntent);
Qui è il mio codice ricevitore:
public class AlarmReceiver extends WakefulBroadcastReceiver {
public static final String INTENT_FILTER = "myfilter";
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, MyWakefulService.class);
startWakefulService(context, service);
}
}
E nel WakefulService
public class MyWakefulService extends IntentService {
....
@Override
protected void onHandleIntent(Intent intent) {
....
Quando si sta calcolando il tempo per timeToWakeUp, stai riportano i secondi e millesimi di secondo a 0? – JDJ
@JDJ ho impostato i secondi di conseguenza, però io non impostare il millisecondi. i Proverò che – MobileMon
@JDJ, credo che impostare i millisecondi rende il timer ancora più preciso, grazie per questo, ma non risolve il problema a portata di mano . Sono abbastanza sicuro che è solo perché il sistema è così occupato che l'evento non può sparare in quel momento esatto. Perché succede sempre se riavvio il dispositivo e pianifico l'allarme prima che l'avvio sia terminato. Ovviamente non è l'unica volta che c'è un ritardo, ma penso che lo scriverò fino a sistema occupato a meno che non senta il contrario – MobileMon