android 面试题(一)
1、Android中真實寬高,getWidth和getMeasuredWidth的區別:哪個計算的是真實的寬?
getWidth():得到的是View在父Layout中布局好后的寬度值,如果沒有父布局,那么默認的父布局就是整個屏幕。
getMeasuredWidth():得到的是最近一次調用measure()方法測量后得到的是View的寬度,它僅僅用在測量和Layout的計算中。所以此方法得到的是View的內容占據的實際寬度。
總結:
getWidth(): View在設定好布局后整個View的寬度。
getMeasuredWidth(): 對View上的內容進行測量后得到的View內容占據的寬度,前提是你必須在父布局的onLayout()方法或者此View的onDraw()方法里調用measure(0,0);否則你得到的結果和getWidth()得到的結果是一樣的。
?
2、堆區、棧區、方法區有什么區別?靜態變量存儲在哪個區?
堆區:
1.存儲的全部是對象,每個對象都包含一個與之對應的class的信息。(class的目的是得到操作指令)
2.jvm只有一個堆區(heap)被所有線程共享,堆中不存放基本類型和對象引用,只存放對象本身。
棧區:
1.每個線程包含一個棧區,棧中只保存基本數據類型的對象和自定義對象的引用(不是對象),對象都放在堆區中。
2.每個棧中的數據(原始類型和對象引用)都是私有的,其他棧不能訪問。
3.棧分為3個部分:基本類型變量區、執行環境上下文、操作指令區(存放操作指令)
方法區:
1.又叫靜態區,跟堆一樣,被所有的線程共享。方法區包含所有的class和static變量。
2.方法區中包含的都是在整個程序中永遠唯一的元素,如class,static變量。
?
靜態變量屬于類的屬性,存儲在方法區。方法區保存一個類的模板,堆存放類的實例。棧用來函數計算
?
?
Intent傳值的類型有哪些?
1) 8種基本數據類型及其數組
2)String(String實現了Serializable)/CharSequence實例類型的數據及其數組
3) 實現了Parcelable的對象及其數組( 操作較復雜, 但速度快)。android提供了一種新的類型:Parcel。本類被用作封裝數據的容器,封裝后的數據可以通過Intent或IPC傳遞。?除了基本類型以外,只有實現了Parcelable接口的類才能被放入Parcel中。
4)實現了Serializable的對象及其數組(操作簡單, 但速度慢)。Serializable:將 Java 對象序列化為二進制文件的 Java 序列化技術,是Java系列技術中一個較為重要的技術點,在大部分情況下,開發人員只需要了解被序列化的類需要實現 Serializable接口,使用ObjectInputStream 和 ObjectOutputStream 進行對象的讀寫。
5)File在Java里也是類,在Android里也實現了Serializable接口
?
java 內部類為什么不能用靜態方法?
非static的內部類,在外部類加載的時候,并不會加載它,所以它里面不能有靜態變量或者靜態方法。
基于以上兩點,可以看出,如果一個非static的內部類如果具有static的屬性或者方法,那么就會出現一種情況:內部類未加載,但是卻試圖在內存中創建static的屬性和方法,這當然是錯誤的。原因:類還不存在,但卻希望操作它的屬性和方法。
?
為什么內部類可以訪問外部類的成員?
1 內部類對象的創建依賴于外部類對象;
2 內部類對象持有指向外部類對象的引用。
?
ListView的優化方案
答:1、如果自定義適配器,那么在getView方法中要考慮方法傳進來的參數contentView是否為null,如果為null就創建contentView并返回,如果不為null則直接使用。在這個方法中盡可能少創建view。
? 2、給contentView設置tag(setTag()),傳入一個viewHolder對象,用于緩存要顯示的數據,可以達到圖像數據異步加載的效果。
? 3、如果listview需要顯示的item很多,就要考慮分頁加載。比如一共要顯示100條或者更多的時候,我們可以考慮先加載20條,等用戶拉到列表底部的時候再去加載接下來的20條。
?
轉載于:https://www.cnblogs.com/zquan/p/9609446.html
總結
以上是生活随笔為你收集整理的android 面试题(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GIT的PUSH指令
- 下一篇: lol人物模型提取(五)