Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在主线程中不执行代码的情况下使粘性服务保持活动状态?_Java_Android_Service_Event Handling - Fatal编程技术网

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()
查看此