【发布时间】:2014-01-22 02:52:21
【问题描述】:
我对 Android KitKat 和 Alarm Manager 有一个大问题。
我所有的应用程序都使用始终在后台运行的服务,而不会被 Android 杀死。
在 Android 4.4 KitKat 之前,我发现的解决方案是通过 AlarmManager 触发的 BroadcastReceiver 启动服务。
...
Intent intent = new Intent(c, MyReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(c, 0, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager am = (AlarmManager) c.getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT<Build.VERSION_CODES.KITKAT) {
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), pendingIntent);
} else {
setAlarmFromKitkat(am, System.currentTimeMillis(), pendingIntent);
}
...
@TargetApi(19)
private static void setAlarmFromKitkat(AlarmManager am, long ms, PendingIntent pi){
am.setExact(AlarmManager.RTC_WAKEUP, ms, pi);
}
...
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, MyService.class);
context.startService(service);
}
}
通过这个解决方案在 Android 4.4 KitKat 上我可以启动服务,但一段时间后 Android 会杀死它!
有没有办法让服务在后台运行而不会被 Android 4.4 KitKat 杀死?
非常感谢
【问题讨论】:
-
后台服务获取问题与AlarmManager 无关。请参阅以下问题stackoverflow.com/q/20636330
-
忽略我之前的评论。看看这个答案:stackoverflow.com/a/21157035/624109
标签: android service alarmmanager android-4.4-kitkat kill-process