0

在我的应用程序上,我想每隔几分钟执行一次任务,为此我添加了一个警报管理器以在经过的时间上运行。代码很简单:

    AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(this, OnAlarmReceiver.class);
    PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);

    mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() + 1000 /* Initial run in 1 second */,
            OnBootReceiver.REPEAT_PERIOD, /* 10 minutes */
            pi);

当然我有广播接收器:

public class OnBootReceiver extends BroadcastReceiver {
     //implementation here
}

我在我的应用程序的主要活动和广播(OnBootReceiver)中运行此代码,以确保我的代码在应用程序启动和每次启动时运行。

我的问题是操作系统何时关闭 bg 应用程序。如果我转到任务管理器并运行清除内存命令,我的应用程序将关闭并且我没有收到任何警报通知。

在这种情况下,我如何继续在我的代码上接收警报通知?

4

2 回答 2

2

如果我转到任务管理器并运行清除内存命令,我的应用程序将关闭并且我没有收到任何警报通知。

由于标准 Android 中不存在“清除内存命令”,因此该功能的精确实现只有您的设备制造商才能知道。

在这种情况下,我如何继续在我的代码上接收警报通知?

可能你没有。最有可能的是,设备制造商正在做一些强制停止在“设置”中所做的事情,包括取消安排你的闹钟。您可以通过在“运行清除内存命令”之前和之后运行来确认这个理论,adb shell dumpsys alarm以查看警报发生了什么变化。

请注意,即使在缺少“清除内存命令”的设备上,用户也可以从“设置”中强制阻止您,并删除您的警报。

于 2012-12-11T18:23:38.777 回答
0

尝试这个:

对于您的活动,在清单 xml 中,输入:

android:persistent="true"

编辑:

请参阅此链接:https ://groups.google.com/forum/#!topic/android-platform/nU0e3aoBlSY和 http://developer.android.com/reference/android/app/Service.html#startForeground%28int ,%20android.app.Notification%29

于 2012-12-11T18:25:56.053 回答