4

最近、AlarmManagerを使用してアクティビティを将来実行するようにスケジュールしようとすると、奇妙な動作に気づきました。以下のコードを見てください。最初のアクティビティは20秒で開始されますが、2番目のアクティビティは40秒で開始されず、60秒後にのみ開始されます。2番目のインテントが2番目のアクティビティをスケジュールせず、代わりに3番目のインテントが呼び出す理由を誰かが説明できますか?これは、AlarmManagerのアクティビティに対して1つのインテントしか持てないことを意味しますか?

//pending intent for morning
    Intent myIntent1 = new Intent(this, Activity1.class);
    pendingIntent1 = PendingIntent.getActivity(this, 0, myIntent1, 0);
    AlarmManager alarmManager1 = (AlarmManager)getSystemService(ALARM_SERVICE);
    Calendar calendar1 = Calendar.getInstance();
    //calendar1.set(Calendar.YEAR, Calendar.MONTH + 1, Calendar.DAY_OF_MONTH, morningTime, 0, 0);
    calendar1.setTimeInMillis(System.currentTimeMillis());
    calendar1.add(Calendar.SECOND, 20);
    alarmManager1.set(AlarmManager.RTC_WAKEUP, calendar1.getTimeInMillis(), pendingIntent1);

    //pending intent for noon
    Intent myIntent2 = new Intent(this, Activity2.class);
    pendingIntent2 = PendingIntent.getActivity(this, 0, myIntent2, 0);
    AlarmManager alarmManager2 = (AlarmManager)getSystemService(ALARM_SERVICE);
    Calendar calendar2 = Calendar.getInstance();
    //calendar2.set(Calendar.YEAR, Calendar.MONTH + 1, Calendar.DAY_OF_MONTH, noonTime, 0, 0);
    calendar2.setTimeInMillis(System.currentTimeMillis());
    calendar2.add(Calendar.SECOND, 40);
    alarmManager2.set(AlarmManager.RTC_WAKEUP, calendar2.getTimeInMillis(), pendingIntent2);

    //pending intent for night
    Intent myIntent = new Intent(this, Activity2.class);
    pendingIntent = PendingIntent.getActivity(this, 0, myIntent, 0);
    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    //calendar.set(Calendar.YEAR, Calendar.MONTH + 1, Calendar.DAY_OF_MONTH, nightTime, 0, 0);
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND, 60);
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);'
4

1 に答える 1

15

これは、AlarmManagerのアクティビティに対して1つのインテントしか持てないことを意味しますか?

いいえ、しかしそれはあなたが明確なものを必要とすることを意味しますPendingIntents。あなたが呼んでいる:

Intent myIntent = new Intent(this, Activity2.class);
pendingIntent = PendingIntent.getActivity(this, 0, myIntent, 0);

2回、したがって2つのgetActivity()呼び出しは同じを返しPendingIntentます。

また:

  • 2番目のパラメーターに別の値を使用してgetActivity()、または

  • 異なるアクション文字列を使用するなど、オブジェクトを十分に異なるものにするために何かを行いIntentます(注:エクストラは十分ではありません)

于 2012-05-12T10:40:21.000 に答える