三星平台上的测试心得

这几天在整一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