Android面試題-與效能優化相關面試題三
本文配套視訊
原始碼分析相關面試題
與XMPP相關面試題
與效能優化相關面試題
與登入相關面試題
與開發相關面試題
與人事相關面試題
String字串優化
最常見的例子就是當你要頻繁操作一個字串時,使用StringBuffer代替String。
還比如:使用int陣列而不是Integer陣列。
避免建立短命的臨時物件,減少物件的建立就能減少垃圾收集,進而減少對使用者體驗的影響。
ListView優化
- Item佈局,層級越少越好,使用hierarchyview工具檢視優化。
- 複用convertView
- 使用ViewHolder
- item中有圖片時,非同步載入
- 快速滑動時,不載入圖片
- item中有圖片時,應對圖片進行適當壓縮
- 實現資料的分頁載入
減少不必要的全域性變數
儘量避免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++) {}
- 歡迎關注微信公眾號,長期推薦技術文章和技術視訊