Skip to content

[Android] EmbeddedNodeService NetworkOnMainThreadException 崩溃 - 启动永远卡在「已检测 N 次」 #309

@xiaozeng1314

Description

@xiaozeng1314

问题描述

安装 InkOS Studio v1.5.0-apk.2 后,首次启动永远停留在「正在启动本机 Node 后端」,检测次数持续增长但永远无法进入主界面。

版本信息

  • 包名:io.qzz.christmas.inkoslocal
  • 版本号:v1.5.0-apk.2 (versionCode=14)
  • 设备:Android arm64

根因

EmbeddedNodeService.canConnectToNode() 在主线程执行了 new Socket().connect(),触发 NetworkOnMainThreadException,导致 Service 反复崩溃,前端永远收不到就绪通知。

logcat 崩溃栈

AndroidRuntime: FATAL EXCEPTION: main
Process: io.qzz.christmas.inkoslocal:node
java.lang.RuntimeException: Unable to start service io.qzz.christmas.inkoslocal.EmbeddedNodeService
  with Intent { act=io.qzz.christmas.inkoslocal.RESTART_NODE }:
  android.os.NetworkOnMainThreadException
Caused by: android.os.NetworkOnMainThreadException
  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork
  at java.net.Socket.connect(Socket.java:646)
  at io.qzz.christmas.inkoslocal.EmbeddedNodeService.canConnectToNode(r8:17)
  at io.qzz.christmas.inkoslocal.EmbeddedNodeService.restartNodeIfNeeded(r8:33)
  at io.qzz.christmas.inkoslocal.EmbeddedNodeService.onStartCommand(r8:53)

建议修复

canConnectToNode() 中的网络操作移出主线程,例如用 AsyncTask、Kotlin coroutines 或 Handler.post() 包装;或在 onStartCommand 中先返回 START_STICKY,再异步执行健康检查。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions