在后台服务中运行的Android AlarmManager和BroadcastReceiver

时间:2011-08-27 02:07:38

标签: android broadcastreceiver alarmmanager

我目前在集成AlarmManager和BroadcastReceiver时遇到问题。

我是我的应用程序,我正在运行一个后台服务,无论该应用程序是否正在运行,该服务都会运行。我想我觉得这部分工作正常。后台服务保留一个根据用户位置更改的数组。但是,每天早上8点,我希望应用程序将数组变量重置为默认值。经过多次在线查看后,似乎可以通过AlarmManager(每天早上8点启动任务)和使用BroadcastReceiver(接收警报,执行任务)来实现此目的。

所以基本上代码就像这样:

public class BackgroundService extends Service {

    private ArrayList thisArray;

    private BroadcastReceiver thisReceiver = new BroadcastReceiver(){

        @Override
        public void onReceive(Context context, Intent intent) {
            setArrayToDefault();
        }

    }

    @Override
    public void onCreate(){

        super.onCreate();
        Calendar cal = new GregorianCalendar();
        cal.add(Calendar.MINUTE, 2); //example

        this.registerReceiver(thisReceiver, new IntentFilter("BackgroundService"));

        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), ONE_MINUTE, "what to put here?"); //example, repeat every minute

    }

    private void setArrayToDefault(){
        //here, the array will be changed back to default values
    }
}

我的主要问题是如何将AlarmManager设置为每次设置时调用thisReceiver。任何的想法?我的方法是否正确?

1 个答案:

答案 0 :(得分:1)

  

我是我的应用程序,我正在运行一个后台服务,无论该应用程序是否正在运行,该服务都会运行。

请不要。这就是用户使用“设置”中的“管理服务”屏幕中的任务杀手和强制停止攻击我们的原因。

  

我的主要问题是如何将AlarmManager设置为每次设置时调用thisReceiver。有什么想法吗?

您尚未注册BroadcastReceiver,因此AlarmManager将无法与其联系。

请请请请重新设计您的服务,以便它不必一直运行。无论如何,Android会因为年老而终止你的服务,所以如果你想要一个可靠而稳定的应用程序,无论如何都需要重新设计。