0

我想完成每小时产生一项服务。该服务应该执行一些 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 个不同的 Service?或者服务什么时候会被杀死?这是最好的方法吗?随意提出其他解决方案,但我想保留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 回答