我的应用程序有一项服务,即使在用户关闭它之后也需要保持活动状态(通过轻扫它)。我的服务每秒在并行线程中打印日志消息。
虽然它确实返回START_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帖子为我提供了有效的解决方案。
答案 0 :(得分:1)
当应用进入后台时,它有几个窗口 仍允许创建和使用服务的分钟数。在 该窗口结束时,该应用程序被视为空闲。 在这 时间,系统停止应用程序的后台服务,就好像 app调用了服务'Service.stopSelf()方法。
从Android O
操作系统开始,对可以自由执行后台服务的情况实施了若干限制。应用程序退出后X分钟,服务将被终止,就像调用stopSelf()
一样。如果您仍想继续,则需要使用ForegroundService
,但需要考虑对电池寿命的影响。如果您执行CPU密集型工作,那么使用ForegroundService
将无济于事。
有关详细信息,请参阅此SO中的答案。