- 相關推薦
android面試寶典
1、 Android的四大組件是哪些,它們的作用?
答:Activity:Activity是Android程序與用戶交互的窗口,是Android構造塊中最基本的一種,它需要為保持各界面的狀態(tài),做很多持久化的事情,妥善管理生命周期以及一些跳轉邏輯
service:后臺服務于Activity,封裝有一個完整的功能邏輯實現(xiàn),接受上層指令,完成相關的事物,定義好需要接受的Intent提供同步和異步的接口
Content Provider:是Android提供的第三方應用數據的訪問方案,可以派生Content Provider類,對外提供數據,可以像數據庫一樣進行選擇排序,屏蔽內部數據的存儲細節(jié),向外提供統(tǒng)一的接口模型,大大簡化上層應用,對數據的整合提供了更方便的途徑
Broadcast Receiver:接受一種或者多種Intent作觸發(fā)事件,接受相關消息,做一些簡單處理,轉換成一條Notification,統(tǒng)一了Android的事件廣播模型
2、 請介紹下Android中常用的五種布局。
常用五種布局方式,分別是:FrameLayout(框架布局),LinearLayout (線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)。
一、FrameLayout:所有東西依次都放在左上角,會重疊,這個布局比較簡單,也只能放一點比較簡單的東西。二、LinearLayout:線性布局,每一個LinearLayout里面又可分為垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。當垂直布局時,每一行就只有一個元素,多個元素依次垂直往下;水平布局時,只有一行,每一個元素依次向右排列。三、AbsoluteLayout:絕對布局用X,Y坐標來指定元素的位置,這種布局方式也比較簡單,但是在屏幕旋轉時,往往會出問題,而且多個元素的時候,計算比較麻煩。四、RelativeLayout:相對布局可以理解為某一個元素為參照物,來定位的布局方式。主要屬性有:相對于某一個元素android:layout_below、 android:layout_toLeftOf相對于父元素的地方android:layout_alignParentLeft、android:layout_alignParentRigh;五、TableLayout:表格布局,每一個TableLayout里面有表格行TableRow,TableRow里面可以具體定義每一個元素。每一個布局都有自己適合的方式,這五個布局元素可以相互嵌套應用,做出美觀的界面。
3、 android中的動畫有哪幾類,它們的特點和區(qū)別是什么
答:兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現(xiàn)方式可以使視圖組件移動、放大、縮小以及產生透明度的變化;另一種Frame動畫,傳統(tǒng)的動畫方法,通過順序的播放排列好的圖片來實現(xiàn),類似電影。
4、 android 中有哪幾種解析xml的類?官方推薦哪種?以及它們的原理和區(qū)別。
答:XML解析主要有三種方式,SAX、DOM、PULL。常規(guī)在PC上開發(fā)我們使用Dom相對輕松些,但一些性能敏感的數據庫或手機上還是主要采用SAX方式,SAX讀取是單向的,優(yōu)點:不占內存空間、解析屬性方便,但缺點就是對于套嵌多個分支來說處理不是很方便。而DOM方式會把整個XML文件加載到內存中去,該方法在查找方面可以和XPath很好的結合如果數據量不是很大推薦使用,而PULL常常用在J2ME對于節(jié)點處理比較好,類似SAX方式,同樣很節(jié)省內存,在J2ME中我們經常使用的KXML庫來解析。
5、 ListView的優(yōu)化方案
答:1、如果自定義適配器,那么在getView方法中要考慮方法傳進來的參數contentView是否為null,如果為null就創(chuàng)建contentView并返回,如果不為null則直接使用。在這個方法中盡可能少創(chuàng)建view。
2、給contentView設置tag(setTag()),傳入一個viewHolder對象,用于緩存要顯示的數據,可以達到圖像數據異步加載的效果。
3、如果listview需要顯示的item很多,就要考慮分頁加載。比如一共要顯示100條或者更多的時候,我們可以考慮先加載20條,等用戶拉到列表底部的時候再去加載接下來的20條。
6、 請介紹下Android的數據存儲方式。
答:使用SharedPreferences存儲數據;文件存儲數據;SQLite數據庫存儲數據;使用ContentProvider存儲數據;網絡存儲數據;
Preference,F(xiàn)ile, DataBase這三種方式分別對應的目錄是/data/data/Package Name/Shared_Pref, /data/data/Package Name/files, /data/data/Package Name/database 。
一:使用SharedPreferences存儲數據
首先說明SharedPreferences存儲方式,它是 Android提供的用來存儲一些簡單配置信息的一種機制,例如:登錄用戶的用戶名與密碼。其采用了Map數據結構來存儲數據,以鍵值的方式存儲,可以簡單的讀取與寫入,具體實例如下:
void ReadSharedPreferences(){
String strName,strPassword;
SharedPreferences user = getSharedPreferences(“user_info”,0);
strName = user.getString(“NAME”,””);
strPassword = user getString(“PASSWORD”,””);
}
void WriteSharedPreferences(String strName,String strPassword){
SharedPreferences user = getSharedPreferences(“user_info”,0);
uer.edit();
user.putString(“NAME”, strName);
user.putString(“PASSWORD” ,strPassword);
user.commit();
}
數據讀取與寫入的方法都非常簡單,只是在寫入的時候有些區(qū)別:先調用edit()使其處于編輯狀態(tài),然后才能修改數據,最后使用commit()提交修改的數據。實際上SharedPreferences是采用了XML格式將數據存儲到設備中,在DDMS中的File Explorer中的/data/data//shares_prefs下。使用SharedPreferences是有些限制的:只能在同一個包內使用,不能在不同的包之間使用。
二:文件存儲數據
文件存儲方式是一種較常用的方法,在Android中讀取/寫入文件的方法,與 Java中實現(xiàn)I/O的程序是完全一樣的,提供了openFileInput()和openFileOutput()方法來讀取設備上的文件。具體實例如下:
String fn = “moandroid.log”;
FileInputStream fis = openFileInput(fn);
FileOutputStream fos = openFileOutput(fn,Context.MODE_PRIVATE);
三:網絡存儲數據
網絡存儲方式,需要與Android 網絡數據包打交道,關于Android 網絡數據包的詳細說明,請閱讀Android SDK引用了Java SDK的哪些package?。
四:ContentProvider
1、ContentProvider簡介
當應用繼承ContentProvider類,并重寫該類用于提供數據和存儲數據的方法,就可以向其他應用共享其數據。雖然使用其他方法也可以對外共享數據,但數據訪問方式會因數據存儲的方式而不同,如:采用文件方式對外共享數據,需要進行文件操作讀寫數據;采用sharedpreferences共享數據,需要使用sharedpreferences API讀寫數據。而使用ContentProvider共享數據的好處是統(tǒng)一了數據訪問方式。
2、Uri類簡介
Uri代表了要操作的數據,Uri主要包含了兩部分信息:1.需要操作的ContentProvider ,2.對ContentProvider中的什么數據進行操作,一個Uri由以下幾部分組成:
1.scheme:ContentProvider(內容提供者)的scheme已經由Android所規(guī)定為:content://…
2.主機名(或Authority):用于唯一標識這個ContentProvider,外部調用者可以根據這個標識來找到它。
3.路徑(path):可以用來表示我們要操作的數據,路徑的構建應根據業(yè)務而定,如下:
要操作contact表中id為10的記錄,可以構建這樣的路徑:/contact/10
要操作contact表中id為10的記錄的name字段, contact/10/name
要操作contact表中的所有記錄,可以構建這樣的路徑:/contact?
要操作的數據不一定來自數據庫,也可以是文件等他存儲方式,如下:
要操作xml文件中contact節(jié)點下的name節(jié)點,可以構建這樣的路徑:/contact/name
如果要把一個字符串轉換成Uri,可以使用Uri類中的parse()方法,如下:
Uri uri = Uri.parse("content://com.changcheng.provider.contactprovider/contact")
3、UriMatcher、ContentUrist和ContentResolver簡介
因為Uri代表了要操作的數據,所以我們很經常需要解析Uri,并從 Uri中獲取數據。Android系統(tǒng)提供了兩個用于操作Uri的工具類,分別為UriMatcher 和ContentUris 。掌握它們的使用,會便于我們的開發(fā)工作。
UriMatcher:用于匹配Uri,它的用法如下:
1.首先把你需要匹配Uri路徑全部給注冊上,如下:
//常量UriMatcher.NO_MATCH表示不匹配任何路徑的返回碼(-1)。
UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//如果match()方法匹配content://com.changcheng.sqlite.provider.contactprovider /contact路徑,返回匹配碼為1
uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact”, 1);//添加需要匹配uri,如果匹配就會返回匹配碼
//如果match()方法匹配 content://com.changcheng.sqlite.provider.contactprovider/contact/230路徑,返回匹配碼為2
uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact/#”, 2);//#號為通配符
2.注冊完需要匹配的Uri后,就可以使用uriMatcher.match(uri)方法對輸入的Uri進行匹配,如果匹配就返回匹配碼,匹配碼是調用 addURI()方法傳入的第三個參數,假設匹配 content://com.changcheng.sqlite.provider.contactprovider/contact路徑,返回的匹配碼為1。
ContentUris:用于獲取Uri路徑后面的ID部分,它有兩個比較
[android面試寶典]
【android面試寶典】相關文章:
騰訊android面試10-22
java面試寶典最新10-10
成功面試貼士 面試必成寶典08-03
騰訊 面試題 android10-25
android面試題(2)10-15
android面試題(5)08-19
android面試題(11)10-19
android面試題(9)08-13
android面試題(6)10-15
android面試題及答案精選10-20