我目前在集成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。任何的想法?我的方法是否正确?
答案 0 :(得分:1)
我是我的应用程序,我正在运行一个后台服务,无论该应用程序是否正在运行,该服务都会运行。
请不要。这就是用户使用“设置”中的“管理服务”屏幕中的任务杀手和强制停止攻击我们的原因。
我的主要问题是如何将AlarmManager设置为每次设置时调用thisReceiver。有什么想法吗?
您尚未注册BroadcastReceiver
,因此AlarmManager
将无法与其联系。
请请请请重新设计您的服务,以便它不必一直运行。无论如何,Android会因为年老而终止你的服务,所以如果你想要一个可靠而稳定的应用程序,无论如何都需要重新设计。