2

私はアラームアプリケーションを作成しています、そしてこれはアラームを実行する方法です:

public void startAlarm(int minuteToStart)
{

    Toast.makeText(context, "Alarm Start in " + formatTime(minuteToStart), Toast.LENGTH_SHORT).show();
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.MINUTE, minuteToStart);    
    Intent intent = new Intent(context, AlarmActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, idPendingIntent, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager alarmManager = (AlarmManager)context.getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
}

そして、特定の時間の後にこのアクティビティを実行します。

public class AlarmActivity extends Activity {
......
}

動作しますが、BroadcastReceiverを使用している人がいますが、間違っていますか?BroadcastReceiverも使用する必要がありますか?BroadcastReceiverについて検索してきましたが、アプリケーションでどのような違いが生じるかわかりません。

ありがとう。

4

3 に答える 3

6

一般的なケースでは、A--Cの答えが正しいでしょう。

ただし、RTC_WAKEUPアラームタイプとして使用しています。アラームを使用する場合唯一の保証は、を使用する場合です。Androidは、実行するのに十分な時間、デバイスがスリープ状態を維持することを保証します。その他のタイプのアクティビティまたはサービスには保証がなく、または実際に発生する前にデバイスがスリープ状態に戻る可能性が非常に高くなります。_WAKEUPBroadcastReceiveronReceive()PendingIntentstartActivity()startService()

于 2013-01-31T02:03:16.223 に答える
4

AlarmManager可能なものPendingIntent(アクティビティ、サービス、レシーバー)で使用できますが、通常レシーバーで使用されます。将来実行されるタックは通常小さく、ユーザーが必要としないため、アクティビティを実行する必要はありません。何かがポップアップします。

レシーバーはアクティビティではないため、UIがなく、処理時間の制限は約10秒です。そのため、迅速に処理するようにしてください。特定の時間にUIを表示する必要がある場合は、を使用しますが、ユーザー表示する必要のある目覚まし時計アプリのようなものでない限りActivity、通常はそうではありません)。舞台裏での操作のようなものがある場合は、レシーバーを選択してください。レシーバーはそれに渡されるので、できることは何でもできます。onReceive()ContextContext

PendingIntent.getActivity()アクティビティにならない場合は、呼び出しを使用することにした他の呼び出しに変更する必要があることに注意してください。

ですから、それはあなたが何をしたいかによります。

于 2013-01-31T01:58:27.390 に答える
1

を使用する必要はありませBroadcastReceiverActivityユーザーの操作なしでフォーカスを盗み、バックグラウンドから起動することは、一般的に(ほとんどの場合)嫌われています。ただし、確かに有効なユースケースがあります。とにかくすぐに起動する場合Activityは、経由ではなく直接起動することBroadcastReceiverは完全に有効です。

于 2013-01-31T02:00:33.733 に答える