0

手帳を作っています。ユーザーはカレンダーから日を選択し、特定の時間で日付を作成できます。この日時に、アプリケーションは通知である別のアクティビティを表示する必要があります。ユーザーは 1 日に 1 つのメモしか作成できません。したがって、各音符の pk は YYYYMMDD です。

だから、自分のしたことが正しいかどうかを知りたいのです。アプリケーションで開始されるサービスがあります。サービスのonStartCommandは、現在の日付にデータベースにメモがあるかどうかをチェックし、ある場合はアクティビティ通知を呼び出します。毎分ループしている実行可能なスレッドがあり、サービスの日付onStartCommandが静的であるため、サービスの日付を更新します。runnable によって取得された日付がonStartCommandの日付と等しい場合は、循環を続けます。そうでない場合は、次のようにサービスを再開します。

Intent myIntent = new Intent(Receiver.this, NotificaSuoneria.class);
startActivity(myIntent);

このように問題はありませんが、実行可能なスレッドがアンドロイドによって強制終了される可能性があるかどうかを知りたいです。殺されると、他の日のアラームを確認できないためです。

そして、日付を更新するたびにサービスを再起動すると、古い実行可能なスレッドが強制終了されますか、それとも多くのスレッドになりますか?

AlarmManagerPS私はアラームをスケジュールするために使用しません。datenow がアラームに関与している場合は、残り時間を計算し、この時間はスリープしてから、通知アクティビティを開始します。私の下手な英語でごめんなさい。

4

1 に答える 1

0

これには、次のようなループで AlarmManager を使用する必要がありますedited

try {
            cntxt = createPackageContext("your.app.package",CONTEXT_IGNORE_SECURITY);
           } catch (NameNotFoundException e) {
              // handle exception here
              e.printStackTrace();
           }

Intent myIntent = new Intent(cntxt , yourreciever.class);
    PendingIntent pi;
    AlarmManager alarmManager;
        for(int i=0;i<=timesinday;i++)
        {
        pi=PendingIntent.getBroadcast(cntxt, i,myIntent, 0);

        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                                        alarmManager.set(AlarmManager.RTC_WAKEUP, currentcal.getTimeInMillis(),pi);

        }

Android Menifest に NotificaSuoneria を受信者として追加することを忘れないでください。毎日アラームを鳴らしたい場合は、使用する必要があります

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,todaycal.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);

@Meesta私は答えを編集しています。ここでアクティビティについて言及する必要はありません。ここIntent myIntent = new Intent(Receiver.this, here.class);では、アクティビティを開始できる受信者クラスになりますhttp://androidword.blogspot.in/2010/10/how-to-use-も参照してください。 broadcast-receiver.htmlを開き、ブロードキャスト レシーバーからアクティビティを開始するときに flag_new_activity を追加してみてください

于 2012-07-29T10:43:47.870 に答える