當前位置:編程學習大全網 - 熱門推薦 - 詭異,Unity在安卓運行崩潰問題,求助

詭異,Unity在安卓運行崩潰問題,求助

在整個開發階段和測試階段,出現了很多預料之外的事情,比如size是1M多的json文件解析、高清圖片導致OOM、莫名其妙的崩潰等。這些意外無壹不影響開發計劃,增大壓力,最直接的表現是晚上加班和周末加班。 寫代碼和修改代碼遠比想象中的難控制。用戶體驗增加了代碼的細節處理難度、邏輯處理難度,android莫名的崩潰增加解決bug的難度。就這次開發,總結了壹些經驗。 測試人員經常會報告小米1手機運行壁紙軟件時會崩潰的問題,崩潰日誌是: java.lang.RuntimeException: Failed to register input channel. Check logs for details. at android.view.InputQueue.nativeRegisterInputChannel(Native Method) at android.view.InputQueue.registerInputChannel(InputQueue.java:92) at android.view.ViewRoot.setView(ViewRoot.java:570) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) at android.widget.Toast$TN.handleShow(Toast.java:411) at android.widget.Toast$TN$1.run(Toast.java:337) at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:130) 根據日誌推測該崩潰是和Toast有關。可是問題就奇怪了,我在代碼中只調用Toast.makeTest(...).show(),為什麽會引起這個崩潰。然後根據測試人員的反饋,當設置壁紙成功後,會引起這個崩潰,而且測試人員是在頻繁的操作下報出來這個問題的。根據這個現象,推斷有可能以下兩個原因引起的,壹是,設置壁紙引起桌面發生變化,桌面發生變化時彈出toast會導致崩潰;二是,頻繁不間斷的彈出toast會引起這個問題。而之後測試人員反饋了壹個新的現象,當進行新浪微博分享失敗後(前提是該新浪微博帳號是有問題的),再去瀏覽壁紙圖片也導致了該崩潰,而且此現象僅出現了壹次再也不復現。該bug最終是遺留解決。 針對這種問題,在以後的版本開發中肯定也會出現,怎麽避免它再次出現。我總結了從幾個方面做努力。先借來小米1手機來玩,學習手機發燒友的習慣和測試人員的思維,然後體驗小米1手機,對小米1要有更深入的認識;和小米進行溝通,還沒有認識牛逼的朋友在小米做開發,所以可以先在小米論壇上做活躍用戶,主動和對方和網友溝通;了解input channel是什麽功能,什麽機制,研究 anroid2.3的關於這塊的native代碼。 剛開始進入測試階段時,測試人員每天都會報告壁紙軟件頻繁崩潰的問題。對於壹些簡單的崩潰問題,壹般是空指針而且還復現,就不在這裏說了。測試報告說,瀏覽壁紙圖片保存壁紙,預覽壁紙和設置壁紙時經常的崩潰,這種崩潰沒有規律可復現但是很頻繁出現。這種問題的原因是OOM,比如,在MX2手機上,桌面預覽要使用的位圖大小是1280 X 800 X 2 X 4字節 約等於8M,軟件中的位圖各種處理(縮放、剪切、渲染、多個activity同時存在等)會導致內存使用量飆升到50多M,當超過64M左右時,軟件會報OOM錯誤。沒有徹底解決OOM的方法,網上有很多避免OOM的方法,比如延遲加載圖片、及時回收內存、弱引用等。另外在生成bitmap的地方要使用try 解決了這些崩潰問題後,還會有新的導致崩潰的原因。測試人員說中午吃完飯回來,打開壁紙軟件突然崩潰。分析這個現象後,找到原因是,長期待機情況下android殺掉了壁紙軟件的進程。但是疑問出現了,此時進程被殺掉了之後點擊app的icon,不是又重新打開了進程,重新運行了嗎,怎麽會崩潰呢。經過分析,發現有個詭異的地方是,android待機後把壁紙進程給殺掉了,但是該軟件的activity並沒有從task中刪除掉,所以當再點擊app的icon時,會執行task頂層的activity的onCreate,而onCreate裏邊的壹些東西還未初始化,會因為空指針而崩潰。 後來,測試人員報告了壹個詭異的bug,安裝軟件後第壹次打開軟件,歡迎界面的圖片顯示不出來,以後每次打開軟件歡迎界面的圖片都能打開出來。圖片是壹個jpg文件,在raw中。最後找到原因是,在decode bitmap,scale bitmap時,其中要操作的壹個變量imagewidth在第壹次時是0,沒有賦值,之後再操作就不是0,賦值了。但是為什麽會這樣,最後找到原因了,imagewidth是壹個全局靜態變量,該全局靜態變量在另外壹個線程中會被賦值(賦上屏幕的寬度)。由於線程的異步問題而導致第壹次imagewidth是0。後來每次打開軟件,並不是進程重啟,而是activity重啟,imagewidth賦的值還在。

  • 上一篇:如圖,在△ABC中,已知∠ABC=50°,∠1=∠2=∠3,求∠FDB的度數
  • 下一篇:祝大家聖誕快樂傳奇的合擊SF網站是什麽啊.
  • copyright 2024編程學習大全網