1. 程式人生 > >Android面試題-與效能優化相關面試題三

Android面試題-與效能優化相關面試題三

本文配套視訊

原始碼分析相關面試題

與XMPP相關面試題

與效能優化相關面試題

與登入相關面試題

與開發相關面試題

與人事相關面試題

String字串優化

最常見的例子就是當你要頻繁操作一個字串時,使用StringBuffer代替String。
還比如:使用int陣列而不是Integer陣列。
避免建立短命的臨時物件,減少物件的建立就能減少垃圾收集,進而減少對使用者體驗的影響。

ListView優化

  1. Item佈局,層級越少越好,使用hierarchyview工具檢視優化。
  2. 複用convertView
  3. 使用ViewHolder
  4. item中有圖片時,非同步載入
  5. 快速滑動時,不載入圖片
  6. item中有圖片時,應對圖片進行適當壓縮
  7. 實現資料的分頁載入

減少不必要的全域性變數

儘量避免static成員變數引用資源耗費過多的例項,比如Context。
因為Context的引用超過它本身的生命週期,會導致Context洩漏。所以儘量使用Application這種Context型別。
你可以通過呼叫Context.getApplicationContext()或 Activity.getApplication()輕鬆得到Application物件。

Cursor(遊標)回收

Cursor是Android查詢資料後得到的一個管理資料集合的類,在使用結束以後。應該保證Cursor佔用的記憶體被及時的釋放掉,而不是等待GC來處理。並且Android明顯是傾向於程式設計者手動的將Cursor close掉,因為在原始碼中我們發現,如果等到垃圾回收器來回收時,會給使用者以錯誤提示。

Receiver(接收器)回收

呼叫registerReceiver()後未呼叫unregisterReceiver().
當我們Activity中使用了registerReceiver()方法註冊了BroadcastReceiver,一定要在Activity的生命週期內呼叫unregisterReceiver()方法取消註冊
也就是說registerReceiver()和unregisterReceiver()方法一定要成對出現,通常我們可以重寫Activity的onDestory()方法,在onDestory裡進行unregisterReceiver操作

Stream/File(流/檔案)回收

主要針對各種流,檔案資源等等如:
InputStream/OutputStream,SQLiteOpenHelper,SQLiteDatabase,Cursor,檔案,I/O,Bitmap圖片等操作等都應該記得顯示關閉。

避免內部Getters/Setters

在Android中,虛方法呼叫的代價比直接欄位訪問高昂許多。通常根據面嚮物件語言的實踐,在公共介面中使用Getters和Setters是有道理的,但在一個欄位經常被訪問的類中宜採用直接訪問。
for迴圈
訪問成員變數比訪問本地變數慢得多,如下面一段程式碼:

for(int i =0; i < this.mCount; i++)  {}  

永遠不要在for的第二個條件中呼叫任何方法,如下面一段程式碼:

for(int i =0; i < this.getCount(); i++) {}  

對上面兩個例子最好改為:

int count = this.mCount; / int count = this.getCount();  
for(int i =0; i < count; i++)  {}
  • 歡迎關注微信公眾號,長期推薦技術文章和技術視訊