AlarmManager wird im Emulator ausgelöst, aber nicht auf einem physischen Gerät.

Ich habe eine Anwendung, die AlarmManager aufruft

Intent intent;
intent = new Intent(context, MyEventReceiver.class);  
PendingIntent appIntent = PendingIntent.getBroadcast(context, 0,
intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
appIntent);

und im Manifiest habe ich den Pflichteintrag

    <receiver android:name=".MyEventReceiver"
   android:process=":remote" />

MyEventReceiver sieht so aus

public class MyEventReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        try
        {
            // DO SOME WORK
        }
        catch (Exception e)
        {
            Log.e("MyEventReceiver", e.getMessage().toString());
        }
    }
}

Wenn der Alarm aktiviert ist, sollte MyEventReceiver gestartet werden und etwas unternehmen, auch wenn meine Anwendung nicht ausgeführt wird. Im Emulator ist dies der Fall, auf dem tatsächlichen Gerät ist dies jedoch nicht der Fall.

Als Beispiel starte ich MyApplication auf dem Emulator und in DDMS kann ich sehen, wie MyApplication ausgeführt wird. In MyApplication füge ich einen Alarm hinzu und beende dann in DDMS den Prozess für MyApplication. Wenn der Alarm ausgelöst wird, erledigt MyEventReceiver seine Arbeit und in DDMS werden zwei Prozesse angezeigt, MyApplication und MyApplication: remote.

Wenn ich MyApplication auf einem tatsächlichen Gerät starte, füge ich einen Alarm hinzu und beende den Vorgang mit einem Task-Killer, wenn die Zeit für die Ausführung des Alarms abgelaufen ist. Wenn ich mein Gerät mit dem Debugger verbinde und den Vorgang mit DDMS anstelle des Taskkillers auf dem Gerät stoppe, wird der Alarm ausgelöst und funktioniert wie erwartet.

Kann mir jemand helfen, zu verstehen, warum dies geschieht? Ich hatte den Eindruck, dass der geplante Alarm bestehen bleibt, wenn das Gerät nicht neu gestartet wird. Das Gerät ist zu dem Zeitpunkt, an dem der Alarm ausgelöst werden soll, aktiv.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage