每天一點小知識【8】

繼續總結本司機在工作過程中的一些小知識點或小的技巧,其中有代碼片段,也有知識點,經驗總結和分享。

1、setContentView和inflate的區別。

先看如下這個程序段,

public class MyActivity extends Activity{
private TextView textview;
public void OnCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//1、直接使用setContentView
//setContentView(R.layout.main);
//textview = (TextView) findViewById(R.id.textview);
//2、先使用inflate,然後再調用setContentView
LayoutInflater inflate = LayoutInflater.from(this);
View view = inflate.inflate(R.layout.main,null);
setContentView(view);
}
}

上述註釋掉的1部分的代碼和沒有註釋掉的2部分的代碼執行情況是相同,但過程不同,首先分析1,調用setContentView()將立刻顯示資源R.layout.main對應的view。而方法2,會先把R.layout.main對應的資源通過inflate方法生成一個View,然後通過方法setContentView設置給當前Activity。setContentView()方法一般用在activity的onCreate方法中用來顯示當前界面的佈局,而LayoutInflater的inflate()方法可以實現動態加載,除了可以用在Activity中,也可以用在各種控件,自定義控件中,如ListView等,對控件佈局進行動態設置。

2、StringBuilder與StringBuffer的區別

它們都是字符串變量,這一點有別於String,String 字符串常量。
它們二者最簡單直接的區別在於StringBufferd支持併發操作,是線性安全的,適合在多線程中使用。StringBuilder不支持併發操作,是線性不安全的,不適合多線程中使用。
StringBuilder類是Java 5.0新增的類,被設計用作 StringBuffer 的一個簡易替換,在單線程中的性能比StringBuffer高,所以如果不涉及多線程,多數情況下推薦使用StringBuilder。

3、關於SparseArray

HashMap是java裏比較常用的一個集合類,一般用來緩存一些鍵值對數據。但在Android上,強烈建議使用SparseArray來代替HashMap,以獲取更好性能。從字面意思,SparseArray就是稀疏數組的意思。
SparseArray是android裏爲

4、apk的含義

apk是Android安裝包Android Package的縮寫。apk類似於Symbian Sis或Sisx的文件格式的安裝程序文件,它使用Android SDK編譯的工程打包編譯打包生成的。可以將apk文件直接安裝到Android模擬器或Android手機中。apk文件其實也是一種zip壓縮格式,只是後綴名被修改爲apk,如果我們使用命令UnZip可以將其解壓,解壓後可以看到Dex文件,Dex是Dalvik VM executes的全稱,即Android Dalvik執行程序,並非Java 的字節碼而是Dalvik字節碼。

5、assets與res/raw的區別

assets:assets目錄下存放的資源表示應用無法直接訪問的原生資源,這些資源文件不會生成任何資源ID,被原封不動的存儲到設備上,它也不會被編譯爲二進制形式,訪問方式是通過文件名結合AssetManager來訪問,而不能通過資源ID訪問,應用程序通過AssetManager以的字節流的形式來讀取資源文件。並且assets支持任意深度的子目錄。
res/raw:raw目錄下存放的資源也是代表應用無法直接訪問的原生資源,但應用可以通過資源ID訪問raw目錄下的資源,這些文件將原封不動的存儲到設備上,不會被編譯爲二進制形式。應用程序使用openRawResource以的字節流的形式來讀取資源文件,raw不支持多級子目錄。

6、Android Drawable、Bitmap、byte[]之間的互相轉換

● Drawable –> Bitmap

Resources res = getResources();  
Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.pic);

● Bitmap –> Drawable

Drawable bitmap2Drawable(Bitmap bitmap) {  
return new BitmapDrawable(bitmap);
}

● Bitmap –> byte[]

byte[] Bitmap2Bytes(Bitmap bm) {  
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}

● byte[] –> Bitmap

Bitmap Bytes2Bimap(byte[] b) {  
if (b.length != 0) {
return BitmapFactory.decodeByteArray(b, 0, b.length);
} else {
return null;
}
}

7、從右到左佈局RTL Layout

從Android 4.2開始,Android SDK支持一種從右到左(RTL,Right-to-Left)的UI佈局方式,這種佈局方式經常被使用在諸如阿拉伯語、希伯來語等環境中,在Google商店上線的應用如果要考慮這些語言的國家用戶,需要對他們進行適配,包括xml佈局文件,以及代碼等。在中國市場上線的應用基本不用考慮這個屬性。
所謂RTL,就是指按平常我們的操作習慣在左的控件現在放到了右側,而在右側的控件b放到了左側。
RTL佈局功能默認是關閉的,如果想使用RTL佈局,首先要在AndroidManifest.xml文件中將標籤的android:supportsRtl屬性值設爲”true”,然後需要將相應視圖標籤的android:layoutDirection屬性值設爲”rtl”。接下來就是對支持RTL的Activity或者View佈局進行適配修改,定義保存多份xml,在代碼中也需要注意進行兼容適配。

8、關於IntentService

IntentService是Service類的子類,可以用來處理異步請求,並且用完Service就會停止運行,非常方便用於處理一次性的執行過程。客戶端可以通過startService(Intent)方法傳遞請求給IntentService,IntentService通過worker thread處理每個Intent對象,執行完所有的工作之後自動調用stopSelf()方法自動停止Service並退出。它的好處就是處理異步請求的時候可以減少寫代碼的工作量,比較輕鬆地實現項目的需求。
使用IntentService非常簡單,只需要兩個步驟:
1、寫構造函數
2、複寫onHandleIntent()方法

9、如何實現圖文混排?

可以藉助SpannableString對象。使用SpannableString對象來封裝Span對象,如ImageSpan對象,再將SpannableString對象當做普通的字符串插入到控件中即可。

10、data目錄下的一些常用子目錄

/data/app,存放程序的apk文件(僅用戶程序)。你安裝的程序的apk文件都會存放到這裏一份。
/data/dalvik-cache,顧名思義,是程序的dalvik-cache文件。實際就是程序的Java執行文件,擴展名爲dex。

這裏寫圖片描述
歡迎您掃一掃上面的微信公衆號,訂閱我的個人公衆號! 本公衆號將以推送Android各種碎片化小知識或小技巧,以及整理Android面試知識點爲主,也會不定期將開發老司機日常工作中踩過的坑,平時自學的一些知識總結出來進行分享。每天一點乾貨小知識把你的碎片時間充分利用起來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章