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

原文 标签 android broadcastreceiver alarmmanager

我目前在集成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都会因年龄过长而终止您的服务,因此,如果您想要一个可靠且稳定的应用程序,则无论如何都需要重新设计。

相关文章:

android - Android:如何设置通知的辅助图标?

android - 需要创建一个后台服务,以便在互联网可用时上传数据

android - 如果应用程序正在运行,则在BroadcastReceiver中显示对话框

android - Intent在IntentService中仅缺少一些额外功能

android - 应用程序启动时的日期更改检测-Android

android - Android后台服务和警报

android - 在Android中显示对话框时处理Back键

java - 不能在Android Studio上使用其他语言(英语除外)

android - 使用USB将数据从Tablet应用程序传递到PC

java - AlarmManager setRepeating()