三星平臺上的測試心得

這幾天在整一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