5

私は Android で単純なタスク アプリを開発しており、AlarmManager を介して通知を作成する必要があります。私の問題は、削除する必要がある特定のアラームがあることです-したがって、それらの通知-しかし、それらはそうではありませ.アプリ全体から同じインスタンスにアクセスできます。私がこれを行っている方法は、メインクラスに次のメソッドを持っていることです:

public static AlarmManager getAlarmManagerInstance() {
        if (sAlarmManager == null && sContext != null)
            sAlarmManager = (AlarmManager) sContext
                    .getSystemService(Context.ALARM_SERVICE);
        return sAlarmManager;
    }

変数では、次のsContextようにインスタンス化されます。

@Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.activity_main);
        sContext = this;
        initActionBar();
    }

この変数からシングルトン パターンを作成するのは良い考えですか? より良いアプローチはありますか?

よろしくお願いします。

4

2 に答える 2

1

Android のドキュメントには次のように記載されています。

このクラスを直接インスタンス化することはありません。代わりに、Context.getSystemService(Context.ALARM_SERVICE) を介して取得します。

AlarmManager は、システム アラーム サービスへのアクセスを提供する単なるクラスです。

このサービスはシステム内で実行されているため、気にする必要はありません。AlarmManager をインターフェイスとして使用して、それらと対話します。

したがって、このサービスにアクセスする必要があるたびに、ドキュメントに記載されているように取得するだけです。

Context.getSystemService(Context.ALARM_SERVICE)

于 2013-08-13T13:49:08.397 に答える
1

静的アラームを作成しないことをお勧めします。

PendingIntents に指定された ID を使用するには、コメントに記載されているアドバイスに従う必要があります。これにより、アプリケーション内のどこからでも確実にアラームをキャンセル/更新できます。

静的アラームに反対するようアドバイスした理由:

次のシナリオが発生する可能性があります。アラームをスケジュールして静的参照を作成し、ユーザーが電話を再起動します。アラームがなくなり、アラームへの静的参照もなくなりました。

このようなシナリオでアラームを機能させる必要がある場合は、それらの ID と必要な情報を共有設定/データベース/ファイルに書き込み、onBoot またはアプリに適した他のイベントでそれらを再スケジュールする必要があります。

于 2013-08-13T10:53:04.317 に答える