今天在做开发的时候,遇到了一个比较严重的BUG。就是程序中上传图片功能在调用手机拍照时,其它手机都没问题。
唯独三星手机(N9008s)拍照时程序直接崩溃。三星手机与其它手机拍照时唯一的区别是三星手机在拍照时,手机会切换横竖屏。
想了想可能是手机横竖屏对Activity的生命周期影响导致的,想到了android:configChanges=”orientation|keyboardHidden”这个属性配置。在拍照所在的Activity的AndroidManifest.xml中配置了
<activity
android:name="com.ldm.test.TakePhotoActivity"
android:configChanges="orientation|keyboardHidden" />
然后,再拍照果然没问题。
后来百度补充下知识下,果然是这样的原因。在对应的Activity中配置了上面的一行关键代码,当横竖屏切换的时候会直接调用onCreate方法中的onConfigurationChanged方法,而不是重新执行onCreate方法,如果没有使用这个属性就会重新调用onCreate方法了。之前就是因数没有配置这个发生 ,所以对应的Activity调用了onCreate方法,本来拍照返回有数据的,一经过onCreate()方法,肯定变成null啦。
横竖屏对Activity生命周期影响:
1、未设置Activity的android:configChanges时,横竖屏切换会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、当设置Activity的android:configChanges=”orientation”时,横竖屏切换会重新调用各个生命周期,切横、竖屏时只会执行一次
3、当设置Activity的android:configChanges=”orientation|keyboardHidden”时,横竖屏切换不会重新调用各个生命周期,只会执行onConfigurationChanged方法