AndroidRuntime: java.lang.IllegalThreadStateException
时间: 2024-08-28 10:03:01 浏览: 114
`java.lang.IllegalThreadStateException` 是 Java 中的一个运行时异常,它表示线程的状态不允许执行请求的操作。在 Android 开发中,如果你尝试执行一个不恰当的线程操作,例如错误地启动一个已经运行的线程,就可能会遇到这个异常。
举个例子,如果你尝试用 `start()` 方法来启动一个已经处于 `RUNNABLE` 或 `RUNNING` 状态的线程,就会抛出 `IllegalThreadStateException`。同样,如果线程已经完成执行(处于 `TERMINATED` 状态),再次调用 `start()` 方法也会抛出这个异常。
处理这个异常通常意味着需要仔细检查线程的使用逻辑,确保在调用 `start()`、`stop()` 或其他可能抛出 `IllegalThreadStateException` 的方法之前,线程的状态是合适的。
相关问题
Android报错:05-18 20:38:33.827 8650 8667 E AndroidRuntime: FATAL EXCEPTION: FinalizerWatchdogDaemon 05-18 20:38:33.827 8650 8667 E AndroidRuntime: Process: com.tcl.MultiScreenInteraction_TV, PID: 8650 05-18 20:38:33.827 8650 8667 E AndroidRuntime: java.util.concurrent.TimeoutException: com.android.internal.os.BinderInternal$GcWatcher.finalize() timed out after 10 seconds 05-18 20:38:33.827 8650 8667 E AndroidRuntime: at android.os.BinderProxy.transactNative(Native Method) 05-18 20:38:33.827 8650 8667 E AndroidRuntime: at android.os.BinderProxy.transact(BinderProxy.java:566) 05-18 20:38:33.827 8650 8667 E AndroidRuntime: at android.app.IActivityTaskManager$Stub$Proxy.releaseSomeActivities(IActivityTaskManager.java:5695) 05-18 20:38:33.827 8650 8667 E AndroidRuntime: at android.app.ActivityThread$1.run(ActivityThread.java:7547) 05-18 20:38:33.827 8650 8667 E AndroidRuntime: at com.android.internal.os.BinderInternal$GcWatcher.finalize(BinderInternal.java:60) 05-18 20:38:33.827 8650 8667 E AndroidRuntime: at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:291) 05-18 20:38:33.827 8650 8667 E AndroidRuntime: at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:278) 05-18 20:38:33.827 8650 8667 E AndroidRuntime: at java.lang.Daemons$Daemon.run(Daemons.java:139) 05-18 20:38:33.827 8650 8667 E AndroidRuntime: at java.lang.Thread.run(Thread.java:923)
这个错误是因为 FinalizerWatchdogDaemon 线程在执行 com.android.internal.os.BinderInternal$GcWatcher.finalize() 方法时,耗时超过了 10 秒,导致了 TimeoutException 异常的抛出。解决这个问题的方法可以参考以下几种:
1. 尝试升级 Android 系统版本,因为一些旧版本的 Android 系统可能存在该问题。
2. 检查你的代码是否存在内存泄漏问题,如果存在内存泄漏问题,可能导致垃圾回收器无法及时回收内存,从而导致 FinalizerWatchdogDaemon 线程超时。
3. 通过增加 FinalizerWatchdogDaemon 线程的超时时间来解决问题。在 Android 应用启动时,可以通过以下代码设置线程的超时时间:
```
System.setProperty("sun.misc.finalizer.timeout", "1000");
```
上面的代码将线程的超时时间设置为 1 秒。但请注意,这种解决方法并不推荐,因为它只是掩盖了问题而不是解决问题。
06-08 10:58:36.121 1815 1815 E AndroidRuntime: Process: com.android.settings, PID: 1815 06-08 10:58:36.121 1815 1815 E AndroidRuntime: java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.supplicant.STATE_CHANGE flg=0x10 (has extras) } in com.android.settings.m8settings.receiver.WifiReceiver@41c8a5c 06-08 10:58:36.121 1815 1815 E AndroidRuntime: at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$android-app-LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1830) 06-08 10:58:36.121 1815 1815 E AndroidRuntime: at android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(Unknown Source:2) 06-08 10:58:36.121 1815 1815 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:942) 06-08 10:58:36.121 1815 1815 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99) 06-08 10:58:36.121 1815 1815 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201) 06-08 10:58:36.121 1815 1815 E AndroidRuntime: at android.os.Looper.loop(Looper.java:288) 06-08 10:58:36.121 1815 1815 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8061) 06-08 10:58:36.121 1815 1815 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 06-08 10:58:36.121 1815 1815 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:703) 06-08 10:58:36.121 1815 1815 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911) 06-08 10:58:36.121 1815 1815 E AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.wifi.SupplicantState.name()' on a null object reference 06-08 10:58:36.121 1815 1815 E AndroidRuntime: at com.android.settings.m8settings.receiver.WifiReceiver.onReceive(WifiReceiver.java:46) 06-08 10:58:36.121 1815 1815 E AndroidRuntime: at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$android-app-LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1820) 06-08 10:58:36.121 1815 1815 E AndroidRuntime: ... 9 more
这是一个Android应用程序崩溃的日志信息。它显示了应用程序在接收广播时发生了异常。具体来说,这个应用程序在接收一个名为“android.net.wifi.supplicant.STATE_CHANGE”的广播时崩溃了。这个广播通常是由Android系统在Wi-Fi状态发生变化时发送的。根据日志信息,这个应用程序似乎有一个名为“WifiReceiver”的接收器,它在接收到这个广播时崩溃了。导致这个崩溃的原因是一个空指针异常,它发生在尝试调用一个空对象的方法时。具体来说,它发生在尝试调用一个名为“name()”的方法时,这个方法属于一个名为“SupplicantState”的对象,但是这个对象是空的。这个错误可能是由于代码中的逻辑错误或者异常条件引起的。
阅读全文