这几天在整一apk,有个问题发现只有在三星4.0以上系统会出现,其余安卓手机系统则不会。html
问题时这样的:java
程序须要调用摄像头取照片和拍视频,在Activity中发送一个Intent,给这个Intent填一个媒体输出地址----uri,我在Activity中申明一个全局变量:private Uri uri = null;android
uri在后续代码中赋值,在我发出Intent(startActivityForResult(intent))以前加日志打印,uri是有值的,但取到照片或者视频后,这个uri变成了null(在onActivityResult()中),我之前一直觉得全局变量要在这个类销毁掉后才销毁的,如今发现三星好像不是这样的。固然简单的解决方法是把变量弄成静态的。app
另外还有一个问题,也是在三星上才出现:oop
一样是在onActivityResult()方法中,我有申明一个弹出框AlertDialog dialog = AlertDialog.Builder(context).create();结果出现这样的错误:ui
/WindowManager(31631): Activity bob.loc.BookDetail has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{42554d30 V.E..... R......D 0,0-277,253} that was originally added here /WindowManager(31631): android.view.WindowLeaked: Activity bob.loc.BookDetail has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{42554d30 V.E..... R......D 0,0-277,253} that was originally added here /WindowManager(31631): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:449) /WindowManager(31631): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:235) /WindowManager(31631): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) /WindowManager(31631): at android.app.Dialog.show(Dialog.java:282) /WindowManager(31631): at android.app.ProgressDialog.show(ProgressDialog.java:116) /WindowManager(31631): at android.app.ProgressDialog.show(ProgressDialog.java:99) /WindowManager(31631): at android.app.ProgressDialog.show(ProgressDialog.java:94) /WindowManager(31631): at bob.loc.BookDetail.ShowDialogForWait(BookDetail.java:1209) /WindowManager(31631): at bob.loc.BookDetail.ShowDialogForWait(BookDetail.java:1229) /WindowManager(31631): at bob.loc.BookDetail$11.onClick(BookDetail.java:1013) /WindowManager(31631): at android.view.View.performClick(View.java:4380) /WindowManager(31631): at android.view.View$PerformClick.run(View.java:18094) /WindowManager(31631): at android.os.Handler.handleCallback(Handler.java:725) /WindowManager(31631): at android.os.Handler.dispatchMessage(Handler.java:92) /WindowManager(31631): at android.os.Looper.loop(Looper.java:137) /WindowManager(31631): at android.app.ActivityThread.main(ActivityThread.java:5308) /WindowManager(31631): at java.lang.reflect.Method.invokeNative(Native Method) /WindowManager(31631): at java.lang.reflect.Method.invoke(Method.java:511) /WindowManager(31631): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) /WindowManager(31631): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) /WindowManager(31631): at dalvik.system.NativeStart.main(Native Method)
首先这个错误只在三星上出现,其次,stackOverFlow上说这样的错误通常都是在Activity销毁钱对话框没销毁形成的,但我这明显不是这样。还有一种状况,就是在非UI线程中作了显示对话框的操做,我开始觉得三星的系统是否定为onActivityResult()中不是主线程。但后来我放到handler中去作也没解决。这个问题如今还没找到解决方法,若是有大神路过,就请不吝赐教。若是我后面解决了,后面把方法补上。spa