后台服务运行的Android AlarmManager和BroadcastReceiver

标签 android broadcastreceiver alarmmanager

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

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

最佳答案

Im my app, I'm running a background service that runs regardless that app is running or not.

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

My main issue is on how to set the AlarmManager to call thisReceiver everytime it's set. Any idea?

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

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

关于后台服务运行的Android AlarmManager和BroadcastReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7212109/

相关文章:

Android Gradle 实现与 CompileOnly 性能

java - 无法读取 rss XML,使用简单 XML 和 Retrofit

java - ormlite 创建列顺序错误的表

java - 如何使用 AlarmManager 将闹钟设置为每个月的第一个星期四

android - AlarmManager 过早触发 PendingIntent

java - 在 Android 上的 Javafx 中使用 FileChooser 时出错

java - BroadcastReceiver问题

Android 在锁屏时执行功能

android - 使用 AlarmManager 广播以调用 Activity

android - 服务、IntentService、BroadcastReceiver 还是 AlarmManager?