Android面試題及其答案(一)

handler vs AsyncTask
AsyncTask,是android提供的輕量級的異步類,可以直接繼承AsyncTask,在類中實現異步操作,並提供接口反饋當前異步執行的程度(可以通過接口實現UI進度更新),最後反饋執行的結果給UI主線程。
優點:
l  簡單,快捷
l  過程可控       
缺點:
l 在使用多個異步操作和並需要進行Ui變更時,就變得複雜起來

Handler 異步實現時,涉及到 Handler, Looper, Message,Thread四個對象,實現異步的流程是主線程啓動Thread(子線程)thread(子線程)運行並生成Message-Looper獲取Message並傳遞給Handler,Handler逐個獲取Looper中的Message,並進行UI變更。
優點:
l  結構清晰,功能定義明確
l  對於多個後臺任務時,簡單,清晰
缺點:
l  在單個後臺異步處理時,顯得代碼過多,結構過於複雜(相對性)

json vs xml
XML定義
擴展標記語言 (Extensible Markup Language, XML) ,用於標記電子文件使其具有結構性的標記語言,可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。 XML使用DTD(document type definition)文檔類型定義來組織數據;格式統一,跨平臺和語言,早已成爲業界公認的標準。

JSON定義
JSON(JavaScript Object Notation)一種輕量級的數據交換格式,具有良好的可讀和便於快速編寫的特性。可在不同平臺之間進行數據交換。JSON採用兼容性很高的、完全
獨立於語言文本格式,同時也具備類似於C語言的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)體系的行爲。這些特性使JSON成爲理想的數據交換語言。

共同優點:
都是文本表示的數據格式,可以跨平臺、跨系統交換數據

(1).可讀性方面。
JSON和XML的數據可讀性基本相同,JSON和XML的可讀性可謂不相上下,一邊是建議的語法,一邊是規範的標籤形式,XML可讀性較好些。
(2).可擴展性方面。
XML天生有很好的擴展性,JSON當然也有,沒有什麼是XML能擴展,JSON不能的。
(3).編碼難度方面。
XML有豐富的編碼工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的編碼明顯比XML容易許多,即使不借助工具也能寫出JSON的代碼,可是要寫好XML就不太容易了。從總體來看,XML比較適合於標記文檔,而JSON卻更適於進行數據交換處理。
(4).解碼難度方面。
XML的解析得考慮子節點父節點,讓人頭昏眼花,而JSON的解析難度幾乎爲0。這一點XML輸的真是沒話說。
(5).流行度方面。
XML已經被業界廣泛的使用,而JSON纔剛剛開始,但是在Ajax這個特定的領域,未來的發展一定是XML讓位於JSON。
(6).解析手段方面。
JSON和XML同樣擁有豐富的解析手段。
(7).數據體積方面。
JSON相對於XML來講,數據的體積小,傳遞的速度更快些。
(8).數據交互方面。
JSON與JavaScript的交互更加方便,更容易解析處理,更好的數據交互。
(9).數據描述方面。
JSON對數據的描述性比XML較差。
(10).傳輸速度方面。
JSON的速度要遠遠快於XML。

sqlite操作
請繼承SQLiteOpenHelper實現:
1).創建一個版本爲1的“diaryOpenHelper.db”的數據庫,
2).同時創建一個 “diary” 表(包含一個_id主鍵並自增長,topic字符型100
長度, content字符型1000長度)
3).在數據庫版本變化時請刪除diary表,並重新創建出diary表。

public class DBHelper extends SQLiteOpenHelper {
	public final static String DATABASENAME = “diaryOpenHelper.db”;
	public final static int DATABASEVERSION = 1;
	//創建數據庫
	public DBHelper(Context context,String name,CursorFactory factory,int version)
	{
		super(context, name, factory, version);
	}
	//創建表等機構性文件
	public void onCreate(SQLiteDatabase db)
	{
		String sql =”create table diary”+
		“(“+
		“_id integer primary key autoincrement,”+
		“topic varchar(100),”+
		“content varchar(1000)”+
		“)”;
		db.execSQL(sql);
	}
	//若數據庫版本有更新,則調用此方法
	public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)
	{
		String sql = “drop table if exists diary”;
		db.execSQL(sql);
		this.onCreate(db);
	}
}

android 中有哪幾種解析xml的類?官方推薦哪種?以及它們的原理和區別。
XML解析主要有三種方式,SAX、DOM、PULL。

DOM解析XML文件會將XML文件的所有內容以文檔樹方式存放在內存中,然後使用DOM API遍歷XML樹,檢索所需的數據,主要用於PC機,該方法在查找方面可以和XPath很好的結合,如果數據量不是很大推薦使用。
優點:使用DOM解析XML的代碼比較直觀,比基於SAX的實現更加簡單。缺點:須將XML文件所有內容存放在內存中,所以消耗內存大,不適用Android等移動設備。

SAX解析XML文件採用的是事件驅動,也就是說,他讀取是單向的,並不需要解析完整個文檔,在按內容順序解析文檔的過程中,SAX會判斷當前讀取到的字符是否符合XML語法中的某部分,如果符合就會觸發事件,其實就是一些回調方法,然後進行判斷處理。
優點:解析速度快,佔用內存少,解析屬性方便,適用於Android等移動設備。缺點:對於嵌套多個分支來說處理不是很方便。

PULL解析器是Android內置解析XML文件的解析器,運行方式類似於SAX解析,只是產生的事件是一個數字,而非方法,因此可以使用一個switch對感興趣的事件進行處理。PULL解析器對節點處理比較好,同樣也很省內存,官方推擠使用PULL解析器解析XML文件,而且Android系統本身用到的XML文件內部也是使用PULL解析器進行解析的。
SAX、PULL還有一點區別,PULL解析時用了一個while循環,隨時可以跳出,而SAX不是,SAX是隻要解析了,就必須解析完成。

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