改上线崩溃异常总结

来源:互联网 发布:软件下载任务中国 编辑:程序博客网 时间:2024/06/08 14:38

一、吐槽

项目大版本一上线,然后我们公司买了崩溃监测的平台,一看一大串英文,一大串log,头疼,现在也改得头疼,不过差不多都已经解决了。

二、总结

1.1.问题描述

Caused by: java.lang.NullPointerExceptionat com.zhubajie.app.main_frame.UserCenterFragmentNew.d(Unknown Source)at com.zhubajie.app.main_frame.UserCenterFragmentNew.g(Unknown Source)at com.zhubajie.app.main_frame.UserCenterFragmentNew.d(Unknown Source)at com.zhubajie.app.main_frame.v.onReceive(Unknown Source)at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:763)
1.2.解决办法

定位到代码的地方发现:

mNickName.setText(userinfo.getNickname());

大概就是说userinfo.getNickname()可能为空,这样就导致错误。解决办法就是再实体类修改:

public String getNickname() {return nickname;}
把return nickname;改成return nickname == null ? "": nickname;

2.1问题描述

java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{42ed6e60 V.E..... R.....I. 0,0-960,1845} not attached to window manager

2.2解决办法

就是在dialog,dismiss的时候,它所依附的activity可能会null或者正在消失,你需要进行判断。

  if (dialog != null && dialog.isShowing() && mActivity != null && !mActivity.isFinishing()) {            dialog.dismiss();        }
3.1问题描述

Caused by: java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x12

3.2解决办法

注意你的布局文件中,margin好像低版本不兼容,可以改为padding。另外也有可能是api的兼容性,比如button.setBackground();低版本会不兼容。需要改为button.setBackgroundDrawable();其实进入setBackground()的源码,你可以发下基本都是用的setBackgroundDrawable()这个方法。

4.1问题描述

android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@28d6a16c is not valid; is your activity running?

4.2解决办法

因为new对话框的时候,参数content 指定成了this,即指向当前子Activity的content。但子Activity是动态创建的,不能保证一直存在。其父Activity的content是稳定存在的,将content替换为getParent()即可。

三、注意事项:

dialog在创建new,show,dismiss的时候都要考虑到所依附的activity为null或者正在结束的情况。


欢迎关注个人微信公众号,专注于Android深度文章和移动前沿技术分享




1 0
原创粉丝点击