Android 開發中,有哪些坑需要注意?
作者:張明云
鏈接:http://zhuanlan.zhihu.com/zmywly8866/20309921
來源:知乎
鏈接:http://zhuanlan.zhihu.com/zmywly8866/20309921
來源:知乎
最近正準備寫一篇關于這方面的文章,正好看到知乎上的這個問題:Android 開發中,有哪些坑需要注意? - Android,索性以寫答案的方式來寫這篇文章,順便推薦我之前在知乎上提出的一個問題:在Android開發的過程中,有哪些坑是值得你放在checklist中警示自己的? - 程序員,里面有一些有參考價值的答案。
作為一個有三、四年Android應用開發經驗的碼農,自然會遇到很多坑,下面是我能夠想起的一些坑(實踐證明不記筆記可不是個好習慣),后面有想到其它坑會陸續補上。
- 在Android library中不能使用switch-case語句訪問資源ID:在Android library中不能使用switch-case語句訪問資源ID的原因分析及解決方案
- 不能在Activity沒有完全顯示時顯示PopupWindow和Dialog:popupwindow - Problems creating a Popup Window in Android Activity
- 在多進程之間不要用SharedPreferences共享數據,雖然可以(MODE_MULTI_PROCESS),但極不穩定:android - MODE_MULTI_PROCESS for SharedPreferences isn't working
- 有些時候不能使用Application的Context,不然會報錯(比如啟動Activity,顯示Dialog等):

- 同一個應用的JNI代碼,不要輕易換NDK編譯的版本,否則會有很多問題(主要是一些方法實現不一樣,并且高版本對代碼的檢測更嚴格),比如r8沒有問題,但到r9就有問題了,這是個大坑;
- Android的JNI代碼中,有返回類型的函數沒有返回值編譯的時候也不會報錯;
- 當前Activity的onPause方法執行結束后才會執行下一個Activity的onCreate方法,所以在onPause方法中不適合做耗時較長的工作,這會影響到頁面之間的跳轉效率;
- 謹慎使用Android的透明主題,透明主題會導致很多問題,比如:如果新的Activity采用了透明主題,那么當前Activity的onStop方法不會被調用;在設置為透明主題的Activity界面按Home鍵時,可能會導致刷屏不干凈的問題;進入主題為透明主題的界面會有明顯的延時感;
- 不要在非UI線程中初始化ViewStub,否則會返回null;
- 公共接口一定要考慮到代碼重入的情況,能設計為單例就盡量用單例;
- 不要通過Bundle傳遞大塊的數據,否則會報TransactionTooLargeException異常:java - Issue: Passing large data to second Activity
- 盡量不要通過Application緩存數據,這不穩定:不要在Android的Application對象中緩存數據!
- 盡量不要使用AnimationDrawable,它在初始化的時候就將所有圖片加載到內存中,特別占內存,并且還不能釋放,釋放之后下次進入再次加載時會報錯;
- 9圖不能通過tinypng壓縮,不然會有問題;
- genymotion模擬器快是因為它是基于x86架構的,如果你的應用中用到了so,但沒有x86架構的so,只能放棄使用它;Android Studio的模擬器也一樣;
- Eclipse的Android開發環境配置好后不要輕易升級ADT和build tools,不然會浪費你很多時間,還有就是一個workspace中的工程不要太多,不然每次啟動都會很慢;
- Android studio每個版本、gradle每個版本差別都比較大(我是這樣認為的),對于jni代碼的編譯建議在Eclipse中進行,如果在Android studio中開發jni會浪費很多時間,主要是編譯腳本的配置比較麻煩;
- Eclipse中的Lint太不靠譜,特別是主工程中依賴library的時候,很多提示都是有問題的,建議使用Android Studio的工程清理工具,特別推薦。
-
AsyncTask默認自己維護一個靜態的線程池,而該線程池只允許同時執行一個線程,也就是說,不管多少個AsyncTask,只要是調用execute()方法,都是共享這個默認進程池的,你的任務必須在之前的任務執行完以后,才能執行。調用AsyncTask的excute方法不能立即執行程序的原因分析及改善方案
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!