Android 在需要时启动和停止服务器

Android 在需要时启动和停止服务器,android,kotlin,ktor,Android,Kotlin,Ktor,嗨,我正在制作一个android应用程序,在后台运行ktor服务器。应根据情况打开和关闭服务器。 我使用Jetty创建了一个带有嵌入式服务器的singleton。然后我打电话 embeddedServerKt.start(wait = false) 问题是,当我关闭并重新打开服务器时,会发生这种情况 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.service.rcarniproducts.debug, PID: 15768

嗨,我正在制作一个android应用程序,在后台运行ktor服务器。应根据情况打开和关闭服务器。 我使用Jetty创建了一个带有嵌入式服务器的singleton。然后我打电话

embeddedServerKt.start(wait = false)
问题是,当我关闭并重新打开服务器时,会发生这种情况

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.service.rcarniproducts.debug, PID: 15768
    java.util.concurrent.RejectedExecutionException: event executor terminated
        at io.netty.util.concurrent.SingleThreadEventExecutor.reject(SingleThreadEventExecutor.java:926)
        at io.netty.util.concurrent.SingleThreadEventExecutor.offerTask(SingleThreadEventExecutor.java:353)
        at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java:346)
        at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:828)
        at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:818)
        at io.netty.channel.AbstractChannel$AbstractUnsafe.register(AbstractChannel.java:483)
        at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:87)
        at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:81)
        at io.netty.channel.MultithreadEventLoopGroup.register(MultithreadEventLoopGroup.java:86)
        at io.ktor.server.netty.EventLoopGroupProxy.register(Unknown Source:2)
        at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:323)
        at io.netty.bootstrap.AbstractBootstrap.doBind(AbstractBootstrap.java:272)
        at io.netty.bootstrap.AbstractBootstrap.bind(AbstractBootstrap.java:268)
        at io.netty.bootstrap.AbstractBootstrap.bind(AbstractBootstrap.java:253)
        at io.ktor.server.netty.NettyApplicationEngine.start(NettyApplicationEngine.kt:177)
        at com.service.rcarniproducts.WebServer.start(WebServer.kt:57)
        at com.service.rcarniproducts.ui.EditProductsBottomSheet.onViewCreated(EditProductsBottomSheet.kt:49)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:332)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
        at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2169)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1992)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
        at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:233)
        at android.app.ActivityThread.main(ActivityThread.java:8010)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)

有没有办法在不出现此错误的情况下打开和关闭服务器?

我假设您无法再次启动同一台服务器。关闭后,它处于永久停止状态。您可以非常轻松地使用
embeddedServer()
创建一个新服务器。我创建了一个问题来解决这个问题。作为一种解决方法,您可以按照@broot的建议重新创建服务器以再次启动它。