You need to use a Theme.AppCompat theme (or descendant) with this activity.
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 AppCompatActivity
- Activity 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异常
Recyclerview 嵌套 Recyclerview 导致下拉卡顿释放正常
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方法╰( ̄▽ ̄)╮
CardView圆角效果失效
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– 全部选中
- 重启手机(这一步不一定要做)
科大讯飞语音 — Signal 11(SIGSEGV),code 1(SEGV_MAPERR)fault addr 0xcb74000
Exception log:
Signal 11(SIGSEGV),code 1(SEGV_MAPERR)fault addr 0xcb74000
Common solution:
if (mTts.isSpeaking()) {
mTts.destroy();
}
奇葩说
- 由于调用destory方法后,会导致不稳定crash并不是每次都crash
奇葩重现
- 开启语音,等待语音读完,关闭页面并调用mTts.destroy();
奇葩解说
- 这是科大讯飞的1101和1102版本中存在的问题,更换版本即可(1111及以上版本已经解决这个问题)
使用Activity.setRequestedOrientation(int requestedOrientation)方法旋转屏幕严重卡顿
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实例化,因此卡顿的原因在此