首页 文章

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

提问于
浏览
1

我创建了一个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

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

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

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

    您可以使用 adb shell dumpsys alarm 命令确定您的警报是否真正未计划 .

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

    另请注意,在Android M上,your app will not run very much in the background anyway . 考虑使用 AlarmManager 作为"nice to have"类型的功能,而不是您可以依赖的功能 .

相关问题