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)
时间: 2023-11-27 09:49:24 浏览: 204
这个错误是因为 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 秒。但请注意,这种解决方法并不推荐,因为它只是掩盖了问题而不是解决问题。
相关问题
E/AndroidRuntime: FATAL EXCEPTION: Thread-25
"E/AndroidRuntime: FATAL EXCEPTION: Thread-25" 表示在Android应用程序的某个线程(Thread-25)上发生了一个致命的异常。这种情况通常会导致应用程序崩溃。具体的异常信息可以在日志中找到,通常会包含异常类型、异常堆栈信息和异常发生的位置等信息。在处理这种情况时,可以根据异常信息来分析问题所在,然后进行修复。常见的处理方式包括捕获异常、增加异常处理代码、修改程序逻辑等。另外,也可以使用调试工具来帮助定位问题。
E/AndroidRuntime: FATAL EXCEPTION: Thread-2 Process: com.example.petgrowing, PID: 19678
这个错误通常是由于在非 UI 线程上访问 UI 元素而引发的。在 Android 中,UI 元素只能在主线程上更新,因此如果在非 UI 线程上更新 UI 元素,就会抛出这个异常。
在这个问题的代码中,使用了一个新线程来进行网络请求,然后在该线程中更新了 UI 线程上的 TextView。这样会导致在非 UI 线程上更新 UI 元素,从而引发了该异常。
为了解决这个问题,可以使用 `runOnUiThread` 方法来在 UI 线程上更新 TextView 的内容。具体来说,可以将获取到的数据作为参数传递给 `runOnUiThread` 方法,并在该方法中更新 TextView 的内容,如下所示:
```
new Thread(() -> {
try {
// 进行网络请求,获取数据
Document doc = Jsoup.connect("https://chl.cn/?jinri").get();
Elements tables = doc.getElementsByTag("table");
Element table1 = tables.first();
Elements tds = table1.getElementsByTag("td");
Element td1 = tds.first();
Element td2 = tds.get(4);
final String retStr = ("1:" + td1.text() + " 2:" + td2.text());
// 在 UI 线程上更新 TextView 的内容
runOnUiThread(() -> {
show.setText(retStr);
});
} catch (IOException e) {
e.printStackTrace();
}
}).start();
```
这样就可以在 UI 线程上更新 TextView 的内容,从而避免了在非 UI 线程上访问 UI 元素的问题。
阅读全文