GregorianCalendar cal = new GregorianCalendar();
cal.set(GregorianCalendar.HOUR_OF_DAY, 10);
cal.set(GregorianCalendar.MINUTE, 12);
cal.set(GregorianCalendar.SECOND, 0);
cal.set(GregorianCalendar.MILLISECOND, 0);
if(cal.before(new GregorianCalendar())){
cal.add(GregorianCalendar.DAY_OF_MONTH, 1);
}
myalarm = (AlarmManager)getSystemService(ALARM_SERVICE);
Intent mainIntent = new Intent(this, myReceiver.class);
pIntent = PendingIntent.getBroadcast(this, 0, mainIntent, 0);
myalarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000*60*60*24, pIntent);
これは、アラームを設定するためのコードです。myReceiver は拡張された BroadcastReceiver であり、通知を開始するサービスを開始します... 毎日 (アラーム設定からわかるように)。
私は怒っています:
1) アプリケーションを起動し、アラームが期限切れになったときに、最近のアプリのリストからアプリをスワイプすると、何もおかしなことは起こりません。エミュレータ プロセス リストの [デバイス] タブの DDMS パネルで、アプリが消えます。<----それは私が常に起こるべきことを除いてです。
しかし....
2) アプリケーションを起動し、アラームがまだ期限切れになっていない場合、通知はまだ送信されておらず、アラームが鳴り通知を受け取るまで待ちます。
それから....
6 ~ 30 秒後に最近のアプリ リストからアプリをスワイプすると、通知が再び表示され、エミュレータ プロセス リストの [デバイス] タブの DDMS パネルにアプリが再び表示されます。それをタップすると、アプリのメイン アクティビティが開始されます。
この動作を永久に再現できます...
3) 通知をタップせずにスワイプします。この時点で、これ以上通知は送信されませんが、エミュレータ プロセス リストの [デバイス] タブの [DDMS] パネルには、通知をスワイプしてもアプリが強制終了されないため、アプリはまだ存在しますが、最近のアプリ リストでは、私のアプリケーションは表示されません。もう存在しません。
どうして????どうしたの?
追加情報: Log で遊ぶ 最近のアプリ リストにアプリケーションが存在しなくなった場合でも、BroadcastReceiver クラスの onReceive メソッドが呼び出されることがわかりました。