Android開發文摘集合1

來源:互聯網
上載者:User

標籤:

張明雲

原標題:Android 開發中,有哪些坑需要注意?

作者github首頁:zmywly8866.github.io/

 

 

 

  • 在Android library中不能使用switch-case語句訪問資源ID:在Android library中不能使用switch-case語句訪問資源ID的原因分析及解決方案

  • 不能在Activity沒有完全顯示時顯示PopupWindow和Dialog:popupwindow - Problems creating a Popup Window in Android Activit

  • 在多進程之間不要用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的工程清理工具,精選;

  • 不同API版本的AsyncTask實現不一樣,有的是可以同時執行多個任務,有的API中只能同時執行一個線程,所以在程式中同時執行多個AsyncTask時有可能遇到一個AsyncTask的excute方法後很久都沒有執行。調用AsyncTask的excute方法不能立即執行程式的原因分析及改善方案

  • 同一個應用,相同的圖片分別放在drawable-xxhdpi、drawable-xhdpi、drawable-hdpi、drawable-mdpi、drawable-ldpi中,在同一裝置中佔用的記憶體會大不一樣(裝置的dpi是固定的,圖片放在不同的dpi檔案夾下,在裝置上顯示時需要將圖片轉換成和當前螢幕一樣dpi後在裝置中顯示,所以即使該圖片在不同dpi檔案夾下大小一樣,但放在記憶體中的大小卻不是一樣的,並不一定是長*寬*4),做應用的記憶體最佳化之前可以先看一看你的工程是如何做螢幕適配的,是否有最佳化的空間。強烈推薦這個螢幕適配視頻教程,花兩個半小時就能看完:Android-螢幕適配全攻略

  • 謹慎對待資料庫升級(比如需要在原資料庫中增加欄位),避免資料丟失或者操作資料庫異常的情況,資料庫升級方法可以查閱《第一行代碼》P263;

  • 多個程式共用一套代碼(一套代碼,在案頭上多個表徵圖)時需要處理好不同入口進入時的堆棧問題;

  • 使用Adapter的時候,如果你使用了ViewHolder做緩衝,在getView的方法中無論這項的每個視圖是否需要設定屬性(比如TextView設定的屬性可能為null,item的某一個按鈕的背景為透明、某一項的顏色為透明等),都需要為每一項的所有視圖設定屬性(textview的屬性為空白也需要設定setText(""),背景透明也需要設定),否則在滑動的過程中會出現內容的顯示錯亂。

  • 謹慎使用Android的多進程,多進程雖然能夠降低主進程的記憶體壓力,但會遇到如下問題:(1)不能實現完全退出所有Activity的功能(如果有同行在應用內採用多進程成功實現過完全退出程式歡迎溝通交流);(2)首次進入新啟動進程的頁面時會有延時的現象(有可能黑屏、白屏幾秒,是白屏還是黑屏和新Activity的主題有關);(3)應用內多進程時,新啟動一個進程都會重新跑一次Application的onCreate方法,不上重新建立一個Application,但會重新跑Application的onCreate,這樣就不能在Application中快取資料作為記憶體共用的途徑了;(4)多進程間通過SharedPreferences共用資料時不穩定,具體可以查閱《Android開發藝術探索》。

  • 使用Toast時,建議定義一個全域的Toast對象,這樣可以避免連續顯示Toast時不能取消上一次Toast訊息的情況(如果你有連續彈出Toast的情況,避免使用Toast.makeText);

 

 

關於更多Android開發方面的文章,可以看看我的專欄:張明雲的知識共用 - 知乎專欄

知識面有限,有很多沒有深入理解的知識點,歡迎指正交流~~~

著作權歸作者所有。
商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
張明雲
連結:http://www.zhihu.com/question/27818921/answer/70279930
來源:知乎

Android開發文摘集合1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.