一、JDK版本兼容问题

java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor version 52.0
某些东西包或类需要更高的JDK版本
buildToolsVersion '24.0.0' 需要JDK 1.8
二、布局填充异常
2.构造函数问题:自定义一个View,必须派生实现基类View的三个构造函数
3.编译的中间文件没有清理干净:第三种就是你在原生系统代码的编译环境下编译APK之后,特别是修改了XML
4.找不到资源文件:我原来在2.3的原生系统增加动态壁纸的时候,动态壁纸一跑起来就出这个异常,然后crash,当时就是因为找不到drawable的资源文件,于是当时我把drawable的hdpi或nodpi等文件夹的图片资源都拷贝一份到drawble下,问题解决(
三、Activity的onCreate()方法(不同API,注意参数问题)
W/System.err: java.lang.NoClassDefFoundError: android/os/PersistableBundle
W/System.err: at java.lang.Class.getDeclaredMethods(Native Method)
W/System.err: at java.lang.Class.getDeclaredMethods(Class.java:656)
W/System.err: at de.greenrobot.event.SubscriberMethodFinder.findSubscriberMethods(SubscriberMethodFinder.java:75)
W/System.err: at de.greenrobot.event.EventBus.register(EventBus.java:163)
W/System.err: at de.greenrobot.event.EventBus.register(EventBus.java:133)
然后我又用自己的测试机试了下没问题(Version:5.0.2),然后又使用crash的测试手机(Version:4.4),乖乖,居然是4.4才会出现的情况!
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
}
Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
注意在写Activity的时候,如果使用了public 两个Bundle参数的方法,那么在4.4的机器上就会出现crash的情况!
至于为撒就还没有去细究,本质上,两个参数的其实还是走的一个参数的方法。。
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) { onCreate(savedInstanceState); }
注意点:在方法覆写时必须考虑到权限问题,即:被子类覆写的方法不能拥有比父类方法更加严格的访问权限。
所以在写这些回调的时候不要马虎大意了,记得是复写protected开头的!!!
四、RecycleView滑动的时候,程序崩掉
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
//checkbox view listener
viewHolder.getCheckbox().setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//update list items
notifyDataSetChanged();
}
});
}
程序会报以下错误
这个异常出现在在onBindViewHolder方法里调用notifyDataSetChanged刷新的时候。
解决方法:
stackoverflow里也给出了解释:
onBindViewHolder方法不是用来初始化viewholder的,这个方法是用来刷新每一个recycler item的。所以在onBindViewHolder里的某些组件里的事件方法做notifyDataSetChanged,onBindViewHolder就会频繁执行
解决方法很简单,就是将这些事件方法从onBindViewHolder分离出来。具体代码,stackoverflow
1、在ViewHolder中setOnCheckChangeListener(this);
private boolean onBind;
public ViewHolder(View itemView) {
super(itemView);
mCheckBox = (CheckBox) itemView.findViewById(R.id.checkboxId);
mCheckBox.setOnCheckChangeListener(this);
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(!onBind) {
// your process when checkBox changed
// ...
notifyDataSetChanged();
}
}
...
@Override
public void onBindViewHolder(YourAdapter.ViewHolder viewHolder, int position) {
// process other views
// ...
onBind = true;
viewHolder.mCheckBox.setChecked(trueOrFalse);
onBind = false;
}
2、当然,用setOnClickListener()也可以。
五、Jar包包含同样的文件
android { compileSdkVersion 23 buildToolsVersion '23.0.2' packagingOptions { exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' }
六、使用Toolbar报错
1、Error inflating android.support.v7.widget.Toolbar
在开发中,一直没怎么关注各种support包的具体版本号,在此次的版本中,我们使用了
<wiz_code_mirror>
compile 'com.android.support:appcompat-v7:23.2.0'
结果就在某些(绝大多数)机型上都无法运行,而且报以上两个错误,可用
compile 'com.android.support:appcompat-v7:23.4.0'
七、内存资源泄露

八、Butter Knife查找不存在的id
导致unable to bind views for activity

例如:在使用Navigation

九、导入项目报错
十、setText()设置了int类型

十、动态添加控件不能多次添加
