是时候开始写第一篇微博了...
近期在开发hybrid app发现在红米和三星Note3上面,调用拍照插件,拍完照会系统崩溃..
debug发现,拍完照以后takePicture()方法对于系统拍照后返回结果的处理processResultFromCamera()方法内imageUri变成了Null...
之前有对红米拍照会崩溃的bug进行猜测...
下面引用一下飘易的BOLG ==> http://www.piaoyi.org/mobile-app/Android-MIUI-BUG-photo-activity.html
飘易的猜测是:由于红米miui深度定制了android系统,并且红米是整个小米系里最低端的入门机,在硬件性能上缩减严重。大白话就是修改了过多的模块而又没有考虑周全产生的bug。当系统调用拍照程序时,系统认为当前的内存还够用,activity不会被销毁,所以没有执行 onSaveInstanceState方法。但是拍照程序真正启用后,系统发现内存不够用了,即将OOM,就销毁了处于onPause或onStop的activity。这个销毁系统不会通知你,系统偷偷地干了这件事。
因为Picture类继承了CordovaPlugin.在CordovaPlugin里面找到了onSaveInstanceState()和onRestoreStateForActivityResult().重写方法,使用bundle.putParcelable对imageUri进行保存...在onRestoreStateForActivityResult拿取,.把结果设置为 全局变量....
<span style="white-space:pre"> </span>
@Override
public Bundle onSaveInstanceState() {
Bundle savedInstanceState = new Bundle();
savedInstanceState.putParcelable("imageUri", imageUri);
return savedInstanceState;
}
@Override
public void onRestoreStateForActivityResult(Bundle state, CallbackContext callbackContext) {
super.onRestoreStateForActivityResult(state, callbackContext);
imageUri = (Uri) state.getParcelable("imageUri");
}
最后,解决了红米,三星Note3拍照会崩的问题...
但是,三星Note3拍照为什么还会转屏啊...明明我都已经设置了android:screenOrientation="portrait"和android:configChanges="orientation|keyboardHidden|screenSize".........