即使应用程序被任务管理器杀死,是否可以执行重复任务?

时间:2015-06-13 18:14:03

标签: android broadcastreceiver alarmmanager

我创建了一个AlarmManager来调用BroadcastReceiver,每隔INTERVAL秒向服务器发出一次请求。

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
PendingIntent intent = PendingIntent.getBroadcast(this, 0, new Intent(this, SendLogReceiver.class), 0);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000, intent);

这是BroadcastReceiver:

public class SendLogReceiver extends BroadcastReceiver {
    private static final String TAG = SendPositionReceiver.class.getSimpleName();

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "Sending position to server");
    }
}

即使应用程序处于后台也能正常工作,但是当我通过任务管理器(通过滑动)关闭应用程序时,AlarmManager会死机,并且不会再收到任何信号。

有没有办法实现这个BroadcastReceiver会在应用程序被杀死时继续工作?

由于

1 个答案:

答案 0 :(得分:0)

我不知道你指的是什么“任务管理器”。

标准的Android最新任务列表以及从Play商店获得的第三方任务管理器不会影响计划的警报。

似乎有一些设备,其中设备制造商预先安装了一些单独的“任务管理器”应用程序,其中该应用程序相当于通常只能通过应用程序中的按钮执行的“强制停止”设置中的页面。如果用户“强制停止”应用程序,则所有警报都是未调度的,并且应用程序将不再运行,直到用户从主屏幕启动器手动运行它。关于这一点你无能为力,尽管欢迎你向你的设备制造商抱怨他们的开发人员是那些容易做“强制停止”的白痴。

您可以使用 adb shell dumpsys alarm 命令来确定您的闹钟是否真正未计划。

请记住,在Android 5.1上,不支持1000毫秒的轮询周期。任何小于60000ms的东西都会被舍入到60000ms。

另请注意,在Android M上your app will not run very much in the background anyway。考虑使用AlarmManager作为“很高兴”的能力,而不是你可以依赖的东西。