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

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

在我的应用程序中,无论运行与否,我都在运行后台服务。我想这部分工作正常。后台服务保留一个根据用户位置而变化的数组。但是,每天早上8:00,我希望应用程序将数组变量重置为默认值。在网上浏览了很多之后,似乎可以通过AlarmManager(每8:00 am启动任务)和使用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。任何想法?我的方法正确吗?

最佳答案

在我的应用程序中,无论运行与否,我都在运行后台服务。


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


  我的主要问题是如何设置AlarmManager在每次设置时都调用thisReceiver。任何想法?


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

请请请请请重新设计您的服务,使其不必一直运行。无论如何,Android都会因年龄过长而终止您的服务,因此,如果您想要一个可靠且稳定的应用程序,则无论如何都需要重新设计。

本文翻译自 https://stackoverflow.com/questions/7212109/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 android broadcastreceiver alarmmanager


相关文章:

java - Android CameraUpdateFactory未初始化

java - 类型不匹配:必需:上下文,找到:目的

android - Android编程 - 如何从广播接收器播放SoundPool声音?

android - Android通知时间

android - 每天12小时重复通知

java - Android Wear表盘旋转留下痕迹

android - 从服务发送的广播接收器开始活动时,应用程序崩溃

android - Android:威胁不是Activity或BroadcastReceiver的类中的隐式意图

android - 计划通知Android

android - 如何使用代码确定设备屏幕大小类别(小,普通,大,xlarge)?