我创建了一个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会在应用程序被杀死时继续工作?
由于
答案 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
作为“很高兴”的能力,而不是你可以依赖的东西。