Android 即使在内存压力较低的情况下,这是保持服务活动的正确方法吗?

Android 即使在内存压力较低的情况下,这是保持服务活动的正确方法吗?,android,android-service,low-memory,Android,Android Service,Low Memory,我使用以下代码使服务保持活动状态: @Override public int onStartCommand(Intent intent, int flags, int startId) { ... keepServiceAlive(this, 2222); return super.onStartCommand(intent, flags, startId); } @SuppressWarnings("deprecation") public void keepServi

我使用以下代码使服务保持活动状态:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    ...
    keepServiceAlive(this, 2222);
    return super.onStartCommand(intent, flags, startId);
}
@SuppressWarnings("deprecation")
public void keepServiceAlive(Service service, int id) {
    Notification note = new Notification(0, null, System.currentTimeMillis());
    note.flags |= Notification.FLAG_NO_CLEAR;        
    service.startForeground(id, note);
}

但有时服务仍然被杀。您能帮我确认这段代码的正确性吗,或者您能提供更好的解决方案吗?

您不应该创建格式错误的
通知
对象。Android 4.3现在将在检测到此黑客行为时向用户显示自己的
通知
,并通知用户您的服务正在运行。如果你真的需要它在前台,给它一个合适的图标,让你的用户知道你的服务,并解释为什么它是必要的。您甚至可以考虑允许它们决定是否通过SyrdPoasyServices作为前台服务运行。


请参见

您不应创建格式错误的
通知
对象。Android 4.3现在将在检测到此黑客行为时向用户显示自己的
通知
,并通知用户您的服务正在运行。如果你真的需要它在前台,给它一个合适的图标,让你的用户知道你的服务,并解释为什么它是必要的。您甚至可以考虑允许它们决定是否通过SyrdPoasyServices作为前台服务运行。


请参见

,这是有道理的。但这里的关键问题是:您的建议是否会提供更多的机会使其在内存不足的情况下保持活动状态?
startForeground()。我想如果你真的想,你可以运行一个重复的警报,触发启动服务的意图,因此如果它被杀死,它将在下一个警报时重新启动。我会认真考虑你是否真的需要这样做,因为这可能是用户想要关闭的东西,或者不是那么持久。这是有道理的。但这里的关键问题是:您的建议是否会提供更多的机会使其在内存不足的情况下保持活动状态?
startForeground()。我想如果你真的想,你可以运行一个重复的警报,触发启动服务的意图,因此如果它被杀死,它将在下一个警报时重新启动。我会认真考虑你是否真的需要这样做,因为这可能是用户想要关闭的东西,或者不是那么持久。