Java 如何在主线程中不执行代码的情况下使粘性服务保持活动状态?
我的应用程序有一个服务,即使在用户关闭它(通过刷走)后,它也需要保持活动状态。我的服务每秒以并行线程打印日志消息 虽然它返回Java 如何在主线程中不执行代码的情况下使粘性服务保持活动状态?,java,android,service,event-handling,Java,Android,Service,Event Handling,我的应用程序有一个服务,即使在用户关闭它(通过刷走)后,它也需要保持活动状态。我的服务每秒以并行线程打印日志消息 虽然它返回START\u STICKY,但一旦用户关闭应用程序,它就会被终止。以下是我的onStartCommand方法: public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); instance
START\u STICKY
,但一旦用户关闭应用程序,它就会被终止。以下是我的onStartCommand
方法:
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
instance = this;
Log.i("Service", "started");
new Thread(() -> {
int i = 0;
while (true) {
Log.i("Service", "#" + ++i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
start_recording(null);
return START_STICKY;
}
我也在舱单上声明过:
<service
android:name=".MyService"
android:stopWithTask="false"
/>
如何防止系统在应用程序退出时终止线程?没有其他SO帖子为我提供了有效的解决方案。基于:
当一个应用程序进入后台时,它有一个包含多个窗口的窗口
仍允许创建和使用服务的分钟数。在
该窗口结束时,应用程序被视为空闲看看这个
随着时间的推移,系统会停止应用程序的后台服务,就像
应用程序调用了服务的Service.stopSelf()方法
从Android O开始
OS对后台服务的执行自由度实施了若干限制。应用程序退出X分钟后,服务将终止,就像调用了stopSelf()
一样。如果你还想继续下去,你需要使用<代码>前台服务< /代码>,但是你需要考虑对电池寿命的影响。如果您执行CPU密集型工作,则使用ForegroundService
将无济于事
您可以参考我在本文中的答案了解更多详细信息。可能
keepAlive
变为false?不,它只在ondestory()中变为false。
。假设总是真的,你在使用哪个操作系统版本?@Sagar安卓8.1谢谢。我只是有个问题:ForegroundService不是一个我可以扩展的类。如何创建前台服务?您需要将其扩展为普通服务。它的命名方式改变了。您将调用startService()
而不是调用startForegroundService()
查看此