Exception log:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:310) at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:279) at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:253) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)Common solution:
Activity extends AppCompatActivityActivity apply style theme (Theme.AppCompat(or descendant))奇葩说
common solution根本不奏效,最后改了version code、version name,。。。没问题了,wtf
奇葩重现
集成sophix热修复,打包,当前版本1.0.0 — test-1.0.0.apk(bug版本)修复bug,发布1.0.0补丁不更改version code、version name,接着开发,打包,当前版本1.0.0 — fix-1.0.0.apk(稳定版)这是基本上是稳定复现bug奇葩解说
比对两个版本apk差别在于一个修复bug,一个没修复bug没有修复的版本正常,修复的版本不正常没有修复的版本加载补丁后,正常修复bug;修复的版本因为还是1.0.0版本所以还是会加载补丁,加载补丁干嘛用?用来修复,可是bug已经修复了,所以导致activity异常Exception log:
无Common solution:
通常是由滑动冲突造成,所以关键还是在于怎么解决滑动冲突,网上很多什么继承RecyclerView,重写dispatchTouchEvent等等,这边就不多解释了现在compat的view基本上都解决了滑动冲突的问题,所以很可能就没这个问题,具体还得看你的compat包是什么版本的奇葩说
同样的common solution根本不奏效,最后给子RecyclerView设置了recyclerView.setFocusable(false);,居然可以了,我什么也没干 →_→
奇葩重现
可下拉刷新的recyclerview 嵌套recyclerview奇葩解说
有点不好解释。。下拉刷新时,经过调试发现,其实下拉刷新的布局高度是有改变的,但是效果不见了观察下拉时有一小段高度不是完全没有,由此可见,是子recyclerview抢走了父recyclerview的事件下拉刷新的时候,人为都做了哪些操作,click、focus、touch down、 touch move,关键在于focus和touch move尝试更改子recyclerview的focus,你会发现setFoucsable(false)解决了这个问题有的时候知其然就可,因为讲的太啰嗦了。。 要想知其所以然,可以去看看dispatchTouchEvent和onTouchEvent方法╰( ̄▽ ̄)╮Exception log:
无Common solution:
硬件加速关闭,导致不显示圆角效果,将android:hardwareAccelerated=”false”移除奇葩说
原项目,使用cardview切圆角,布局代码
<android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="200dp" app:cardCornerRadius="100dp"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" android:src="@drawable/test_thumb"/> </android.support.v7.widget.CardView>效果:
新建项目,布局增加代码
效果:
奇葩重现
全局添加android:hardwareAccelerated=”true”Exception log:
无Common solution:
adb kill-server adb start-server 关闭重启adb服务卸载手机助手之类的软件,然后重启服务选中对应手机设备奇葩说
华为手机只打印部分系统日志,应用日志都不打印/只打印某些级别的日志
奇葩重现
在测试菜单中关闭LOG级别的日志奇葩解说
由于华为系统默认关闭Log.d及以下的日志解决方案: 在拨号界面输入:##2846579## 进入测试菜单界面。 Project Menu–后台设置–LOG设置LOG开关–LOG打开 LOG级别设置–VERBOSE Dump&Log– 全部选中重启手机(这一步不一定要做)Exception log:
Signal 11(SIGSEGV),code 1(SEGV_MAPERR)fault addr 0xcb74000Common solution:
if (mTts.isSpeaking()) { mTts.destroy(); }奇葩说
由于调用destory方法后,会导致不稳定crash并不是每次都crash奇葩重现
开启语音,等待语音读完,关闭页面并调用mTts.destroy();奇葩解说
这是科大讯飞的1101和1102版本中存在的问题,更换版本即可(1111及以上版本已经解决这个问题)Common solution:
在当前Activity的所有父Activity配置中,即AndroidMenifest.xml中,为所有的父Activity添加上 android:configChanges="orientation|screenSize|keyboardHidden"奇葩重现
在父Activity的初始化业务中增加耗时操作
奇葩解说
先看setRequestOrientation方法源码
Activity mParent; //mParent 是Activity,且是Activity栈中的相对父Activity public void setRequestedOrientation(@ActivityInfo.ScreenOrientation int requestedOrientation) { if (mParent == null) { // 如果父Activity不存在,直接调用服务来控制旋转屏 try { ActivityManager.getService().setRequestedOrientation( mToken, requestedOrientation); } catch (RemoteException e) { // Empty } } else { // 如果父Activity存在,需递归调用setRequestedOrientation mParent.setRequestedOrientation(requestedOrientation); } }从源码可以看出,最终调用的是根Activity的setRequestedOrientation方法; 由于旋转屏幕导致Activity会被重新实例化,所以需增加android:configChanges=”orientation|screenSize|keyboardHidden”配置 什么导致调用setRequestOrientation方法旋转屏幕卡顿?由于父Activity的初始化业务较重(想吐槽下老同事写的代码。。。。真心蛋疼),需花费一定时间去完成父Activity实例化,因此卡顿的原因在此