0

1時間ごとにサービスを生成することを達成したい。このサービスは、いくつかの SQL データベース操作を実行する必要があります。そのために、AlarmManager を次のように使用しました。

 Calendar cal = Calendar.getInstance();
 Intent intent = new Intent(Home.this, DeleteCaseService.class);
 PendingIntent pintent = PendingIntent.getService(Home.this, 0, intent, 0);
 AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
 alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 60*60*1000, pintent);

サービスのコードはまだ作成していませんが、それは問題ではありません。私の問題はちょっと理論的なものです。このアプリを 8 時間コンスタントに実行するとしたら、8 つの異なるスレッドで 8 つの異なるサービスが開始されるでしょうか? または、いつサービスが終了しますか? これは最善のアプローチですか?他の解決策を自由に提案してください。AlarmManager

ありがとう。

4

1 に答える 1

1

データベースでバックグラウンド操作を行うためにブロードキャストレシーバーを使用するサービスを使用する代わりに、ブロードキャストレシーバーを呼び出すには、次のコードを使用します。

public class AlarmMgnr
    {
        private Intent intent;
        Context context;
        private static AlarmManager aMgnr;
        private static PendingIntent sender;

        public AlarmMgnr(Context context)
        {
            this.context = context;
        }

        public void registerAlarm()
        {
            Calendar cal = Calendar.getInstance();

            int hour = cal.get(Calendar.HOUR);

            cal.set(Calendar.HOUR, hour);
            cal.set(Calendar.MINUTE, 00);
            cal.set(Calendar.SECOND, 00);

            System.out.println("AlarmMgnr.registerAlarm()");

            intent = new Intent(context, <YourReciverCalssName>.class);

            sender = PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);

            aMgnr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            // aMgnr.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, sender);
            aMgnr.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 180000L, sender);
            // aMgnr.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 60000L, sender);
        }

        public void unregisterAlarm()
        {
            aMgnr.cancel(sender);
        }

    }
}

そして、アプリケーションがインストールされたときにのみ、このアラーム管理を開始します。

于 2013-07-01T07:13:33.513 に答える