OPPO崩溃问题解决
在APM上监控到一个高频cash,如下
崩溃线程
FinalizerWatchdogDaemon
Caused by: java.util.concurrent.TimeoutException: android.content.res.AssetManager$AssetInputStream.finalize() timed out after 10 seconds
at android.content.res.AssetManager$AssetInputStream.close(AssetManager.java:606)
at android.content.res.AssetManager$AssetInputStream.finalize(AssetManager.java:639)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:198)
at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:177)
at java.lang.Thread.run(Thread.java:818)
主线程
main
at android.content.res.AssetManager.isUpToDate(Native Method)
at android.app.ActivityThread.getPackageInfo(ActivityThread.java:1938)
at android.app.ActivityThread.getPackageInfoNoCheck(ActivityThread.java:1912)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1459)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:159)
at android.app.ActivityThread.main(ActivityThread.java:5541)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:975)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)
最后找到大神文章
https://blog.csdn.net/qq_17766199/article/details/84789495
解决方案:
private void fixOPPOVersionCash(){
//需要修复的版本号
String[] versionPre ={"6.0.1","5.1.1","5.1"};
String version = DeviceUtils.getSystemVersion();
BestLog.d("DeviceUtils.getSystemVersion()="+version);
if(!Arrays.asList(versionPre).contains(version)){
return;
}
String deviceModel = Utils.getDeviceModel();
BestLog.d("Utils.getDeviceModel()="+deviceModel);
if(!TextUtils.isEmpty(deviceModel)){
if(deviceModel.contains("OPPO")){
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 (Exception e) {
e.printStackTrace();
}
}
}
}