Тысячи java.util.concurrent.TimeoutException: android.os.BinderProxy.finalize() превысили тайм-аут после 10-секундных исключений в сбоях
Прежде всего, спасибо заранее.... я надеюсь, что вы можете мне помочь, я немного потерян в этом.
Я спрашиваю здесь, кроме того, что об этом говорится в потере тем, потому что я не нахожу здесь решения ни в Интернете... Кажется, это происходит на 99% на устройствах Samsung, начиная с версии 4.2. И я действительно надеюсь, что я не первый, кто спрашивает об этом, и вы можете дать мне ответ, что бы это ни было хорошо или плохо:). Но я не знаю, является ли это проблема Samsung или вообще, я также видел это в других устройствах, но только несколько сбоев... в Samsung тысячи... ¿?¿?
В наших приложениях интегрированы аварийные сбои, и некоторое время назад мы начали получать различные сбои, но мы даже не знаем, настоящие ли они сбои или нет. Исключением является бросок:
Fatal Exception: java.util.concurrent.TimeoutException
com.android.internal.os.BinderInternal$GcWatcher.finalize() timed out after 10 seconds
Это происходит в разных объектах: BinderInternal
, Binder
, NativeDecimalFormat
, BinderProxy
, CloseGuard
, WindowsCursor
и т.п.
Этого не было раньше... и когда я пытаюсь посмотреть в интернете, я просто получаю много людей, но нет решения.
Мой самый большой страх.... когда это происходит? сбивает людей при использовании приложения или просто в фоновом режиме? происходит сбой с сообщением Android OS "приложение внезапно остановилось"? или что-то внутреннее я могу "игнорировать"?
Происходит ли это все дни много раз каждый день, постоянно ли это... но мы все равно не можем воспроизвести это....... вы знаете, что это?
Я даю вам несколько ссылок, они говорят о проблеме сборщика мусора, или плохой финализации / проблема интернет-звонка....
1 ответ
Мы решили проблему, остановив FinalizerWatchdogDaemon
,
public static void fix() {
try {
Class clazz = Class.forName("java.lang.Daemons$FinalizerWatchdogDaemon");
Method method = clazz.getSuperclass().getDeclaredMethod("stop");
method.setAccessible(true);
Field field = clazz.getDeclaredField("INSTANCE");
field.setAccessible(true);
method.invoke(field.get(null));
}
catch (Throwable e) {
e.printStackTrace();
}
}
Вы можете вызвать метод в жизненном цикле приложения, например, attachBaseContext()
, По той же причине вы также можете указать производителя телефона, чтобы решить проблему, решать только вам.