1、面試中的問題web
經過這幾天的面試,總結了本身在面試過程當中問到的問題,部分問題已經給出了答案,還有部分問題,還未有時間整理出來。面試
ListView出現閃圖、圖片錯亂緣由解決方案編程
函數式編程 (Lambda)數組
Activity四種啓動模式安全
消息通信微信
AIDL框架
ImageLoader內部原理函數式編程
RecyclerView ViewHodler綁定函數
Activity與Fragement 生命週期工具
Service如何讓它不清理
Fragement替換機制
xutils AsyncHttp volly三種框架的使用
幀佈局 FrameLayout
MVC、MVP
一、object類下經常使用的方法
tostring
equals
hashcode
notify
notifyAll
wait
finalize
clone
getClass
一、String、StringBuffer和StringBuilder的區別
String:字符串常量,字符串長度不可變。Java中String是immutable(不可變)的。
StringBuffer:字符串變量(Synchronized,即線程安全)。
StringBuilder:字符串變量(非線程安全)。在內部,StringBuilder對象被看成是一個包含字符序列的變長數組。
String 類型和StringBuffer的主要性能區別:String是不可變的對象, 所以在每次對String 類型進行改變的時候,都會生成一個新的 String 對象,而後將指針指向新的 String 對象,因此常常改變內容的字符串最好不要用 String。
使用 StringBuffer 類時,每次都會對 StringBuffer 對象自己進行操做,而不是生成新的對象並改變對象引用。因此多數狀況下推薦使用 StringBuffer 。
二、 ArrayList,LinkedList,Vector,Stack之間的區別
一,線程安全性
Vector、Stack:線程安全
ArrayList、LinkedList:非線程安全
二,實現方式
LinkedList:雙向鏈表
ArrayList,Vector,Stack:數組
三、hashmap和hashtable的區別
HashMap哈希表是由數組+鏈表組成.
HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口。
主要區別在於HashMap容許空(Null)鍵值(Key,非線程安全。
hashTable 線程安全。
3、關於屏幕適配
一、選用主流的屏幕來開發測試。
二、不用絕對佈局,多使用相對佈局以及線性佈局, 要使用dp,不適用px。
三、在開發後期,在不一樣的屏幕分辨率下測試,若是沒出現太大的問題,就能夠上線了。
若是後期測出問題:
一、圖片適配
反編譯微信,發現圖片都是放在hdpi文件夾下。1280*720的圖片
二、佈局適配
layout-800X480得佈局文件
三、尺寸適配
經過values -> dimens.xml文件配置尺寸, 可配置values-1280*720裏面的dimens.xml文件
四、權重適配
layout_weight、weightSum權重總數
五、代碼適配
獲取屏幕的寬高,動態計算控件的大小
getWindowManager.getDefaultDisplay().getWidth()
(width*200/320) 設置屏幕佔有的寬度
px轉dp
如何處理內存溢出,內存泄露(如何處理Android內存泄露)
內存泄露是指程序在運行過程當中動態申請的內存空間再也不使用後沒有及時釋放,從而極可能致使應用程序內存無線增加。
內存泄露的檢測
(1)利用內存泄露檢測工具
內存監測工具 DDMS --> Heap
內存分析工具 MAT(Memory Analyzer Tool)
(2)釋放資源我都在onDestroy()裏面作處理。
(3)對於圖片,使用recycle函數來回收資源。
內存泄露處理方法:
第一,應該儘可能避免static成員變量引用資源耗費過多的實例,好比Context。
第2、Context儘可能使用Application Context,由於Application的Context的生命週期比較長,引用它不會出現內存泄露的問題。
第3、使用WeakReference代替強引用。好比可使用WeakReference<Context> mContextRef;
對於Handler的內存泄露處理:
這個代碼存在泄漏問題,由於HandlerThread的run方法是一個死循環,它不會本身結束,線程的生命週期超過了activity生命週期,
當橫豎屏切換,HandlerThread線程的數量會隨着activity重建次數的增長而增長。
應該在onDestroy時將線程中止掉:mThread.getLooper().quit();
onDestroy時清除消息,mHandler.removeCallbacksAndMessages(null); // 參數爲null時會清除全部消息。
聲明Handler爲static並持有Activity的弱引用。
Android常見的幾種動畫以及區別。
Android NDK 是在SDK前面又加上了「原生」二字,即Native Development Kit,所以又被Google稱爲「NDK」。