日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Android面试题目(1-2-3--7)

發(fā)布時間:2024/3/26 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android面试题目(1-2-3--7) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

網(wǎng)上收集的Android 題目一

1、Activity生命周期說下,出現(xiàn)異常主要在那個階段處理?

2、數(shù)據(jù)存儲有哪幾種方式?說過你用過哪些,做了哪些相關(guān)的項目?Sqlite用過說下?
3、Adapter原理說下。適配器具體用來干什么的?復(fù)寫的getView方法返回的類型是什么?繼承之后重載的構(gòu)造器里面的參數(shù)有哪些?
4、通訊錄里面的聯(lián)系人是怎么拿出來的?又是怎么管理的?短信又是怎么管理的?
5、如果讓你做一個通訊錄的話,怎么讓你和自帶的并用,并且默認(rèn)情況下還是使用你做的App?


1.為了降低Android程序的內(nèi)存使用峰值和APK文件的大小,我們一般使用_____________工具對資源圖進(jìn)行額外處理。

draw9patch.bat
2.Android系統(tǒng)會自動派發(fā)各種事件,事件從觸發(fā)到相應(yīng)的程序相應(yīng)的派發(fā)順序是_________。

參考“Android內(nèi)核剖析-Framework基本框架”,對于按鍵消息,首先產(chǎn)生KeyQ(KeyInputQueue)壓入數(shù)據(jù)隊列QueuedEvent,由InputDispatchThread分發(fā)到->WindowManagerService,Wms在通過與當(dāng)前窗口ViewRoot中所綁定的binder,將消息放入ActivityThread的MessageQueue中->ActivityThread處理隊列中的消息->Activity->...
3.發(fā)布Android程序時,APK文件要先簽名,再用Zipalign做4字節(jié)對齊。( )

對,zipalign是在APK簽名后,進(jìn)行優(yōu)化的;

一般情況,使用 zipalign -f 4 package.apk.unaligned package.apk.aligned

-f代表強制覆蓋,4代表對齊位,4代表32位對齊;
4.實現(xiàn)多個進(jìn)程共享數(shù)據(jù)的時候,只要設(shè)置AndroidManifest文件的shareUserId屬性即可,簽名可以不一致( )。

5.在JNI的實現(xiàn)代碼中,如果要實現(xiàn)跨線程調(diào)用JNI接口,我們需要先調(diào)用jni.h中的_________函數(shù),跨線程調(diào)用JNI接口完畢后,再調(diào)用jni.h中的____________________函數(shù)來善后。

GetJavaVM, DestroyJavaVM
6.如果一個Activity被設(shè)置為“singleTop”模式并且還駐留在后臺,此時再通過startActivity啟動這個Activity時,Activity的_______________成員函數(shù)會被最先回調(diào)到,我們一般在這個回調(diào)函數(shù)中來處理相關(guān)邏輯。

網(wǎng)上收集Android 題目二


1.【單選】Android中常用的五種布局,其中不包括(D

A.FrameLayout? B.RelativeLayout?? C.AbsoluteLayout?? D.Page layout
2.單選Android? XML解析主要有三種方式,其中不包括(D? A.SAX????????? B.DOM????????????? C. PULL??????????? D.KXML

3.【多選】activity的啟動模式有哪些?(ABCD A.standard???? B.singleTop??????? C. singleTask????? D.singleInstance
4.單選一條最長的短信息約占多少byte? (A )
?????? A.中文70(包括標(biāo)點),英文160,160個字節(jié)??? B.中文60(包括標(biāo)點),英文160,160個字節(jié) C.中文70(包括標(biāo)點),英文170,170個字節(jié)??? D.中文60(不包括標(biāo)點),英文160,160個字節(jié)
5.單選下列哪些語句關(guān)于內(nèi)存回收的說明是正確的?(B? ) A.程序員必須創(chuàng)建一個線程來釋放內(nèi)存?????????? B.內(nèi)存回收程序負(fù)責(zé)釋放無用內(nèi)存 C.內(nèi)存回收程序允許程序員直接釋放內(nèi)存?????? D.內(nèi)存回收程序可以在指定的時間釋放內(nèi)存對象 6.單選Math.round(11.5)和Math.round(-11.5)分別等于多少?(C ) A.11,-11????????? B.11,-12????????? C. 12,-11???????? D.12,-12 解答:如果是正數(shù),小數(shù)點后一位>=5,則值為整數(shù)部分+1,如Math.round(11.6)=12 如果是負(fù)數(shù),小數(shù)點后一位>5,則值為整數(shù)部分-1,如Math.round(-11.6)=-12 如果是正數(shù),小數(shù)點后一位<5,則值為整數(shù)部分,如Math.round(11.4)=11 如果是負(fù)數(shù),小數(shù)點后一個<=5,則值為整數(shù)部分,如Math.round(-11.4)=-11
7.多選Intent傳遞數(shù)據(jù)時,下列的數(shù)據(jù)類型哪些可以被傳遞?(ABCD ) A.Serializable???? B.Charsequence???? C. Parcelable????? D.Bundle

8.多選android中的動畫分類有?(AC ) A.Tween??????????? B.Draw???????????? C. Frame?????????? D.Animation
9.單選下面退出Activity錯誤的方法是?(A ) A.System.exit()??? B.onStop()???????? C.拋異常強制退出?? D.Finish()
10.單選下面對自定義style的方式正確的是?(C ) A. <style name="myStyle"> <item name="android:layout_width">fill_parent</item> </style> B. <resources> <item name="android:layout_width">fill_parent</item> </resources> C. <resources> <style name="myStyle"> <item name="android:layout_width">fill_parent</item> </style> </resources> D. <resources> <style name="android:layout_width">fill_parent</style> </resources>


????11.【簡答題】在Android中,請簡述jni的條用過程。

1)安裝和現(xiàn)在Cygwin,下載Android NDK 2)在NDK項目中JNI接口的設(shè)計 3)使用C/C++實現(xiàn)本地方法 4)JNI生成動態(tài)鏈接庫.so文件 5)將動態(tài)鏈接庫復(fù)制到j(luò)ava工程,在java工程中調(diào)用,運行java工程即可

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Android面試題 1.??? 請描述下Activity的生命周期。 2.??? 如果后臺的Activity由于某原因被系統(tǒng)回收了,如何在被系統(tǒng)回收之前保存當(dāng)前狀態(tài)? 3.??? 如何將一個Activity設(shè)置成窗口的樣式。(Edited?by?Sodino) 4.??? 如何退出Activity?如何安全退出已調(diào)用多個Activity的Application? 5.??? 請介紹下Android中常用的五種布局。 6.??? 請介紹下Android的數(shù)據(jù)存儲方式。(Edited?by?Sodino) 7.??? 請介紹下ContentProvider是如何實現(xiàn)數(shù)據(jù)共享的。(Edited?by?Sodino) 8.??? 如何啟用Service,如何停用Service。(Edited?by?Sodino) 9.??? 注冊廣播有幾種方式,這些方式有何優(yōu)缺點?請談?wù)凙ndroid引入廣播機制的用意。 10.??? 請解釋下在單線程模型中Message、Handler、Message?Queue、Looper之間的關(guān)系。 11.??? AIDL的全稱是什么?如何工作?能處理哪些類型的數(shù)據(jù)? 12.??? 請解釋下Android程序運行時權(quán)限與文件系統(tǒng)權(quán)限的區(qū)別。(Edited?by?Sodino) 13.??? 系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請說明原由。 14.??? 有一個一維整型數(shù)組int[]data保存的是一張寬為width,高為height的圖片像素值信息。請寫一個算法,將該圖片所有的白色不透明(0xffffffff)像素點的透明度調(diào)整為50%。 15.??? 你如何評價Android系統(tǒng)?優(yōu)缺點。



1、?Android?dvm的進(jìn)程和Linux的進(jìn)程,?應(yīng)用程序的進(jìn)程是否為同一個概念
DVM指dalivk的虛擬機。每一個Android應(yīng)用程序都在它自己的進(jìn)程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每一個DVM都是在Linux?中的一個進(jìn)程,所以說可以認(rèn)為是同一個概念。

2、sim卡的EF?文件有何作用
sim卡的文件系統(tǒng)有自己規(guī)范,主要是為了和手機通訊,sim本身可以有自己的操作系統(tǒng),EF就是作存儲并和手機通訊用的

3、嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種,各有何特性??
頁式,段式,段頁,用到了MMU,虛擬空間等技術(shù)

4、什么是嵌入式實時操作系統(tǒng),?Android?操作系統(tǒng)屬于實時操作系統(tǒng)嗎?
嵌入式實時操作系統(tǒng)是指當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時,能夠接受并以足夠快的速度予以處理,其處理的結(jié)果又能在規(guī)定的時間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)作出快速響應(yīng),并控制所有實時任務(wù)協(xié)調(diào)一致運行的嵌入式操作系統(tǒng)。主要用于工業(yè)控制、軍事設(shè)備、航空航天等領(lǐng)域?qū)ο到y(tǒng)的響應(yīng)時間有苛刻的要求,這就需要使用實時系統(tǒng)。又可分為軟實時和硬實時兩種,而android是基于linux內(nèi)核的,因此屬于軟實時。

5、一條最長的短信息約占多少byte?
中文70(包括標(biāo)點),英文160個字節(jié)

6、?android中的動畫有哪幾類,它們的特點和區(qū)別是什么?
兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現(xiàn)方式可以使視圖組件移動、放大、縮小以及產(chǎn)生透明度的變化;另一種Frame動畫,傳統(tǒng)的動畫方法,通過順序的播放排列好的圖片來實現(xiàn),類似電影。

7、handler機制的原理
andriod提供了?Handler?和?Looper?來滿足線程間的通信。Handler?先進(jìn)先出原則。Looper類用來管理特定線程內(nèi)對象之間的消息交換(Message?Exchange)。
1)Looper:?一個線程可以產(chǎn)生一個Looper對象,由它來管理此線程里的Message?Queue(消息隊列)。
2)Handler:?你可以構(gòu)造Handler對象來與Looper溝通,以便push新消息到Message?Queue里;或者接收Looper從Message?Queue取出)所送來的消息。
3)?Message?Queue(消息隊列):用來存放線程放入的消息。
4)線程:UI?thread?通常就是main?thread,而Android啟動程序時會替它建立一個Message?Queue。

8、說說mvc模式的原理,它在android中的運用
MVC(Model_view_contraller)”?模型_視圖_控制器”。?MVC應(yīng)用程序總是由這三個部分組成。Event(事件)導(dǎo)致Controller改變Model或View,或者同時改變兩者。只要?Controller改變了Models的數(shù)據(jù)或者屬性,所有依賴的View都會自動更新。類似的,只要Controller改變了View,View會
從潛在的Model中獲取數(shù)據(jù)來刷新自己。
View重繪和內(nèi)存泄露的好像是面試經(jīng)常問的問題
1.?View的刷新:
在需要刷新的地方,使用handle.sendmessage發(fā)送信息,然后在handle的getmessage里面執(zhí)行invaliate或者postinvaliate.
2.?GC內(nèi)存泄露
出現(xiàn)情況:
1.數(shù)據(jù)庫的cursor沒有關(guān)閉
2.構(gòu)造adapter時,沒有使用緩存contentview
衍生listview的優(yōu)化問題-----減少創(chuàng)建view的對象,充分使用contentview,可以使用一靜態(tài)類來優(yōu)化處理getview的過程/
3.Bitmap對象不使用時采用recycle()釋放內(nèi)存
4.activity中的對象的生命周期大于activity
調(diào)試方法:?DDMS==>?HEAPSZIE==>dataobject==>[Total?Size]

還有其他問題,大家歡迎提出阿,可以是整體架構(gòu)的,還有這個Hal層.
這篇文章會涉及到以下幾個內(nèi)容
一?Activity的生命周期
二?讓Activity變成一個窗口:Activity屬性設(shè)定
三?你后臺的Activity被系統(tǒng)
回收怎么辦:onSaveInstanceState
四?調(diào)用與被調(diào)用:我們的通信使者?-?Intent
一?Activity的生命周期
和其他手機?平臺?的應(yīng)用程序一樣,Android的應(yīng)用程序的生命周期是被統(tǒng)一掌控的,也就是說我們寫的應(yīng)用程序命運掌握在別人(系統(tǒng))的手里,我們不能改變它,只能學(xué)習(xí)并適應(yīng)它。
簡單地說一下為什么是這樣:我們手機在運行
一個應(yīng)用程序的時候,有可能打進(jìn)來電話發(fā)進(jìn)來短信,或者沒有電了,這時候程序都會被中斷,優(yōu)先去服務(wù)電話的基本功能,另外系統(tǒng)也不允許你占用太多資源,至少要保證電話功能吧,所以資源不足的時候也就有可能被干掉。言歸正傳,Activity的基本生命周期如下代碼所示:
Java?代碼
public?class?MyActivity?extends?Activity
{
protected?void?onCreate(Bundle?savedInstanceState);
protected?void?onStart();
protected?void?onResume();
protected?void?onPause();
protected?void?onStop();
protected?void?onDestroy();
}
你自己寫的Activity會按需要
重?載這些方法,onCreate是免不了的,在一個Activity正常啟動的過程中,他們被調(diào)用的順序是?onCreate?->?onStart?->onResume,?在Activity被干掉的時候順序是onPause?->?onStop?->?onDestroy?,這樣就是一個完整的生命周期,但是有人問了
,程序正運行著呢來電話了,這個程序咋辦?中止了唄,如果中止的時候新出的一個Activity是全屏的那么:onPause->onStop?,恢復(fù)的時候onStart->onResume?,如果打斷
這個應(yīng)用程序的是一個Theme為Translucent?或者Dialog?的Activity那么只是onPause?,恢復(fù)
的時候onResume?。
詳細(xì)介紹一下這幾個方法中系統(tǒng)在做什么以及我們應(yīng)該做什么:
onCreate:
在這里創(chuàng)建界面,做一些數(shù)據(jù)的初始化工作
onStart:
到這一步變成用戶可見不可交互的
onResume:
變成和用戶可交互的,(在activity?棧系統(tǒng)通過棧的方式管理這些個Activity的最上面,運行完彈出棧,則回到上一個Activity)
onPause:
到?這一步是可見但不可交互的,系統(tǒng)會停止動畫等消耗CPU?的事情從上文的描述已經(jīng)知道,應(yīng)該在這里保存你的一些數(shù)據(jù),因為這個時候你的程序的優(yōu)先級降低,有可能被系統(tǒng)收回。在這里保存的數(shù)據(jù),應(yīng)該在?onResume里讀出來,注意:這個方法里做的事情時間要短,因為下一個activity不會等到這個方法完成才啟動
onstop:
變得不可見,被下一個activity覆蓋了
onDestroy:?這是activity被干掉前最后一個被調(diào)用方法了,可能是外面類調(diào)用finish方法或者是系統(tǒng)為了節(jié)省空間將它暫時性的干掉,可以用?isFinishing()來判斷它,如果你有一個Progress?Dialog在線程中轉(zhuǎn)動,請在onDestroy里把他cancel掉,不然等線程結(jié)束的時候,調(diào)用Dialog的cancel方法會拋異常的。
onPause,onstop,?onDestroy,三種狀態(tài)下?activity都有可能被系統(tǒng)干掉為了保證程序的正確性,你要在onPause()里寫上持久層操作的代碼,將用戶編輯的內(nèi)容都保存到存儲介質(zhì)上(一般?都是數(shù)據(jù)庫)。實際工作中因為生命周期的變化而帶來的問題也很多,比如你的應(yīng)用程序起了新的線程在跑,這時候中斷了,你還要去維護(hù)那個線程,是暫停還是殺?掉還是數(shù)據(jù)回滾,是吧?因為Activity可能被殺掉,所以線程中使用的變量和一些界面元素就千萬要注意了,一般我都是采用Android的消息機制?[Handler,Message]來處理多線程和界面交互的問題。這個我后面會講一些,最近因為這些東西頭已經(jīng)很大了,等我理清思緒再跟大家分享。

二?讓Activity變成一個窗口:Activity屬性設(shè)定
講點輕松的吧,可能有人希望做出來的應(yīng)用程序是一個漂浮在手機主界面的東西,那么很?簡單你只需要設(shè)置一下Activity的主題就可以了在AndroidManifest.xml?中定義?Activity的地方一句話:
Xml代碼
android
:theme="@android:style/Theme.Dialog"
android:theme="@android:style/Theme.Dialog"
這就使你的應(yīng)用程序變成對話框的形式彈出來了,或者?Xml代碼
android:theme="@android:style/Theme.Translucent"
android:theme="@android:style/Theme.Translucent"
就?變成半透明的,[友情提示-.-]類似的這種activity的屬性可以在android.R.styleable?類的AndroidManifestActivity?方法中看到,AndroidManifest.xml中所有元素的屬性的介紹都可以參考這個類android.R.styleable
上面說的是屬性名稱,具體有什么值是在android.R.style中
可以看到,比如這個"@android:style/Theme.Dialog"就對應(yīng)于android.R.style.Theme_Dialog?,('_'換成'.'?<--注意:這個是文章內(nèi)容不是笑臉)就可以用在描述文件
中了,找找類定義和描述文件中的對應(yīng)關(guān)系就都明白了。
三?你后臺的Activity被系統(tǒng)回收怎么辦:onSaveInstanceState
當(dāng)你的程序中某一個Activity?A?在運行時中,主動或被動地運行另一個新的Activity?B?這個時候A會執(zhí)行
Java代碼
public
void?onSaveInstanceState(Bundle?outState)?{
super.onSaveInstanceState(outState);
outState.putLong("id",?1234567890);
}
public?void
onSaveInstanceState(Bundle?outState)?{
B?完成以后又會來找A,?這個時候就有兩種情況,一種是A被回收,一種是沒有被回收,被回?收的A就要重新調(diào)用onCreate()方法,不同于直接啟動的是這回?onCreate()里是帶上參數(shù)?savedInstanceState,沒被收回的就還是onResume就好了。
savedInstanceState是一個Bundle對象,你基本上可以把他理解為系統(tǒng)幫你維護(hù)的一個Map對象。在onCreate()里你可能會用到它,如果正常啟動onCreate就不會有它,所以用的時候要判斷一下是否為空。
Java代碼
if(savedInstanceState?!=null){
long?id?=savedInstanceState.getLong("id");
}
if(savedInstanceState?!=null){
就像官方的Notepad教程
里的情況,你正在編輯某一個note,突然被中斷,那么就把這個note的id記住,再起來的時候就可以根據(jù)這個id去把那個note取出來,程序就完整一些。這也是看你的應(yīng)用需不需要保存什么,比如你的界面就是讀取一個列表,那就不需要特殊記住什么,哦,
沒準(zhǔn)你需要記住滾動條的位置...
四?調(diào)用與被調(diào)用:我們的通信使者Intent
要?說Intent了,Intent就是這個這個意圖,應(yīng)用程序間Intent進(jìn)行交流,打個電話啦,來個電話啦都會發(fā)Intent,?這個是Android架構(gòu)的松耦合的精髓部分,大大提高了組件的復(fù)用性,比如你要在你的應(yīng)用程序中點擊按鈕,給某人打電話,很簡單啊,看下代碼先:
Java代碼?:
Intent?intent?=?new?Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+?number));
startActivity(intent);?復(fù)制代碼
扔出這樣一個意圖,系統(tǒng)看到了你的意圖就喚醒了電話撥號程序,打出來電話。什么讀聯(lián)系人,發(fā)短信啊,郵件啊,統(tǒng)統(tǒng)只需要扔出intent就好了,這個部分設(shè)計地確實很好啊。
那Intent通過什么來告訴系統(tǒng)需要誰來接受他呢?
通常使用Intent有兩種方法,第一種是直接說明需要哪一個類來接收代碼如下:
Java代碼
Intent?intent?=?new?Intent(this,MyActivity.class);
intent.getExtras().putString("id","1");
startActivity(intent);
Intent?intent?=?new?Intent(this,MyActivity.class);intent.getExtras().putString("id","1");tartActivity(intent);復(fù)制代碼
第一種方式很明顯,直接指定了MyActivity為接受者,并且傳了一些數(shù)據(jù)給MyActivity,在MyActivity里可以用getIntent()來的到這個intent和數(shù)據(jù)。
第二種就需要先看一下AndroidMenifest中的intentfilter的配置了
Xml代碼
<intent-filter>
<action?android:name="android.intent.action.VIEW"?/>
<action?android:value="android.intent.action.EDIT"?/>
<action?android:value="android.intent.action.PICK"?/>
<category?android:name="android.intent.category.DEFAULT"/>
<data?android:mimeType="vnd.android.cursor.dir/vnd.google.note"?/>
</intent-filter>
<intent-filter>
<action?android:name="android.intent.action.VIEW"/>
<action?android:value="android.intent.action.EDIT"?/>
<action?android:value="android.intent.action.PICK"?/>
<category?android:name="android.intent.category.DEFAULT"?/>
<data?android:mimeType="vnd.android.cursor.dir/vnd.google.note"?/>
</intent-filter>
這里面配置用到了action,?data,?category這些東西,那么聰明的你一定想到intent里也會有這些東西,然后一匹配不就找到接收者了嗎?
action其實就是一個意圖的字符串名稱。
上?面這段intent-filter的配置文件說明了這個Activity可以接受不同的?Action,當(dāng)然相應(yīng)的程序邏輯也不一樣咯,提一下那個?mimeType,他是在
ContentProvider里定義的,你要是自己實現(xiàn)一個ContentProvider就知道了,必須指定?mimeType才能讓數(shù)據(jù)被別人使用。
不知道原理說明白沒,總結(jié)一句,就是你調(diào)用別的界面不是直接new那個界面,而是通過扔出一個intent,讓系統(tǒng)幫你去調(diào)用那個界面,這樣就多么松藕合啊,而且符合了生命周期被系統(tǒng)管理的原則。
想知道category都有啥,Android為你預(yù)先定制好的action都有啥等等,請親自訪問官方鏈接Intent
ps:想知道怎么調(diào)用系統(tǒng)應(yīng)用程序的同學(xué),可以仔細(xì)看一下你的logcat,每次運行一個程序的時候是不是有一些信息比如:
Starting?activity:?Intent?{action=android.intent.action.MAINcategories={android.intent.category.LAUNCHER}flags=0x10200000comp={com.android.camera/com.android.camera.GalleryPicker}?}

再對照一下Intent的一些set方法,就知道怎么調(diào)用咯,希望你喜歡:)
一,listview你是怎么優(yōu)化的。
二,view的刷新,之前說過
三,IPC及原理
四,Android多線程
五,Android為什么要設(shè)計4大組件,他們之間的聯(lián)系,不設(shè)計行不行(主要是為了實現(xiàn)MVC模式,然而java中最難的模式也是這個,很少有產(chǎn)品能將這個模式做得很好【Technicolor的面試官問的這個】)
六,service的周期,activity的周期,談下你對Android內(nèi)部應(yīng)用的了解,比如他做電話,以及聯(lián)系人等等應(yīng)用。框架層有很多東西還是多看看,熟悉Android怎么做的,不管你做應(yīng)用程開發(fā)還是應(yīng)用框架層開發(fā)很有好處的。

1.View如何刷新?
2.DDMS與TraceView的區(qū)別?
3.activity被回收了怎么辦?
4.在Java中如何引入C語言?
參考答案?:
1.View?可以調(diào)用invalidate()和postInvalidate()這兩個方法刷新
2.DDMS是一個程序執(zhí)行查看器,在里面你可以看見線程和堆棧等信息,TraceView是程序性能分析器
3.activity回收了,那就只有另起了
4.java調(diào)用C語言程序,可以用JNI接口來實現(xiàn)
上面答案僅作參考,畢竟我個人能力也有限嘛,難免會回答錯誤,呵呵.....
解答:
1.View受系統(tǒng)刷新(系統(tǒng)內(nèi)部有個循環(huán),監(jiān)控事件、做業(yè)務(wù)處理、繪UI),可以用postInvalidate()促使系統(tǒng)刷新。
2.(還真不知道)
3.請參照Activity生命周期,如果被系統(tǒng)destroy了,也就是說的回收,只有從新start了
4.通過JNI調(diào)用。建議閱讀《The?Java?Native?InterfaceProgrammer's?Guide?and?Specification》,英文版的,從sun網(wǎng)站下吧。

網(wǎng)上收集Android 題目三

1、?Android?dvm的進(jìn)程和Linux的進(jìn)程, 應(yīng)用程序的進(jìn)程是否為同一個概念

  DVM指dalivk的虛擬機。每一個Android應(yīng)用程序都在它自己的進(jìn)程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每一個DVM都是在Linux 中的一個進(jìn)程,所以說可以認(rèn)為是同一個概念。

  2、sim卡的EF 文件有何作用

  sim卡的文件系統(tǒng)有自己規(guī)范,主要是為了和手機通訊,sim本 身可以有自己的操作系統(tǒng),EF就是作存儲并和手機通訊用的

  3、嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種, 各有何特性

  頁式,段式,段頁,用到了MMU,虛擬空間等技術(shù)

  4、 什么是嵌入式實時操作系統(tǒng), Android 操作系統(tǒng)屬于實時操作系統(tǒng)嗎?

  嵌入式實時操作系統(tǒng)是指當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時,能夠接受并以足夠快的速度予以處理,其處理的結(jié)果又能在規(guī)定的時間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)作出快速響應(yīng),并控制所有實時任務(wù)協(xié)調(diào)一致運行的嵌入式操作系統(tǒng)。主要用于工業(yè)控制、 軍事設(shè)備、 航空航天等領(lǐng)域?qū)ο到y(tǒng)的響應(yīng)時間有苛刻的要求,這就需要使用實時系統(tǒng)。又可分為軟實時和硬實時兩種,而android是基于linux內(nèi)核的,因此屬于軟實時。

  5、一條最長的短信息約占多少byte?

  中文70(包括標(biāo)點),英文160,160個字節(jié)。

  6、 android中的動畫有哪幾類,它們的特點和區(qū)別是什么?

  兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現(xiàn)方式可以使視圖組件移動、放大、縮小以及產(chǎn)生透明度的變化;另一種Frame動畫,傳統(tǒng)的動畫方法,通過順序的播放排列好的圖片來實現(xiàn),類似電影。

  7、handler機制的原理

  andriod提供了 Handler 和 Looper 來滿足線程間的通信。Handler 先進(jìn)先出原則。Looper類用來管理特定線程內(nèi)對象之間的消息交換(Message Exchange)。

  1)Looper: 一個線程可以產(chǎn)生一個Looper對象,由它來管理此線程里的Message Queue(消息隊列)。

  2)Handler: 你可以構(gòu)造Handler對象來與Looper溝通,以便push新消息到Message Queue里;或者接收Looper從Message Queue取出)所送來的消息。

  3) Message Queue(消息隊列):用來存放線程放入的消息。

  4)線程:UI thread 通常就是main thread,而Android啟動程序時會替它建立一個Message Queue。

?

  8、說說mvc模式的原理,它在android中的運用

???????? android的官方建議應(yīng)用程序的開發(fā)采用mvc模式。何謂mvc?

  mvc是model,view,controller的縮寫,mvc包含三個部分:

  l模型(model)對象:是應(yīng)用程序的主體部分,所有的業(yè)務(wù)邏輯都應(yīng)該寫在該層。

  l視圖(view)對象:是應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分。也是在整個mvc架構(gòu)中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結(jié)果。

  l控制器(control)對象:是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新model對象狀態(tài)的部分,控制器更重要的一種導(dǎo)航功能,想用用戶出發(fā)的相關(guān)事件,交給m哦得了處理。

  android鼓勵弱耦合和組件的重用,在android中mvc的具體體現(xiàn)如下:

   1)視圖層(view):一般采用xml文件進(jìn)行界面的描述,使用的時候可以非常方便的引入,當(dāng)然,如何你對android了解的比較的多了話,就一定 可以想到在android中也可以使用JavaScript+html等的方式作為view層,當(dāng)然這里需要進(jìn)行Java和javascript之間的通 信,幸運的是,android提供了它們之間非常方便的通信實現(xiàn)。

  2)控制層(controller):android的控制層的重 任通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫代碼,要通過activity交割model業(yè)務(wù)邏輯層處理, 這樣做的另外一個原因是android中的acitivity的響應(yīng)時間是5s,如果耗時的操作放在這里,程序就很容易被回收掉。

  3)模型層(model):對數(shù)據(jù)庫的操作、對網(wǎng)絡(luò)等的操作都應(yīng)該在model里面處理,當(dāng)然對業(yè)務(wù)計算等操作也是必須放在的該層的。

?

?

  9、Activity的生命周期

  和其他手機 平臺 的應(yīng)用 程序 一樣,Android的應(yīng)用程序 的生命周期是被統(tǒng)一掌控 的,也

  就是說我們寫的應(yīng)用程序命運掌握在別人(系統(tǒng))的手里,我們不能改變它,只能學(xué)習(xí) 并

  適應(yīng)它。

  簡單地說一下為什么是這樣:我們手機在運行 一個應(yīng)用程序的時候,有可能打進(jìn)來電話

  發(fā)進(jìn)來短信 ,或者沒有電了,這時候程序都會被中斷,優(yōu)先去服務(wù)電話的基本功能 ,另

  外系統(tǒng)也不允許你占用太多資源 ,至少要保證電話功能吧,所以資源不足的時候也就有可

  能被干掉。

  言歸正傳,Activity的基本生命周期如下代碼 所示:

  Java代碼

?

  public

  class MyActivity extends Activity {

  protected

  void onCreate(Bundle savedInstanceState);

  protected

  void onStart();

  protected

  void onResume();

  protected

  void onPause();

  protected

  void onStop();

protected

  void onDestroy();

  }

  public class MyActivity extends Activity { protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); }

  你自己寫的Activity會按需要 重載這些方法,onCreate是免不了的,在一個Activity正常啟動的過程中,他們被調(diào)用的順序是 onCreate -> onStart -> onResume, 在Activity被干掉的時候順序是onPause -> onStop -> onDestroy ,這樣就是一個完整的生命周期,但是有人問了 ,程序正運行著呢來電話了,這個程序咋辦?中止了唄,如果中止的時候新出的一個Activity是全屏的那么:onPause->onStop ,恢復(fù)的時候onStart->onResume ,如果打斷 這個應(yīng)用程序的是一個Theme為Translucent 或者Dialog 的Activity那么只是onPause ,恢復(fù) 的時候onResume 。

  詳細(xì)介紹一下這幾個方法中系統(tǒng)在做什么以及我們應(yīng)該做什么:

  onCreate: 在這里創(chuàng)建界面 ,做一些數(shù)據(jù) 的初始化工作

  onStart: 到這一步變成用戶可見不可交互 的

  onResume: 變成和用戶可交互 的,(在activity 棧系統(tǒng)通過棧的方式管理這些個

  Activity的最上面,運行完彈出棧,則回到上一個Activity)

  onPause: 到這一步是可見但不可交互 的,系統(tǒng)會停止動畫 等消耗CPU 的事情

  從上文的描述已經(jīng)知道,應(yīng)該在這里保存你的一些數(shù)據(jù),因為這個時候

  你的程序的優(yōu)先級降低,有可能被系統(tǒng)收回。在這里保存的數(shù)據(jù),應(yīng)該在

  onResume里讀出來,注意:這個方法里做的事情時間要短,因為下一

  個activity不會等到這個方法完成才啟動

  onstop: 變得不可見 ,被下一個activity覆蓋了

  onDestroy: 這是activity被干掉前最后一個被調(diào)用方法了,可能是外面類調(diào)用finish方

  法或者是系統(tǒng)為了節(jié)省空間將它暫時性的干掉,可以用isFinishing()來判

  斷它,如果你有一個Progress Dialog在線程中轉(zhuǎn)動,請在onDestroy里

  把他cancel掉,不然等線程結(jié)束的時候,調(diào)用Dialog的cancel方法會拋

  異常的。

  onPause,onstop, onDestroy,三種狀態(tài) 下 activity都有可能被系統(tǒng)干掉

為了保證程序的正確性,你要在onPause()里寫上持久層操作的代碼,將用戶編輯的內(nèi)容都保存到存儲介質(zhì)上(一般都是數(shù)據(jù)庫 )。實際工作中因為生命周期的變化而帶來的問題也很多,比如你的應(yīng)用程序起了新的線程在跑,這時候中斷了,你還要去維護(hù)那個線程,是暫停還是殺掉還是數(shù)據(jù) 回滾,是吧?因為Activity可能被殺掉,所以線程中使用的變量和一些界面元素就千萬要注意了,一般都是采用Android的消息機制 [Handler,Message]來處理多線程和界面交互的問題。

  10、讓Activity變成一個窗口:Activity屬性設(shè)定

  講點輕松的吧,可能有人希望做出來的應(yīng)用程序是一個漂浮在手機主界面的東西,那么很

  簡單你只需要設(shè)置 一下Activity的主題就可以了在AndroidManifest.xml 中定義 Activity的

  地方一句話:

  Xml代碼

?

  android :theme="@android:style/Theme.Dialog"

  android:theme="@android:style/Theme.Dialog"

  這就使你的應(yīng)用程序變成對話框的形式彈出來了,或者

  Xml代碼

?

  android:theme="@android:style/Theme.Translucent"

  android:theme="@android:style/Theme.Translucent"

  就變成半透明的,[友情提示-.-]類似的這種activity的屬性可以在android.R.styleable 類的AndroidManifestActivity 方法中看到,AndroidManifest.xml中所有元素的屬性的介紹都可以參考這個類android.R.styleable

  上面說的是屬性名稱,具體有什么值是在android.R.style中 可以看到,比如這個"@android:style/Theme.Dialog" 就對應(yīng)于android.R.style.Theme_Dialog ,('_'換成'.' < --注意:這個是文章內(nèi)容不是笑臉)就可以用在描述文件 中了,找找類定義和描述文件中的對應(yīng)關(guān)系就都明白了。

  11、 你后臺的Activity被系統(tǒng)回收怎么辦:onSaveInstanceState

當(dāng)你的程序中某一個Activity A 在運行時中,主動或被動地運行另一個新的Activity B

  這個時候A會執(zhí)行

  Java代碼

?

  public

  void onSaveInstanceState(Bundle outState) {

  super.onSaveInstanceState(outState);

  outState.putLong("id", 1234567890);

  }

  B 完成以后又會來找A, 這個時候就有兩種情況,一種是A被回收,一種是沒有被回收,被回

  收的A就要重新調(diào)用onCreate()方法,不同于直接啟動的是這回onCreate()里是帶上參數(shù)

  savedInstanceState,沒被收回的就還是onResume就好了。

  savedInstanceState是一個Bundle對象,你基本上可以把他理解為系統(tǒng)幫你維護(hù)的一個Map對象。在onCreate()里你可能會用到它,如果正常啟動onCreate就不會有它,所以用的時候要判斷一下是否為空。

  Java代碼

?

  if(savedInstanceState != null){

  long id = savedInstanceState.getLong("id");

  }

  就像官方的Notepad教程 里的情況,你正在編輯某一個note,突然被中斷,那么就把這個note的id記住,再起來的時候就可以根據(jù)這個id去把那個note取出來,程序就完整一些。這也是看你的應(yīng)用需不需要保存什么,比如你的界面就是讀取一個列表,那就不需要特殊記住什么,哦, 沒準(zhǔn)你需要記住滾動條的位置...

  12、 調(diào)用與被調(diào)用:我們的通信使者Intent

  要說Intent了,Intent就是這個這個意圖 ,應(yīng)用程序間Intent進(jìn)行交流,打個電話啦,來個

  電話啦都會發(fā)Intent, 這個是Android架構(gòu)的松耦合的精髓部分,大大提高了組件的復(fù)用性,比如你要在你的應(yīng)用程序中點擊按鈕,給某人打電話,很簡單啊,看下代碼先:

  Java代碼

?

 ?? Intent intent = new Intent();

  intent.setAction(Intent.ACTION_CALL);

  intent.setData(Uri.parse("tel:" + number));

  startActivity(intent);

?

  扔出這樣一個意圖,系統(tǒng)看到了你的意圖就喚醒了電話撥號程序,打出來電話。什么讀聯(lián)系人,發(fā)短信啊,郵件啊,統(tǒng)統(tǒng)只需要扔出intent就好了,這個部分設(shè)計 地確實很好啊。

  那Intent通過什么來告訴系統(tǒng)需要誰來接受他呢?

  通常使用Intent有兩種方法,第一種是直接說明需要哪一個類來接收代碼如下:

  Java代碼

?

  Intent intent = new Intent(this, MyActivity.class);

  intent.getExtras().putString("id", "1");

  tartActivity(intent);

?

  第一種方式很明顯,直接指定了MyActivity為接受者,并且傳了一些數(shù)據(jù)給MyActivity,在MyActivity里可以用getIntent()來的到這個intent和數(shù)據(jù)。

  第二種就需要先看一下AndroidMenifest中的intentfilter的配置了

  Xml代碼

  < intent-filter>

  < action

  android:name="android.intent.action.VIEW"

  />

  < action

  android:value="android.intent.action.EDIT"

  />

  < action

  android:value="android.intent.action.PICK"

  />

  < category

  android:name="android.intent.category.DEFAULT"

  />

  < data

  android:mimeType="vnd.android.cursor.dir/vnd.google.note"

  />

  < /intent-filter>

  這里面配置用到了action, data, category這些東西,那么聰明的你一定想到intent里也會有這些東西,然后一匹配不就找到接收者了嗎?

  action其實就是一個意圖的字符串名稱。

  上面這段intent-filter的配置文件說明了這個Activity可以接受不同的Action,當(dāng)然相應(yīng)的程序邏輯也不一樣咯,提一下那個 mimeType,他是在ContentProvider里定義的,你要是自己實現(xiàn)一個ContentProvider就知道了,必須指定 mimeType才能讓數(shù)據(jù)被別人使用。

  不知道原理說明白沒,總結(jié)一句,就是你調(diào)用別的界面不是直接new那個界面,而是通過扔出一個intent,讓系統(tǒng)幫你去調(diào)用那個界面,這樣就多么松藕合啊,而且符合了生命周期被系統(tǒng)管理的原則。

  想知道category都有啥,Android為你預(yù)先定制好的action都有啥等等,請親自訪問官方鏈接Intent

  ps:想知道怎么調(diào)用系統(tǒng)應(yīng)用程序的同學(xué),可以仔細(xì)看一下你的logcat,每次運行一個程序的時候是不是有一些信息比如:

  Starting activity: Intent { action=android.intent.action.MAINcategories={android.intent.category.LAUNCHER} flags=0x10200000comp={com.android.camera/com.android.camera.GalleryPicker} }

  再對照一下Intent的一些set方法,就知道怎么調(diào)用咯,希望你喜歡:)

?

?

  13. 如何退出Activity?如何安全退出已調(diào)用多個Activity的Application?

? ? ? ?對于單一Activity的應(yīng)用來說,退出很簡單,直接finish()即可。
當(dāng)然,也可以用killProcess()和System.exit()這樣的方法。

但是,對于多Activity的應(yīng)用來說,在打開多個Activity后,如果想在最后打開的Activity直接退出,上邊的方法都是沒有用的,因為上邊的方法都是結(jié)束一個Activity而已。
當(dāng)然,網(wǎng)上也有人說可以。
就好像有人問,在應(yīng)用里如何捕獲Home鍵,有人就會說用keyCode比較KEYCODE_HOME即可,而事實上如果不修改framework,根本不可能做到這一點一樣。
所以,最好還是自己親自試一下。

那么,有沒有辦法直接退出整個應(yīng)用呢?
在2.1之前,可以使用ActivityManager的restartPackage方法。
它可以直接結(jié)束整個應(yīng)用。在使用時需要權(quán)限android.permission.RESTART_PACKAGES。
注意不要被它的名字迷惑。

可是,在2.2,這個方法失效了。
在2.2添加了一個新的方法,killBackgroundProcesses(),需要權(quán)限 android.permission.KILL_BACKGROUND_PROCESSES。
可惜的是,它和2.2的restartPackage一樣,根本起不到應(yīng)有的效果。

另外還有一個方法,就是系統(tǒng)自帶的應(yīng)用程序管理里,強制結(jié)束程序的方法,forceStopPackage()。
它需要權(quán)限android.permission.FORCE_STOP_PACKAGES。
并且需要添加android:sharedUserId="android.uid.system"屬性
同樣可惜的是,該方法是非公開的,他只能運行在系統(tǒng)進(jìn)程,第三方程序無法調(diào)用。
因為需要在Android.mk中添加LOCAL_CERTIFICATE := platform。
而Android.mk是用于在Android源碼下編譯程序用的。

從以上可以看出,在2.2,沒有辦法直接結(jié)束一個應(yīng)用,而只能用自己的辦法間接辦到。

現(xiàn)提供幾個方法,供參考:

1、拋異常強制退出:
該方法通過拋異常,使程序Force Close。
驗證可以,但是,需要解決的問題是,如何使程序結(jié)束掉,而不彈出Force Close的窗口。

2、記錄打開的Activity:
每打開一個Activity,就記錄下來。在需要退出時,關(guān)閉每一個Activity即可。

3、發(fā)送特定廣播:
在需要結(jié)束應(yīng)用時,發(fā)送一個特定的廣播,每個Activity收到廣播后,關(guān)閉即可。

4、遞歸退出
在打開新的Activity時使用startActivityForResult,然后自己加標(biāo)志,在onActivityResult中處理,遞歸關(guān)閉。

除了第一個,都是想辦法把每一個Activity都結(jié)束掉,間接達(dá)到目的。
但是這樣做同樣不完美。
你會發(fā)現(xiàn),如果自己的應(yīng)用程序?qū)γ恳粋€Activity都設(shè)置了nosensor,在兩個Activity結(jié)束的間隙,sensor可能有效了。
但至少,我們的目的達(dá)到了,而且沒有影響用戶使用。

為了編程方便,最好定義一個Activity基類,處理這些共通問題。

摘自:http://blog.csdn.net/debug2/archive/2011/02/18/6193644.aspx

  14. 請介紹下Android中常用的五種布局。

? ? ?1、 LinearLayout - 線性布局。
orientation - 容器內(nèi)元素的排列方式。vertical: 子元素們垂直排列;horizontal: 子元素們水平排列
gravity - 內(nèi)容的排列形式。常用的有 top, bottom, left, right, center 等

2、 AbsoluteLayout - 絕對布局。
layout_x - x 坐標(biāo)。以左上角為頂點
layout_y - y 坐標(biāo)。以左上角為頂點

3、 TableLayout - 表格式布局?
? ? ? 表格布局主要以行列的形式來管理子控件,其中每一行即一個TableRow對象,每個TableRow對象可以添加子控件,并且每加入一個空間即相當(dāng)于添加了一列

4、 RelativeLayout - 相對布局。
?layout_centerInParent - 將當(dāng)前元素放置到其容器內(nèi)的水平方向和垂直方向的中央位置(類似的屬性有 :layout_centerHorizontal, layout_alignParentLeft 等)
layout_marginLeft - 設(shè)置當(dāng)前元素相對于其容器的左側(cè)邊緣的距離
layout_below - 放置當(dāng)前元素到指定的元素的下面
? layout_alignRight - 當(dāng)前元素與指定的元素右對齊


5、 FrameLayout - 層疊布局。以左上角為起點,將 FrameLayout 內(nèi)的元素一層覆蓋一層地顯示,在幀布局中,先添加的圖片會被后添加的圖片覆蓋。

摘自:http://javalover00000.javaeye.com/blog/851266

  15. 請介紹下Android的數(shù)據(jù)存儲方式。

? ? ?Android提供了5種方式存儲數(shù)據(jù):
? ? 1、使用SharedPreferences存儲數(shù)據(jù);
? ? 2、文件存儲數(shù)據(jù);
? ? 3、SQLite數(shù)據(jù)庫存儲數(shù)據(jù);
? ? 4、使用ContentProvider存儲數(shù)據(jù);
? ? 5、網(wǎng)絡(luò)存儲數(shù)據(jù);
Android 中的數(shù)據(jù)存儲都是私有的,其他應(yīng)用程序都是無法訪問的,除非通過ContentResolver獲取其他程序共享的數(shù)據(jù)。

摘自:http://www.moandroid.com/?p=319

?

  16. 請介紹下ContentProvider是如何實現(xiàn)數(shù)據(jù)共享的。

一個程序可以通過實現(xiàn)一個Content provider的抽象接口將自己的數(shù)據(jù)完全暴露出去,而且Content providers是以類似數(shù)據(jù)庫中表的方式將數(shù)據(jù)暴露。Content providers存儲和檢索數(shù)據(jù),通過它可以讓所有的應(yīng)用程序訪問到,這也是應(yīng)用程序之間唯一共享數(shù)據(jù)的方法。要想使應(yīng)用程序的數(shù)據(jù)公開化,可通過2種方法:創(chuàng)建一個屬于你自己的Content provider或者將你的數(shù)據(jù)添加到一個已經(jīng)存在的Content provider中,前提是有相同數(shù)據(jù)類型并且有寫入Content provider的權(quán)限。

如何通過一套標(biāo)準(zhǔn)及統(tǒng)一的接口獲取其他應(yīng)用程序暴露的數(shù)據(jù)?Android提供了ContentResolver,外界的程序可以通過ContentResolver接口訪問ContentProvider提供的數(shù)據(jù)。
?參考:http://www.moandroid.com/?p=319

?

  17. 如何啟用Service,如何停用Service。

1.第一種是通過調(diào)用Context.startService()啟動,調(diào)用Context.stopService()結(jié)束,startService()可以傳遞參數(shù)給Service

2.第二種方式是通過調(diào)用Context.bindService()啟動,調(diào)用Context.unbindservice()結(jié)束,還可以通過ServiceConnection訪問Service。

在Service每一次的開啟關(guān)閉過程中,只有onStart可被多次調(diào)用(通過多次startService調(diào)用),其他onCreate,onBind,onUnbind,onDestory在一個生命周期中只能被調(diào)用一次。

參考:http://www.cnblogs.com/feisky/archive/2010/06/14/1758336.html

  18. 注冊廣播有幾種方式,這些方式有何優(yōu)缺點?請談?wù)凙ndroid引入廣播機制的用意。

android中,不同進(jìn)程之間傳遞信息要用到廣播,可以有兩種方式來實現(xiàn)。
第一種方式:在Manifest.xml中注冊廣播,是一種比較推薦的方法,因為它不需要手動注銷廣播(如果廣播未注銷,程序退出時可能會出錯)。
具體實現(xiàn)在Manifest的application中添加:
<receiver android:name=".mEvtReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
上面兩個android:name分別是廣播名和廣播的動作(這里的動作是表示系統(tǒng)啟動完成),如果要自己發(fā)送一個廣播,在代碼中為:
Intent i = new Intent("android.intent.action.BOOT_COMPLETED");
sendBroadcast(i);
這樣,廣播就發(fā)出去了,然后是接收。
接收可以新建一個類,繼承至BroadcastReceiver,也可以建一個BroadcastReceiver的實例,然后得寫onReceive方法,實現(xiàn)如下:
protected BroadcastReceiver mEvtReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("android.intent.action.BOOT_COMPLETED")) {
//Do something?
}
}?
};

第二種方式,直接在代碼中實現(xiàn),但需要手動注冊注銷,實現(xiàn)如下:
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.BOOT_COMPLETED");
registerReceiver(mEvtReceiver, filter); //這時注冊了一個recevier ,名為mEvtReceiver,然后同樣用上面的方法以重寫onReceiver,
最后在程序的onDestroy中要注銷廣播,實現(xiàn)如下:
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mPlayerEvtReceiver);
}

?

Android系統(tǒng)中的廣播是廣泛用于應(yīng)用程序之間通信的一種手段,它類似于事件處理機制,不同的地方就是廣播的處理是系統(tǒng)級別的事件處理過程(一般事件處理是控件級別的)。在此過程中仍然是離不開Intent對象,理解廣播事件的處理過程,靈活運用廣播處理機制,在關(guān)鍵之處往往能實現(xiàn)特別的效果,

?

在Android 中如果要發(fā)送一個廣播必須使用sendBroadCast 向系統(tǒng)發(fā)送對其感興趣的廣播接收器中。
使用廣播必須要有一個intent 對象必設(shè)置其action動作對象
使用廣播必須在配置文件中顯式的指明該廣播對象
每次接收廣播都會重新生成一個接收廣播的對象
在BroadCast 中盡量不要處理太多邏輯問題,建議復(fù)雜的邏輯交給Activity 或者 Service 去處理

轉(zhuǎn)自:http://www.dengdeng.name/u/deng/archives/2010/92.html

? ? ? ? ?http://www.cnblogs.com/TerryBlog/archive/2010/08/16/1801016.html

  19. 請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關(guān)系。

簡單的說,Handler獲取當(dāng)前線程中的looper對象,looper用來從存放Message的MessageQueue中取出Message,再有Handler進(jìn)行Message的分發(fā)和處理

參見:http://hi.baidu.com/%C1%F7%C0?%BB%D0%DD/blog/item/4e576b7c58d742360cd7dac9.html

? ? ? ? ?http://blog.csdn.net/xuxinyl/archive/2010/12/25/6097560.aspx

  20. AIDL的全稱是什么?如何工作?能處理哪些類型的數(shù)據(jù)?

AIDL全稱Android Interface Definition Language(AndRoid接口描述語言) 是一種借口描述語言; 編譯器可以通過aidl文件生成一段代碼,通過預(yù)先定義的接口達(dá)到兩個進(jìn)程內(nèi)部通信進(jìn)程跨界對象訪問的目的.AIDL的IPC的機制和COM或CORBA類似, 是基于接口的,但它是輕量級的。它使用代理類在客戶端和實現(xiàn)層間傳遞值. 如果要使用AIDL, 需要完成2件事情: 1. 引入AIDL的相關(guān)類.; 2. 調(diào)用aidl產(chǎn)生的class.理論上, 參數(shù)可以傳遞基本數(shù)據(jù)類型和String, 還有就是Bundle的派生類, 不過在Eclipse中,目前的ADT不支持Bundle做為參數(shù),

?

具體實現(xiàn)步驟如下:

1、創(chuàng)建AIDL文件, 在這個文件里面定義接口, 該接口定義了可供客戶端訪問的方法和屬性。


2、編譯AIDL文件, 用Ant的話, 可能需要手動, 使用Eclipse plugin的話,可以根據(jù)adil文件自動生產(chǎn)java文件并編譯, 不需要人為介入.

3、在Java文件中, 實現(xiàn)AIDL中定義的接口. 編譯器會根據(jù)AIDL接口, 產(chǎn)生一個JAVA接口。這個接口有一個名為Stub的內(nèi)部抽象類,它繼承擴展了接口并實現(xiàn)了遠(yuǎn)程調(diào)用需要的幾個方法。接下來就需要自己去實現(xiàn)自定義的幾個接口了.

4、向客戶端提供接口ITaskBinder, 如果寫的是service,擴展該Service并重載onBind ()方法來返回一個實現(xiàn)上述接口的類的實例。

5、在服務(wù)器端回調(diào)客戶端的函數(shù). 前提是當(dāng)客戶端獲取的IBinder接口的時候,要去注冊回調(diào)函數(shù), 只有這樣, 服務(wù)器端才知道該調(diào)用那些函數(shù)

?


AIDL語法很簡單,可以用來聲明一個帶一個或多個方法的接口,也可以傳遞參數(shù)和返回值。 由于遠(yuǎn)程調(diào)用的需要, 這些參數(shù)和返回值并不是任何類型.下面是些AIDL支持的數(shù)據(jù)類型:

1. 不需要import聲明的簡單Java編程語言類型(int,boolean等)

2. String, CharSequence不需要特殊聲明?

3. List, Map和Parcelables類型, 這些類型內(nèi)所包含的數(shù)據(jù)成員也只能是簡單數(shù)據(jù)類型, String等其他比支持的類型.

(另外: 我沒嘗試Parcelables, 在Eclipse+ADT下編譯不過, 或許以后會有所支持).


實現(xiàn)接口時有幾個原則:

.拋出的異常不要返回給調(diào)用者. 跨進(jìn)程拋異常處理是不可取的.

.IPC調(diào)用是同步的。如果你知道一個IPC服務(wù)需要超過幾毫秒的時間才能完成地話,你應(yīng)該避免在Activity的主線程中調(diào)用。 也就是IPC調(diào)用會掛起應(yīng)用程序?qū)е陆缑媸ロ憫?yīng). 這種情況應(yīng)該考慮單起一個線程來處理.

.不能在AIDL接口中聲明靜態(tài)屬性。

IPC的調(diào)用步驟:

1. 聲明一個接口類型的變量,該接口類型在.aidl文件中定義。

2. 實現(xiàn)ServiceConnection。

3. 調(diào)用ApplicationContext.bindService(),并在ServiceConnection實現(xiàn)中進(jìn)行傳遞.?

4. 在ServiceConnection.onServiceConnected()實現(xiàn)中,你會接收一個IBinder實例(被調(diào)用的Service). 調(diào)用

YourInterfaceName.Stub.asInterface((IBinder)service)將參數(shù)轉(zhuǎn)換為YourInterface類型。

5. 調(diào)用接口中定義的方法。 你總要檢測到DeadObjectException異常,該異常在連接斷開時被拋出。它只會被遠(yuǎn)程方法拋出。

6. 斷開連接,調(diào)用接口實例中的ApplicationContext.unbindService()

參考:http://buaadallas.blog.51cto.com/399160/372090

  21. 請解釋下Android程序運行時權(quán)限與文件系統(tǒng)權(quán)限的區(qū)別。

apk程序是運行在虛擬機上的,對應(yīng)的是Android獨特的權(quán)限機制,只有體現(xiàn)到文件系統(tǒng)上時才使用linux的權(quán)限設(shè)置。

android系統(tǒng)有的權(quán)限是基于簽名的。

具體參見:http://blog.csdn.net/Zengyangtech/archive/2010/07/20/5749999.aspx

?

  22. 系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請說明原由。

? ? ?通過直接發(fā)送Uri把參數(shù)帶過去,或者通過manifest里的intentfilter里的data屬性

?

  23. 有一個一維整型數(shù)組int[]data保存的是一張寬為width,高為height的圖片像素值信息。請寫一個算法,將該圖片所有的白色不透明(0xffffffff)像素點的透明度調(diào)整為50%。

?

  24、什么是ANR 如何避免它?

  答:ANR:Application Not Responding,五秒在Android中,活動管理器和窗口管理器這兩個系統(tǒng)服務(wù)負(fù)責(zé)監(jiān)視應(yīng)用程序的響應(yīng)。當(dāng)出現(xiàn)下列情況時,Android就會顯示ANR對話框了:

  對輸入事件(如按鍵、觸摸屏事件)的響應(yīng)超過5秒

  意向接受器(intentReceiver)超過10秒鐘仍未執(zhí)行完畢

  Android應(yīng)用程序完全運行在一個獨立的線程中(例如main)。這就意味著,任何在主線程中運行的,需要消耗大量時間的操作都會引發(fā)ANR。因為此時,你的應(yīng)用程序已經(jīng)沒有機會去響應(yīng)輸入事件和意向廣播(Intent broadcast)。

  因此,任何運行在主線程中的方法,都要盡可能的只做少量的工作。特別是活動生命周期中的重要方法如onCreate()和 onResume()等更應(yīng)如此。潛在的比較耗時的操作,如訪問網(wǎng)絡(luò)和數(shù)據(jù)庫;或者是開銷很大的計算,比如改變位圖的大小,需要在一個單獨的子線程中完成 (或者是使用異步請求,如數(shù)據(jù)庫操作)。但這并不意味著你的主線程需要進(jìn)入阻塞狀態(tài)已等待子線程結(jié)束 -- 也不需要調(diào)用Therad.wait()或者Thread.sleep()方法。取而代之的是,主線程為子線程提供一個句柄(Handler),讓子線程 在即將結(jié)束的時候調(diào)用它(xing:可以參看Snake的例子,這種方法與以前我們所接觸的有所不同)。使用這種方法涉及你的應(yīng)用程序,能夠保證你的程序 對輸入保持良好的響應(yīng),從而避免因為輸入事件超過5秒鐘不被處理而產(chǎn)生的ANR。這種實踐需要應(yīng)用到所有顯示用戶界面的線程,因為他們都面臨著同樣的超時 問題。

  25、什么情況會導(dǎo)致Force Close ?如何避免?能否捕獲導(dǎo)致其的異常?

  答:一般像空指針啊,可以看起logcat,然后對應(yīng)到程序中 來解決錯誤

  26、Android本身的api并未聲明會拋出異常,則其在運行時有無可能拋出runtime異常,你遇到過嗎?諾有的話會導(dǎo)致什么問題?如何解決?

  27、簡要解釋一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver

  答:一個activity呈現(xiàn)了一個用戶可以操作的可視化用戶界面

  一個service不包含可見的用戶界面,而是在后臺無限地運行

  可以連接到一個正在運行的服務(wù)中,連接后,可以通過服務(wù)中暴露出來的借口與其進(jìn)行通信

  一個broadcast receiver是一個接收廣播消息并作出回應(yīng)的component,broadcast receiver沒有界面

  intent:content provider在接收到ContentResolver的請求時被激活。

  activity, service和broadcast receiver是被稱為intents的異步消息激活的。

一個intent是一個Intent對象,它保存了消息的內(nèi)容。對于activity和service來說,它指定了請求的操作名稱和待操作數(shù)據(jù)的URI

  Intent對象可以顯式的指定一個目標(biāo)component。如果這樣的話,android會找到這個component(基于 manifest文件中的聲明)并激活它。但如果一個目標(biāo)不是顯式指定的,android必須找到響應(yīng)intent的最佳component。

  它是通過將Intent對象和目標(biāo)的intent filter相比較來完成這一工作的。一個component的intent filter告訴android該component能處理的intent。intent filter也是在manifest文件中聲明的。

  28、IntentService有何優(yōu)點?

  答:IntentService 的好處

  * Acitivity的進(jìn)程,當(dāng)處理Intent的時候,會產(chǎn)生一個對應(yīng)的Service

  * Android的進(jìn)程處理器現(xiàn)在會盡可能的不kill掉你

  * 非常容易使用

  29、橫豎屏切換時候activity的生命周期?

  1、不設(shè)置Activity的android:configChanges時,切屏?xí)匦抡{(diào)用各個生命周期,切橫屏?xí)r會執(zhí)行一次,切豎屏?xí)r會執(zhí)行兩次

  2、設(shè)置Activity的android:configChanges="orientation"時,切屏還是會重新調(diào)用各個生命周期,切橫、豎屏?xí)r只會執(zhí)行一次

  3、設(shè)置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfigurationChanged方法

  30. 如何將SQLite數(shù)據(jù)庫(dictionary.db文件)與apk文件一起發(fā)布?

  解答:可以將dictionary.db文件復(fù)制到Eclipse Android工程中的res aw目錄中。所有在res aw目錄中的文件不會被壓縮,這樣可以直接提取該目錄中的文件。可以將dictionary.db文件復(fù)制到res aw目錄中

  31. 如何將打開res aw目錄中的數(shù)據(jù)庫文件?

  解答:在Android中不能直接打開res aw目錄中的數(shù)據(jù)庫文件,而需要在程序第一次啟動時將該文件復(fù)制到手機內(nèi)存或SD卡的某個目錄中,然后再打開該數(shù)據(jù)庫文件。復(fù)制的基本方法是使用getResources().openRawResource方法獲得res aw目錄中資源的 InputStream對象,然后將該InputStream對象中的數(shù)據(jù)寫入其他的目錄中相應(yīng)文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法來打開任意目錄中的SQLite數(shù)據(jù)庫文件。

  32. Android引入廣播機制的用意?

  答:a:從MVC的角度考慮(應(yīng)用程序內(nèi))

 其實回答這個問題的時候還可以這樣問,android為什么要有那4大組件,現(xiàn)在的移動開發(fā)模型基本上也是照搬的web那一套MVC架構(gòu),只不過 是改了點嫁妝而已。android的四大組件本質(zhì)上就是為了實現(xiàn)移動或者說嵌入式設(shè)備上的MVC架構(gòu),它們之間有時候是一種相互依存的關(guān)系,有時候又是一 種補充關(guān)系,引入廣播機制可以方便幾大組件的信息和數(shù)據(jù)交互。

  b:程序間互通消息(例如在自己的應(yīng)用程序內(nèi)監(jiān)聽系統(tǒng)來電)

  c:效率上(參考UDP的廣播協(xié)議在局域網(wǎng)的方便性)

  d:設(shè)計模式上(反轉(zhuǎn)控制的一種應(yīng)用,類似監(jiān)聽者模式)

?

轉(zhuǎn)自:http://www.cnmsdn.com/html/201101/1295431222ID9251.html

?

?????? 33、android 的優(yōu)勢與不足

Android平臺手機 5大優(yōu)勢:

一、開放性

在優(yōu)勢方面,Android平臺首先就是其開發(fā)性,開發(fā)的平臺允許任何移動終端廠商加入到Android聯(lián)盟中來。顯著的開放性可以使其擁有更多的開發(fā)者,隨著用戶和應(yīng)用的日益豐富,一個嶄新的平臺也將很快走向成熟

開發(fā)性對于Android的發(fā)展而言,有利于積累人氣,這里的人氣包括消費者和廠商,而對于消費者來講,隨大的受益正是豐富的軟件資源。開放的平臺也會帶來更大競爭,如此一來,消費者將可以用更低的價位購得心儀的手機。

二、掙脫運營商的束縛

?

在 過去很長的一段時間,特別是在歐美地區(qū),手機應(yīng)用往往受到運營商制約,使用什么功能接入什么網(wǎng)絡(luò),幾乎都受到運營商的控制。從去年iPhone 上市 ,用戶可以更加方便地連接網(wǎng)絡(luò),運營商的制約減少。隨著EDGE、HSDPA這些2G至3G移動網(wǎng)絡(luò)的逐步過渡和提升,手機隨意接入網(wǎng)絡(luò)已不是運營商口中 的笑談,當(dāng)你可以通過手機IM軟件方便地進(jìn)行即時聊天時,再回想不久前天價的彩信和圖鈴下載業(yè)務(wù),是不是像噩夢一樣?

互聯(lián)網(wǎng)巨頭Google推動的Android終端天生就有網(wǎng)絡(luò)特色,將讓用戶離互聯(lián)網(wǎng)更近。

三、豐富的硬件選擇

這 一點還是與Android平臺的開放性相關(guān),由于Android的開放性,眾多的廠商會推出千奇百怪,功能特色各具的多種產(chǎn)品。功能上的差異和特色,卻不 會影響到數(shù)據(jù)同步、甚至軟件的兼容,好比你從諾基亞 Symbian風(fēng)格手機 一下改用蘋果 iPhone ,同時還可將Symbian中優(yōu)秀的軟件帶到iPhone上使用、聯(lián)系人等資料更是可以方便地轉(zhuǎn)移,是不是非常方便呢?

四、不受任何限制的開發(fā)商

Android平臺提供給第三方開發(fā)商一個十分寬泛、自由的環(huán)境,不會受到各種條條框框的阻擾,可想而知,會有多少新穎別致的軟件會誕生。但也有其兩面性,血腥、暴力、情色方面的程序和游戲如可控制正是留給Android難題之一。

五、無縫結(jié)合的Google應(yīng)用

如今叱詫互聯(lián)網(wǎng)的Google已經(jīng)走過10年度歷史,從搜索巨人到全面的互聯(lián)網(wǎng)滲透,Google服務(wù)如地圖、郵件、搜索等已經(jīng)成為連接用戶和互聯(lián)網(wǎng)的重要紐帶,而Android平臺手機將無縫結(jié)合這些優(yōu)秀的Google服務(wù)。

再說Android的5大不足:

一、安全和隱私

由于手機 與互聯(lián)網(wǎng)的緊密聯(lián)系,個人隱私很難得到保守。除了上網(wǎng)過程中經(jīng)意或不經(jīng)意留下的個人足跡,Google這個巨人也時時站在你的身后,洞穿一切,因此,互聯(lián)網(wǎng)的深入將會帶來新一輪的隱私危機。

二、首先開賣Android手機的不是最大運營商

眾 所周知,T-Mobile在23日,于美國紐約發(fā)布 了Android首款手機G1。但是在北美市場,最大的兩家運營商乃AT&T和Verizon,而目前所知取得Android手機銷售權(quán)的僅有 T-Mobile和Sprint,其中T-Mobile的3G網(wǎng)絡(luò)相對于其他三家也要遜色不少,因此,用戶可以買賬購買G1,能否體驗到最佳的3G網(wǎng)絡(luò)服 務(wù)則要另當(dāng)別論了!

三、運營商仍然能夠影響到Android手機

在國內(nèi)市場,不少用戶對購得移動定制機不滿,感覺所購的手機被人涂畫了廣告一般。這樣的情況在國外市場同樣出現(xiàn)。Android手機的另一發(fā)售運營商Sprint就將在其機型中內(nèi)置其手機商店程序。

四、同類機型用戶減少

在 不少手機論壇都會有針對某一型號的子論壇,對一款手機的使用心得交流,并分享軟件資源。而對于Android平臺手機,由于廠商豐富,產(chǎn)品類型多樣,這樣 使用同一款機型的用戶越來越少,缺少統(tǒng)一機型的程序強化。舉個稍顯不當(dāng)?shù)睦?#xff0c;現(xiàn)在山寨機泛濫,品種各異,就很少有專門針對某個型號山寨機的討論和群組, 除了哪些功能異常搶眼、頗受追捧的機型以外。

五、過分依賴開發(fā)商缺少標(biāo)準(zhǔn)配置

在 使用PC端的Windows Xp系統(tǒng)的時候,都會內(nèi)置微軟Windows Media Player這樣一個瀏覽器程序,用戶可以選擇更多樣的播放器,如Realplay或暴風(fēng)影音等。但入手開始使用默認(rèn)的程序同樣可以應(yīng)付多樣的需要。在 Android平臺中,由于其開放性,軟件更多依賴第三方廠商,比如Android系統(tǒng)的SDK中就沒有內(nèi)置音樂 播放器,全部依賴第三方開發(fā),缺少了產(chǎn)品的統(tǒng)一性。

34、android 中有哪幾種解析xml的類?官方推薦哪種?以及它們的原理和區(qū)別。

XML解析主要有三種方式,SAX、DOM、PULL。常規(guī)在PC上開發(fā)我們使用Dom相對輕松些,但一些性能敏感的數(shù)據(jù)庫或手機上還是主要采用SAX方 式,SAX讀取是單向的,優(yōu)點:不占內(nèi)存空間、解析屬性方便,但缺點就是對于套嵌多個分支來說處理不是很方便。而DOM方式會把整個XML文件加載到內(nèi)存 中去,這里Android開發(fā)網(wǎng)提醒大家該方法在查找方面可以和XPath很好的結(jié)合如果數(shù)據(jù)量不是很大推薦使用,而PULL常常用在J2ME對于節(jié)點處 理比較好,類似SAX方式,同樣很節(jié)省內(nèi)存,在J2ME中我們經(jīng)常使用的KXML庫來解析。

詳細(xì)情況請參考?http://blog.csdn.net/Android_Tutor/archive/2010/09/17/5890835.aspx

??????????????????????????? http://www.linuxidc.com/Linux/2010-11/29768.htm

?????????????????????????? http://littlefermat.blog.163.com/blog/static/59771167200981853037951/

?

35、DDMS和TraceView的區(qū)別?

DDMS是一個程序執(zhí)行查看器,在里面可以看見線程和堆棧等信息,TraceView是程序性能分析器

36、Activity被回收了怎么辦?

只有另啟用了

37、java中如何引用本地語言

可以用JNI接口

38、談?wù)凙ndroid的IPC機制

IPC是內(nèi)部進(jìn)程通信的簡稱,?是共享"命名管道"的資源。Android中的IPC機制是為了讓Activity和Service之間可以隨時的進(jìn)行交互,故在Android中該機制,只適用于Activity和Service之間的通信,類似于遠(yuǎn)程方法調(diào)用,類似于C/S模式的訪問。通過定義AIDL接口文件來定義IPC接口。Servier端實現(xiàn)IPC接口,Client端調(diào)用IPC接口本地代理。

39、NDK是什么

NDK是一些列工具的集合,

NDK提供了一系列的工具,幫助開發(fā)者迅速的開發(fā)C/C++的動態(tài)庫,并能自動將so和java 應(yīng)用打成apk包。

NDK集成了交叉編譯器,并提供了相應(yīng)的mk文件和隔離cpu、平臺等的差異,開發(fā)人員只需簡單的修改mk文件就可以創(chuàng)建出so

40 描述一下android的系統(tǒng)架構(gòu)

android系統(tǒng)架構(gòu)分從下往上為linux 內(nèi)核層、運行庫、應(yīng)用程序框架層、和應(yīng)用程序?qū)?/p>

linuxkernel:負(fù)責(zé)硬件的驅(qū)動程序、網(wǎng)絡(luò)、電源、系統(tǒng)安全以及內(nèi)存管理等功能。

  libraries和 androidruntime:libraries:即c/c++函數(shù)庫部分,大多數(shù)都是開放源代碼的函數(shù)庫,例如webkit,該函數(shù)庫負(fù)責(zé) android網(wǎng)頁瀏覽器的運行,例如標(biāo)準(zhǔn)的c函數(shù)庫libc、openssl、sqlite等,當(dāng)然也包括支持游戲開發(fā)2dsgl和 3dopengles,在多媒體方面有mediaframework框架來支持各種影音和圖形文件的播放與顯示,例如mpeg4、h.264、mp3、 aac、amr、jpg和png等眾多的多媒體文件格式。android的runtime負(fù)責(zé)解釋和執(zhí)行生成的dalvik格式的字節(jié)碼。

  applicationframework(應(yīng)用軟件架構(gòu)),java應(yīng)用程序開發(fā)人員主要是使用該層封裝好的api進(jìn)行快速開發(fā)。

   applications:該層是java的應(yīng)用程序?qū)?#xff0c;android內(nèi)置的googlemaps、e-mail、即時通信工具、瀏覽器、mp3播放 器等處于該層,java開發(fā)人員開發(fā)的程序也處于該層,而且和內(nèi)置的應(yīng)用程序具有平等的位置,可以調(diào)用內(nèi)置的應(yīng)用程序,也可以替換內(nèi)置的應(yīng)用程序。

  上面的四個層次,下層為上層服務(wù),上層需要下層的支持,調(diào)用下層的服務(wù),這種嚴(yán)格分層的方式帶來的極大的穩(wěn)定性、靈活性和可擴展性,使得不同層的開發(fā)人員可以按照規(guī)范專心特定層的開發(fā)。

   android應(yīng)用程序使用框架的api并在框架下運行,這就帶來了程序開發(fā)的高度一致性,另一方面也告訴我們,要想寫出優(yōu)質(zhì)高效的程序就必須對整個 applicationframework進(jìn)行非常深入的理解。精通applicationframework,你就可以真正的理解android的設(shè)計 和運行機制,也就更能夠駕馭整個應(yīng)用層的開發(fā)。

網(wǎng)上收集Android 題目四

1.【單選】如果在android應(yīng)用程序中需要發(fā)送短信,那么需要在AndroidManifest.xml文件中增加什么樣的權(quán)限(?D ) A.發(fā)送短信,無需配置權(quán)限???????????????? B.permission.SMS C.android.permission.RECEIVE_SMS??????? D.android.permission.SEND_SMS
2.【單選】使用Toast提示時,關(guān)于提示時長,下面說法正確的是(?B) A.顯示時長只有2種設(shè)置??????????? B.可以自定義顯示時長 C.傳入30時,提示會顯示30秒鐘 D.當(dāng)自定義顯示時長時,比如傳入30,程序會拋出異常
3.【單選】在一個布局文件中,對一個EditText進(jìn)行設(shè)置,以下哪項設(shè)置能實現(xiàn)輸入框默認(rèn)提示內(nèi)容的效果(?B ). A.android:capitalize??????????????????? B.android:hint C.android:singleLine??????????????????? D.android:text
4.【多選】以下關(guān)于Toast說法正確的是(??BD ) A.Toast能編輯?????????????????????????? B.Toast沒有焦點 C.Toast可以獲得用戶輸入???????????????? D.Toast只能持續(xù)一段時間
5.【單選】下列哪些語句關(guān)于內(nèi)存回收的說明是正確的?(? B) A、程序員必須創(chuàng)建一個線程來釋放內(nèi)存?????????? B、 內(nèi)存回收程序負(fù)責(zé)釋放無用內(nèi)存 C、 內(nèi)存回收程序允許程序員直接釋放內(nèi)存??? D、 內(nèi)存回收程序可以在指定的時間釋放內(nèi)存對象
6.【單選】Android項目工程下面的assets目錄的作用是什么(B ) A、放置應(yīng)用到的圖片資源。???????????????????? B、主要放置多媒體等數(shù)據(jù)文件 C、放置字符串,顏色,數(shù)組等常量數(shù)據(jù) D、放置一些與UI相應(yīng)的布局文件,都是xml文件
7.【多選】下列對android NDK的理解正確的是(?ABCD ) A、 NDK是一系列工具的集合 B、 NDK 提供了一份穩(wěn)定、功能有限的 API 頭文件聲明。 C、 使 “Java+C” 的開發(fā)方式終于轉(zhuǎn)正,成為官方支持的開發(fā)方式 D、 NDK 將是 Android 平臺支持 C 開發(fā)的開端
8.【單選】我們都知道Hanlder是線程與Activity通信的橋梁,如果線程處理不當(dāng),你的機器就會變得越慢,那么線程銷毀的方法是(A ) A、onDestroy()??????????????????????? B、onClear()???? C、onFinish()???????????????????????? D、onStop()
9.【多選】android 關(guān)于service生命周期的onCreate()和onStart()說法正確的是(AD? ) A、當(dāng)?shù)谝淮螁拥臅r候先后調(diào)用onCreate()和onStart()方法 B、當(dāng)?shù)谝淮螁拥臅r候只會調(diào)用onCreate()方法 C、如果service已經(jīng)啟動,將先后調(diào)用onCreate()和onStart()方法 D、如果service已經(jīng)啟動,只會執(zhí)行onStart()方法,不在執(zhí)行onCreate()方法
10.【簡答】簡述橫豎屏切換時候activity的生命周期? .①不設(shè)置Activity的android:configChanges時,切屏?xí)匦抡{(diào)用各個生命周期,切橫屏?xí)r會執(zhí)行一次,切豎屏?xí)r會執(zhí)行兩次;②設(shè)置Activity的android:configChanges=“orientation”時,切屏還是會重新調(diào)用各個生命周期,切橫、豎屏?xí)r只會執(zhí)行一次;③設(shè)置Activity的 android:configChanges=“orientation|keyboardHidden”時,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfigurationChanged方法。

近期很多公司招聘Android程序員,就一些常見的Android面試基礎(chǔ)題做下總結(jié),看看你能做出多少道?

? 1. Intent的幾種有關(guān)Activity啟動的方式有哪些,你了解每個含義嗎?

??? 這里Android123提示大家,Intent的一些標(biāo)記有FLAG_ACTIVITY_BROUGHT_TO_FRONT 、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET、FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS、FLAG_ACTIVITY_MULTIPLE_TASK和FLAG_ACTIVITY_NEW_TASK 等。每種含義大家看SDK文檔和具體跑下這樣你的記憶會更深刻些。

? 2. Activity和Task的啟動模式有哪些? 每種含義是什么?

?? 有關(guān)在AndroidManifest.xml中的android:launchMode定義,主要有standard、singleTop、singleTask和singleInstance,同時對于android:taskAffinity這些問題大家也要了解,Android開發(fā)網(wǎng)在以前的文章中講過,不過很多開發(fā)者仍然不是很清楚,這些基礎(chǔ)問題我們以后仍然會再次總結(jié)。

? 3. 通過Intent傳遞一些二進(jìn)制數(shù)據(jù)的方法有哪些?

?? 1). 使用Serializable接口實現(xiàn)序列化,這是Java常用的方法。

??2). 實現(xiàn)Parcelable接口,這里Android的部分類比如Bitmap類就已經(jīng)實現(xiàn)了,同時Parcelable在Android AIDL中交換數(shù)據(jù)也很常見的。

? 4. 能說下Android應(yīng)用的入口點嗎?

? ActivityThread.main

? 5. Java基礎(chǔ)問題,說說HashSet和HashTable的區(qū)別?

? 這個相信Java程序員都知道HashSet相對于HashMap就是不能存放重復(fù)的數(shù)據(jù),對于HashTable來說,存放的數(shù)據(jù)不能出現(xiàn)key或value為null這樣的情況。

? 6. Java基礎(chǔ)問題,用Java的集合類寫下廣度優(yōu)先搜索.

? 這個屬于基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)問題,通過隊列處理一層一層,相對于深度優(yōu)先的棧處理方式來說更實用一些。

? 7. Android都有哪些XML解析器,都熟練掌握嗎?

??這里XmlPull、SAX和DOM相信做過Web開發(fā)的都已經(jīng)滾瓜爛熟了。

? 8. SQLite支持事務(wù)嗎? 添加刪除如何提高性能?

??SQLite作為輕量級的數(shù)據(jù)庫,比MySQL還小,但支持SQL語句查詢,提高性能可以考慮通過原始經(jīng)過優(yōu)化的SQL查詢語句方式處理。

? 9. Android Service和Binder、AIDL你都熟練嗎?

? 作為Android重要的后臺服務(wù),這些每個Android開發(fā)者都應(yīng)該掌握,這也算是和Java SE最大的不同了,具體的實例大家可以查看Android音樂播放器的源代碼Music.Git中的,這里不再贅述。

? 10. 你用過哪款A(yù)ndroid手機,有哪些優(yōu)點和不足,相對于iPhone或Symbian又有哪些優(yōu)缺點?

?? 把這個作為面試題也是考察下,可以大概了解到它對Android的了解程度,多移動開發(fā)的認(rèn)識

網(wǎng)上收集Android 題目五

1.【多選】下面異常是屬于Runtime Exception的是(ABCD) A. ArithmeticException??? B.IllegalArgumentException?? C.NullPointerException??? D.BufferUnderflowException
2.【單選】下列程序段的輸出結(jié)果是(B) void complicatedexpression_r(){ int x=20,y=30 boolean b; b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60; System.out.println(b); } A.true???? B.false????? C.1?????? D.0?
3.【單選】Android中下列屬于Intent的作用的是(C) A.實現(xiàn)應(yīng)用程序間的數(shù)據(jù)共享 B.是一段長的生命周期,沒有用戶界面的程序,可以保持應(yīng)用在后臺運行,而不會因為切換頁面而消失 C.可以實現(xiàn)界面間的切換,可以包含動作和動作數(shù)據(jù),連接四大組件的紐帶 D.處理一個應(yīng)用程序整體性的工作
4.【單選】下列屬于SAX解析xml文件的優(yōu)點的是(B) A.將整個文檔輸在內(nèi)存中,便于操作,支持刪除,修改,重新排列等多種功能 B.不用事先調(diào)入整個文檔,占用資源少 C.整個文檔調(diào)入內(nèi)存,浪費時間和空間 D.不是長久駐留在內(nèi)存,數(shù)據(jù)不是持久的,事件過后,若沒有保存數(shù)據(jù),數(shù)據(jù)就會消失
5.【多選】在Android中使用Menu時可能需要重寫的方法有(AC) A.onCreateOptionsMenu()???? B.onCreateMenu()? C.onOptionsItemSelected()?? D.onItemSelected()
6.【多選】Android應(yīng)用程序結(jié)構(gòu)是(ABCD) A.Linux Kernel(Linux內(nèi)核)???????????????B.Libraries(系統(tǒng)運行庫或者是c/c++核心庫) C.Application Framework(開發(fā)框架包)????D.Applications(核心應(yīng)用程序)
7.【單選】關(guān)于res/raw目錄說法正確的是(A) A.這里的文件是原封不動的存儲到設(shè)備上不會轉(zhuǎn)化為二進(jìn)制的格式 B.這里的文件是原封不動的存儲到設(shè)備上會轉(zhuǎn)化為二進(jìn)制的格式 C.這里的文件最終以二進(jìn)制的格式存儲到指定的包中 D.這里的文件最終不會以二進(jìn)制的格式存儲到指定的包中
8.【多選】下面是屬于GLSurFaceView特性的是(ABC) A.管理一個surface,這個surface就是一塊特殊的內(nèi)存,能直接排版到Android的視圖view上 B.管理一個EGL display,它能讓opengl把內(nèi)容渲染到上述的surface上 C.讓渲染器在獨立的線程里運作,和UI線程分離 D.可以直接從內(nèi)存或者DMA等硬件接口取得圖像數(shù)據(jù)
9.【單選】在SQL Server Management Studio中運行下列T-SQL語句,其輸出值(C) SELECT @@IDENTITY A.可能為0.1????? B.可能為3?????? C.不可能為-100?????????? D.肯定為0
10.【簡答】簡要解釋一下activity、intent、intent filter、service、Broadcase、BroadcaseReceiver。
一個activity呈現(xiàn)了一個用戶可以操作的可視化用戶界面;一個service不包含可見的用戶界面,而是在后臺運行,可以與一個activity綁定,通過綁定暴露出來接口并與其進(jìn)行通信;一個broadcast receiver是一個接收廣播消息并做出回應(yīng)的componentbroadcast receiver沒有界面;一個intent是一個Intent對象,它保存了消息的內(nèi)容。對于activityservice來說,它指定了請求的操作名稱和待操作數(shù)據(jù)的URIIntent對象可以顯式的指定一個目標(biāo)component。如果這樣的話,android會找到這個component(基于manifest文件中的聲明)并激活它。但如果一個目標(biāo)不是顯式指定的,android必須找到響應(yīng)intent的最佳component。它是通過將Intent對象和目標(biāo)的intent filter相比較來完成這一工作的;一個componentintent filter告訴androidcomponent能處理的intentintent filter也是在manifest文件中聲明的。
1.【單選】關(guān)于廣播以下陳述正確的是(D?). A.廣播接收器只能在配置文件中注冊? ?? ?? ?? ? B.廣播接收器注冊后不能注銷 C.廣播接收器只能接收自定義的廣播消息? ?? ?? ?D.廣播接收器可以在Activity中單獨注冊與注銷
2.【單選】關(guān)于AlertDialog描述錯誤的是(?B)
A.show()方法只顯示對話框
B.AlertDialog.Buildercreate()?show()方法都返回AlertDialog對象 C.AlertDialog不能直接用new關(guān)鍵字構(gòu)建對象,而必須使用其內(nèi)部類Builder D.create()方法創(chuàng)建并顯示對話框
3.【單選】對于一個已經(jīng)存在的SharedPreferences對象setting,想向其中存入一個字符串"person",setting應(yīng)該先調(diào)用什么方法(A?)
A.edit()? ?? ?? ?? ? B.save()? ?? ?? ?? ?C.commit()? ?? ?? ? D.putString()

4.【多選】下面哪條語句可以構(gòu)造正確的對話框(BC) A.AlertDialog dialog = new AlertDialog(context); B.AlertDialog.Builder builder = new AlertDialog.Builder(context); C.ProgressDialog dialog = new ProgressDialog(context); D.ProgressDialog.Builder builder = new ProgressDialog.Builder(context);
5.【單選】在創(chuàng)建AVD,下面哪些是不能配置的選項(?A)
A.藍(lán)牙支持? ?? ?? ? B.屏幕分辨率? ?? ?? ???C.緩存區(qū)大小? ?? ?? ? D.SD卡支持

6.【單選】在unix系統(tǒng)中,下列(A?)命令屬于目錄管理的常用命令。
A.pwd? ?? ?? ? B.pr? ?? ?? ? C.ln? ?? ?? ???D.find

7.【多選】以下關(guān)于Toast說法正確的是(BD?)
A.Toast能編輯? ?? ?? ?? ?? ?? ?? ?? ?B.Toast沒有焦點
C.Toast可以獲得用戶輸入? ?? ?? ?? ???D.Toast只能持續(xù)一段時間
8.【單選】java.io包中定義了多個流類型來實現(xiàn)輸入和輸出功能,可以從不同的角度對其進(jìn)行分? ?? ?? ? 類,按功能分為:(??C),如果為讀取的內(nèi)容進(jìn)行處理后再輸出,需要使用下列哪種流?(?G?) 輸入流和輸出流? ?B、字節(jié)流和字符流? ?? ? C、節(jié)點流和處理流? ?? ?D、File stream?? E、Pipe stream? ???F、Random stream? ???G、Filter stream
9.【單選】下列代碼的執(zhí)行結(jié)果是:(B?
? ?? ?? ???
1 2 3 4 5 6 7 publicclassTest3{ ??publicstaticvoidmain(String args[]){ ??System.out.print(100%3); ??System.out.print(","); ??System.out.println(100%3.0); ??} ??}

A1,1? ?? ???B1,1.0? ?? ? C1.0,1? ?? ? D1.0,1.0

10.【簡答】Android本身的api并未聲明會拋出異常,則其在運行時有無可能拋出runtime異常,你遇到過嗎?諾有的話會導(dǎo)致什么問題?如何解決? 會,比如nullpointerException。我遇到過,比如textview.setText()時,textview沒有初始化。會導(dǎo)致程序無法正常運行出現(xiàn)forceclose。打開控制臺查看logcat信息找出異常信息并修改程序。

?

android題目知識點六

1、????? Android的四大組件是哪些,它們的作用?... 3

2、????? 請介紹下Android中常用的五種布局。... 3

3、????? android中的動畫有哪幾類,它們的特點和區(qū)別是什么... 3

4、????? android 中有哪幾種解析xml的類?官方推薦哪種?以及它們的原理和區(qū)別。... 3

5、????? ListView的優(yōu)化方案... 4

6、????? 請介紹下Android的數(shù)據(jù)存儲方式。... 4

7、????? activity的啟動模式有哪些?是什么含義?... 6

8、???????跟activity和Task 有關(guān)的 Intent啟動方式有哪些?其含義?... 7

9、????? 請描述下Activity的生命周期。... 9

10、??????? activity在屏幕旋轉(zhuǎn)時的生命周期... 10

11、??????? 如何啟用Service,如何停用Service。... 10

12、??????? 注冊廣播有幾種方式,這些方式有何優(yōu)缺點?請談?wù)凙ndroid引入廣播機制的用意。??? ??? 11

13、??????? 請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關(guān)系。??? ??? 11

14、??????? 簡要解釋一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver? 13

15、??????? 說說mvc模式的原理,它在android中的運用,android的官方建議應(yīng)用程序的開發(fā)采用mvc模式。何謂mvc???? 13

16、??????? 什么是ANR 如何避免它?... 13

17、??????? 什么情況會導(dǎo)致ForceClose ?如何避免?能否捕獲導(dǎo)致其的異常?... 14

18、??????? 描述一下android的系統(tǒng)架構(gòu)... 14

19、??????? 請介紹下ContentProvider是如何實現(xiàn)數(shù)據(jù)共享的。... 14

20、??????? Android本身的api并未聲明會拋出異常,則其在運行時有無可能拋出runtime異常,你遇到過嗎?諾有的話會導(dǎo)致什么問題?如何解決?... 15

21、??????? IntentService有何優(yōu)點?. 15

22、??? 如果后臺的Activity由于某原因被系統(tǒng)回收了,如何在被系統(tǒng)回收之前保存當(dāng)前狀態(tài)???? ??? 15

23、??????? 如何將一個Activity設(shè)置成窗口的樣式。... 15

24、??????? 如何退出Activity?如何安全退出已調(diào)用多個Activity的Application?... 15

25、??????? AIDL的全稱是什么?如何工作?能處理哪些類型的數(shù)據(jù)?... 16

26、??????? 請解釋下Android程序運行時權(quán)限與文件系統(tǒng)權(quán)限的區(qū)別。... 17

27、??????? 系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請說明原由。... 17

28、??????? android系統(tǒng)的優(yōu)勢和不足... 17

29、??????? Android dvm的進(jìn)程和Linux的進(jìn)程, 應(yīng)用程序的進(jìn)程是否為同一個概念... 18

30、??????? sim卡的EF文件是什么?有何作用... 18

31、??????? 嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種, 各有何特性... 18

32、??????? 什么是嵌入式實時操作系統(tǒng),Android 操作系統(tǒng)屬于實時操作系統(tǒng)嗎?. 18

33、??????? 一條最長的短信息約占多少byte?. 18

34、??????? 有一個一維整型數(shù)組int[]data保存的是一張寬為width,高為height的圖片像素值信息。請寫一個算法,將該圖片所有的白色不透明(0xffffffff)像素點的透明度調(diào)整為50%。.?... 18

35、??????? 如何將SQLite數(shù)據(jù)庫(dictionary.db文件)與apk文件一起發(fā)布... 19

36、??????? 如何將打開res aw目錄中的數(shù)據(jù)庫文件?. 19

37、??????? DDMS和TraceView的區(qū)別?. 19

38、??????? java中如何引用本地語言... 19

39、??????? 談?wù)凙ndroid的IPC(進(jìn)程間通信)機制... 19

40、??????? NDK是什么... 19

?

?


1、??? Android的四大組件是哪些,它們的作用?

答:Activity:Activity是Android程序與用戶交互的窗口,是Android構(gòu)造塊中最基本的一種,它需要為保持各界面的狀態(tài),做很多持久化的事情,妥善管理生命周期以及一些跳轉(zhuǎn)邏輯

service:后臺服務(wù)于Activity,封裝有一個完整的功能邏輯實現(xiàn),接受上層指令,完成相關(guān)的食物,定義好需要接受的Intent提供同步和異步的接口

Content Provider:是Android提供的第三方應(yīng)用數(shù)據(jù)的訪問方案,可以派生Content Provider類,對外提供數(shù)據(jù),可以像數(shù)據(jù)庫一樣進(jìn)行選擇排序,屏蔽內(nèi)部數(shù)據(jù)的存儲細(xì)節(jié),向外提供統(tǒng)一的借口模型,大大簡化上層應(yīng)用,對數(shù)據(jù)的整合提供了更方便的途徑

BroadCast Receiver:接受一種或者多種Intent作觸發(fā)事件,統(tǒng)一了Android的事件廣播模型

2、??? 請介紹下Android中常用的五種布局。

常用五種布局方式,分別是:FrameLayout(框架布局),LinearLayout (線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)。

一、FrameLayout:所有東西依次都放在左上角,會重疊,這個布局比較簡單,也只能放一點比較簡單的東西。

二、LinearLayout:線性布局,每一個LinearLayout里面又可分為垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。當(dāng)垂直布局時,每一行就只有一個元素,多個元素依次垂直往下;水平布局時,只有一行,每一個元素依次向右排列。

三、AbsoluteLayout:絕對布局用X,Y坐標(biāo)來指定元素的位置,這種布局方式也比較簡單,但是在屏幕旋轉(zhuǎn)時,往往會出問題,而且多個元素的時候,計算比較麻煩。

四、RelativeLayout:相對布局可以理解為某一個元素為參照物,來定位的布局方式。主要屬性有:相對于某一個元素android:layout_below、????? android:layout_toLeftOf相對于父元素的地方android:layout_alignParentLeft、android:layout_alignParentRigh;

五、TableLayout:表格布局,每一個TableLayout里面有表格行TableRow,TableRow里面可以具體定義每一個元素。每一個布局都有自己適合的方式,這五個布局元素可以相互嵌套應(yīng)用,做出美觀的界面。

3、??? android中的動畫有哪幾類,它們的特點和區(qū)別是什么?

答:兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現(xiàn)方式可以使視圖組件移動、放大、縮小以及產(chǎn)生透明度的變化;另一種Frame動畫,傳統(tǒng)的動畫方法,通過順序的播放排列好的圖片來實現(xiàn),類似電影。

4、 android?中有哪幾種解析xml的類?官方推薦哪種?以及它們的原理和區(qū)別。

答:XML解析主要有三種方式,SAX、DOM、PULL。常規(guī)在PC上開發(fā)我們使用Dom相對輕松些,但一些性能敏感的數(shù)據(jù)庫或手機上還是主要采用SAX方式,SAX讀取是單向的,優(yōu)點:不占內(nèi)存空間、解析屬性方便,但缺點就是對于套嵌多個分支來說處理不是很方便。而DOM方式會把整個XML文件加載到內(nèi)存中去,這里Android開發(fā)網(wǎng)提醒大家該方法在查找方面可以和XPath很好的結(jié)合如果數(shù)據(jù)量不是很大推薦使用,而PULL常常用在J2ME對于節(jié)點處理比較好,類似SAX方式,同樣很節(jié)省內(nèi)存,在J2ME中我們經(jīng)常使用的KXML庫來解析。

5、 ListView的優(yōu)化方案

答:1、如果自定義適配器,那么在getView方法中要考慮方法傳進(jìn)來的參數(shù)contentView是否為null,如果為null就創(chuàng)建contentView并返回,如果不為null則直接使用。在這個方法中盡可能少創(chuàng)建view。

2、給contentView設(shè)置tag(setTag()),傳入一個viewHolder對象,用于緩存要顯示的數(shù)據(jù),可以達(dá)到圖像數(shù)據(jù)異步加載的效果。

3、如果listview需要顯示的item很多,就要考慮分頁加載。比如一共要顯示100條或者更多的時候,我們可以考慮先加載20條,等用戶拉到列表底部的時候再去加載接下來的20條。

6、 請介紹下Android的數(shù)據(jù)存儲方式。

答:使用SharedPreferences存儲數(shù)據(jù);文件存儲數(shù)據(jù);SQLite數(shù)據(jù)庫存儲數(shù)據(jù);使用ContentProvider存儲數(shù)據(jù);網(wǎng)絡(luò)存儲數(shù)據(jù);

Preference,File, DataBase這三種方式分別對應(yīng)的目錄是/data/data/PackageName/Shared_Pref, /data/data/Package Name/files, /data/data/PackageName/database 。

一:使用SharedPreferences存儲數(shù)據(jù)

首先說明SharedPreferences存儲方式,它是 Android提供的用來存儲一些簡單配置信息的一種機制,例如:登錄用戶的用戶名與密碼。其采用了Map數(shù)據(jù)結(jié)構(gòu)來存儲數(shù)據(jù),以鍵值的方式存儲,可以簡單的讀取與寫入,具體實例如下:

voidReadSharedPreferences(){

StringstrName,strPassword;

SharedPreferences?? user = getSharedPreferences(“user_info”,0);

strName =user.getString(“NAME”,””);

strPassword =user getString(“PASSWORD”,””);

}

voidWriteSharedPreferences(String strName,String strPassword){

SharedPreferences?? user = getSharedPreferences(“user_info”,0);

uer.edit();

user.putString(“NAME”,strName);

user.putString(“PASSWORD”,strPassword);

user.commit();

}

數(shù)據(jù)讀取與寫入的方法都非常簡單,只是在寫入的時候有些區(qū)別:先調(diào)用edit()使其處于編輯狀態(tài),然后才能修改數(shù)據(jù),最后使用commit()提交修改的數(shù)據(jù)。實際上SharedPreferences是采用了XML格式將數(shù)據(jù)存儲到設(shè)備中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。使用SharedPreferences是有些限制的:只能在同一個包內(nèi)使用,不能在不同的包之間使用。

二:文件存儲數(shù)據(jù)

文件存儲方式是一種較常用的方法,在Android中讀取/寫入文件的方法,與Java中實現(xiàn)I/O的程序是完全一樣的,提供了openFileInput()和openFileOutput()方法來讀取設(shè)備上的文件。具體實例如下:

String fn =“moandroid.log”;

FileInputStreamfis = openFileInput(fn);

FileOutputStreamfos = openFileOutput(fn,Context.MODE_PRIVATE);

三:網(wǎng)絡(luò)存儲數(shù)據(jù)

網(wǎng)絡(luò)存儲方式,需要與Android網(wǎng)絡(luò)數(shù)據(jù)包打交道,關(guān)于Android 網(wǎng)絡(luò)數(shù)據(jù)包的詳細(xì)說明,請閱讀Android SDK引用了Java SDK的哪些package?。

四:ContentProvider

1、ContentProvider簡介

當(dāng)應(yīng)用繼承ContentProvider類,并重寫該類用于提供數(shù)據(jù)和存儲數(shù)據(jù)的方法,就可以向其他應(yīng)用共享其數(shù)據(jù)。雖然使用其他方法也可以對外共享數(shù)據(jù),但數(shù)據(jù)訪問方式會因數(shù)據(jù)存儲的方式而不同,如:采用文件方式對外共享數(shù)據(jù),需要進(jìn)行文件操作讀寫數(shù)據(jù);采用sharedpreferences共享數(shù)據(jù),需要使用sharedpreferencesAPI讀寫數(shù)據(jù)。而使用ContentProvider共享數(shù)據(jù)的好處是統(tǒng)一了數(shù)據(jù)訪問方式。

2、Uri類簡介

Uri代表了要操作的數(shù)據(jù),Uri主要包含了兩部分信息:1.需要操作的ContentProvider ,2.對ContentProvider中的什么數(shù)據(jù)進(jìn)行操作,一個Uri由以下幾部分組成:

1.scheme:ContentProvider(內(nèi)容提供者)的scheme已經(jīng)由Android所規(guī)定為:content://…

2.主機名(或Authority):用于唯一標(biāo)識這個ContentProvider,外部調(diào)用者可以根據(jù)這個標(biāo)識來找到它。

3.路徑(path):可以用來表示我們要操作的數(shù)據(jù),路徑的構(gòu)建應(yīng)根據(jù)業(yè)務(wù)而定,如下:

要操作contact表中id為10的記錄,可以構(gòu)建這樣的路徑:/contact/10

要操作contact表中id為10的記錄的name字段, contact/10/name

要操作contact表中的所有記錄,可以構(gòu)建這樣的路徑:/contact?

要操作的數(shù)據(jù)不一定來自數(shù)據(jù)庫,也可以是文件等他存儲方式,如下:

要操作xml文件中contact節(jié)點下的name節(jié)點,可以構(gòu)建這樣的路徑:/contact/name

如果要把一個字符串轉(zhuǎn)換成Uri,可以使用Uri類中的parse()方法,如下:

Uri uri =Uri.parse("content://com.changcheng.provider.contactprovider/contact")

3、UriMatcher、ContentUrist和ContentResolver簡介

因為Uri代表了要操作的數(shù)據(jù),所以我們很經(jīng)常需要解析Uri,并從 Uri中獲取數(shù)據(jù)。Android系統(tǒng)提供了兩個用于操作Uri的工具類,分別為UriMatcher 和ContentUris 。掌握它們的使用,會便于我們的開發(fā)工作。

UriMatcher:用于匹配Uri,它的用法如下:

?

1.首先把你需要匹配Uri路徑全部給注冊上,如下:

//常量UriMatcher.NO_MATCH表示不匹配任何路徑的返回碼(-1)。

UriMatcheruriMatcher = 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進(jìn)行匹配,如果匹配就返回匹配碼,匹配碼是調(diào)用 addURI()方法傳入的第三個參數(shù),假設(shè)匹配content://com.changcheng.sqlite.provider.contactprovider/contact路徑,返回的匹配碼為1。

ContentUris:用于獲取Uri路徑后面的ID部分,它有兩個比較實用的方法:

withAppendedId(uri,id)用于為路徑加上ID部分

parseId(uri)方法用于從路徑中獲取ID部分

ContentResolver:當(dāng)外部應(yīng)用需要對ContentProvider中的數(shù)據(jù)進(jìn)行添加、刪除、修改和查詢操作時,可以使用 ContentResolver 類來完成,要獲取ContentResolver 對象,可以使用Activity提供的getContentResolver()方法。 ContentResolver使用insert、delete、update、query方法,來操作數(shù)據(jù)。

7、 activity的啟動模式有哪些?是什么含義?

答:在android里,有4種activity的啟動模式,分別為:

“standard” (默認(rèn))

“singleTop”

“singleTask”

“singleInstance”

?

它們主要有如下不同:

1. 如何決定所屬task

“standard”和”singleTop”的activity的目標(biāo)task,和收到的Intent的發(fā)送者在同一個task內(nèi),除非intent包括參數(shù)FLAG_ACTIVITY_NEW_TASK。

如果提供了FLAG_ACTIVITY_NEW_TASK參數(shù),可能會啟動到別的task里。

2. 是否允許多個實例

“standard”和”singleTop”可以被實例化多次,并且存在于不同的task中,且一個task可以包括一個activity的多個實例;

“singleTask”和”singleInstance”則限制只生成一個實例。 singleTop要求如果創(chuàng)建intent的時候棧頂已經(jīng)有要創(chuàng)建 的Activity的實例,則將intent發(fā)送給該實例,而不發(fā)送給新的實例。

3. 是否允許其它activity存在于本task內(nèi)

“singleInstance”獨占一個task,其它activity不能存在那個task里;如果它啟動了一個新的activity,不管新的activity的launch mode 如何,新的activity都將會到別的task里運行(如同加了FLAG_ACTIVITY_NEW_TASK參數(shù))。

而另外三種模式,則可以和其它activity共存。

4. 是否每次都生成新實例

“standard”對于沒一個啟動Intent都會生成一個activity的新實例;

“singleTop”的activity如果在task的棧頂?shù)脑?#xff0c;則不生成新的該activity的實例,直接使用棧頂?shù)膶嵗?#xff0c;否則,生成該activity的實例。

比如現(xiàn)在task棧元素為A-B-C-D(D在棧頂),這時候給D發(fā)一個啟動intent,如果D是 “standard”的,則生成D的一個新實例,棧變?yōu)锳-B-C-D-D。

如果D是singleTop的話,則不會生產(chǎn)D的新實例,棧狀態(tài)仍為A-B-C-D

如果這時候給B發(fā)Intent的話,不管B的launchmode是”standard” 還是 “singleTop” ,都會生成B的新實例,棧狀態(tài)變?yōu)锳-B-C-D-B。

“singleInstance”是其所在棧的唯一activity,它會每次都被重用。

“singleTask”如果在棧頂,則接受intent,否則,該intent會被丟棄,但是該task仍會回到前臺。

當(dāng)已經(jīng)存在的activity實例處理新的intent時候,會調(diào)用onNewIntent()方法;如果收到intent生成一個activity實例,那么用戶可以通過back鍵回到上一個狀態(tài);如果是已經(jīng)存在的一個activity來處理這個intent的話,用戶不能通過按back鍵返回到這之前的狀態(tài)。


singleTask:

1. 系統(tǒng)在該類型的Task不存在時創(chuàng)建一個新的Task,并將該Activity放入Task底部。

對應(yīng)singleTask Activity的新的Intent到達(dá)時,該singleTask Activity上面有其他的activity則

將這些activity從Task中彈出,這時singleTask Activity顯示在界面上。

2. 如果該singleTask Activity的Task已經(jīng)存在(TaskAffinity標(biāo)記),則直接將該Task拉回前臺,

并清除該singleTask Activity上面的所有對象,使得該singleTask Activity可以處理新的Intent。

如果該Task不存在,則新建Task并將該singleTask Activity作為根。

即singleTask的隱含了 FLAG_ACTIVITY_CLEAR_TOP + FLAG_ACTIVITY_NEW_TASK功能!


8、??跟activity和Task 有關(guān)的 Intent啟動方式有哪些?其含義?

核心的Intent Flag有:

FLAG_ACTIVITY_NEW_TASK

FLAG_ACTIVITY_CLEAR_TOP

FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

FLAG_ACTIVITY_SINGLE_TOP


FLAG_ACTIVITY_NEW_TASK

? 如果設(shè)置,這個Activity會成為歷史stack中一個新Task的開始。一個Task(從啟動它的Activity到下一個Task中的 Activity)定義了用戶可以遷移的Activity原子組。Task可以移動到前臺和后臺;在某個特定Task中的所有Activity總是保持相同的次序。

?這個標(biāo)志一般用于呈現(xiàn)“啟動”類型的行為:它們提供用戶一系列可以單獨完成的事情,與啟動它們的Activity完全無關(guān)。

?使用這個標(biāo)志,如果正在啟動的Activity的Task已經(jīng)在運行的話,那么,新的Activity將不會啟動;代替的,當(dāng)前Task會簡單的移入前臺。參考FLAG_ACTIVITY_MULTIPLE_TASK標(biāo)志,可以禁用這一行為。

?這個標(biāo)志不能用于調(diào)用方對已經(jīng)啟動的Activity請求結(jié)果。

FLAG_ACTIVITY_CLEAR_TOP?
??如果設(shè)置,并且這個Activity已經(jīng)在當(dāng)前的Task中運行,因此,不再是重新啟動一個這個Activity的實例,而是在這個Activity上方的所有Activity都將關(guān)閉,然后這個Intent會作為一個新的Intent投遞到老的Activity(現(xiàn)在位于頂端)中。?
??例如,假設(shè)一個Task中包含這些Activity:A,B,C,D。如果D調(diào)用了startActivity(),并且包含一個指向Activity B的Intent,那么,C和D都將結(jié)束,然后B接收到這個Intent,因此,目前stack的狀況是:A,B。?
??上例中正在運行的Activity B既可以在onNewIntent()中接收到這個新的Intent,也可以把自己關(guān)閉然后重新啟動來接收這個Intent。如果它的啟動模式聲明為 “multiple”(默認(rèn)值),并且你沒有在這個Intent中設(shè)置FLAG_ACTIVITY_SINGLE_TOP標(biāo)志,那么它將關(guān)閉然后重新創(chuàng)建;對于其它的啟動模式,或者在這個Intent中設(shè)置FLAG_ACTIVITY_SINGLE_TOP標(biāo)志,都將把這個Intent投遞到當(dāng)前這個實例的onNewIntent()中。?
??這個啟動模式還可以與FLAG_ACTIVITY_NEW_TASK結(jié)合起來使用:用于啟動一個Task中的根Activity,它會把那個Task中任何運行的實例帶入前臺,然后清除它直到根Activity。這非常有用,例如,當(dāng)從Notification Manager處啟動一個Activity。

FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

??? 如果設(shè)置這個標(biāo)志,這個activity不管是從一個新的棧啟動還是從已有棧推到棧頂,它都將以the front door of the task的方式啟動。這就講導(dǎo)致任何與應(yīng)用相關(guān)的棧都講重置到正常狀態(tài)(不管是正在講activity移入還是移除),如果需要,或者直接重置該棧為初始狀態(tài)。一般和FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET標(biāo)志配合使用,詳情見FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

FLAG_ACTIVITY_SINGLE_TOP?
??如果設(shè)置,當(dāng)這個Activity位于歷史stack的頂端運行時,不再啟動一個新的

FLAG_ACTIVITY_BROUGHT_TO_FRONT?
??這個標(biāo)志一般不是由程序代碼設(shè)置的,如在launchMode中設(shè)置singleTask模式時系統(tǒng)幫你設(shè)定。

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET?
??如果設(shè)置,這將在Task的Activitystack中設(shè)置一個還原點,當(dāng)Task恢復(fù)時,需要清理Activity。也就是說,下一次Task帶著 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED標(biāo)記進(jìn)入前臺時(典型的操作是用戶在主畫面重啟它),這個Activity和它之上的都將關(guān)閉,以至于用戶不能再返回到它們,但是可以回到之前的Activity。?
??這在你的程序有分割點的時候很有用。例如,一個e-mail應(yīng)用程序可能有一個操作是查看一個附件,需要啟動圖片瀏覽Activity來顯示。這個 Activity應(yīng)該作為e-mail應(yīng)用程序Task的一部分,因為這是用戶在這個Task中觸發(fā)的操作。然而,當(dāng)用戶離開這個Task,然后從主畫面選擇e-mail app,我們可能希望回到查看的會話中,但不是查看圖片附件,因為這讓人困惑。通過在啟動圖片瀏覽時設(shè)定這個標(biāo)志,瀏覽及其它啟動的Activity在下次用戶返回到mail程序時都將全部清除。

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS?
??如果設(shè)置,新的Activity不會在最近啟動的Activity的列表中保存。

FLAG_ACTIVITY_FORWARD_RESULT?
??如果設(shè)置,并且這個Intent用于從一個存在的Activity啟動一個新的Activity,那么,這個作為答復(fù)目標(biāo)的Activity將會傳到這個新的Activity中。這種方式下,新的Activity可以調(diào)用setResult(int),并且這個結(jié)果值將發(fā)送給那個作為答復(fù)目標(biāo)的 Activity。

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY?
??這個標(biāo)志一般不由應(yīng)用程序代碼設(shè)置,如果這個Activity是從歷史記錄里啟動的(常按HOME鍵),那么,系統(tǒng)會幫你設(shè)定。

FLAG_ACTIVITY_MULTIPLE_TASK?
??不要使用這個標(biāo)志,除非你自己實現(xiàn)了應(yīng)用程序啟動器。與FLAG_ACTIVITY_NEW_TASK結(jié)合起來使用,可以禁用把已存的Task送入前臺的行為。當(dāng)設(shè)置時,新的Task總是會啟動來處理Intent,而不管這是是否已經(jīng)有一個Task可以處理相同的事情。?
??由于默認(rèn)的系統(tǒng)不包含圖形Task管理功能,因此,你不應(yīng)該使用這個標(biāo)志,除非你提供給用戶一種方式可以返回到已經(jīng)啟動的Task。?
??如果FLAG_ACTIVITY_NEW_TASK標(biāo)志沒有設(shè)置,這個標(biāo)志被忽略。

?

FLAG_ACTIVITY_NO_ANIMATION?
??如果在Intent中設(shè)置,并傳遞給Context.startActivity()的話,這個標(biāo)志將阻止系統(tǒng)進(jìn)入下一個Activity時應(yīng)用 Acitivity遷移動畫。這并不意味著動畫將永不運行——如果另一個Activity在啟動顯示之前,沒有指定這個標(biāo)志,那么,動畫將被應(yīng)用。這個標(biāo)志可以很好的用于執(zhí)行一連串的操作,而動畫被看作是更高一級的事件的驅(qū)動。

FLAG_ACTIVITY_NO_HISTORY?
??如果設(shè)置,新的Activity將不再歷史stack中保留。用戶一離開它,這個Activity就關(guān)閉了。這也可以通過設(shè)置noHistory特性。

FLAG_ACTIVITY_NO_USER_ACTION?
??如果設(shè)置,作為新啟動的Activity進(jìn)入前臺時,這個標(biāo)志將在Activity暫停之前阻止從最前方的Activity回調(diào)的onUserLeaveHint()。?
??典型的,一個Activity可以依賴這個回調(diào)指明顯式的用戶動作引起的Activity移出后臺。這個回調(diào)在Activity的生命周期中標(biāo)記一個合適的點,并關(guān)閉一些Notification。?
??如果一個Activity通過非用戶驅(qū)動的事件,如來電或鬧鐘,啟動的,這個標(biāo)志也應(yīng)該傳遞給Context.startActivity,保證暫停的Activity不認(rèn)為用戶已經(jīng)知曉其Notification。

FLAG_ACTIVITY_PREVIOUS_IS_TOP?
??If set and this intent is being used to launch a new activity froman existing one, the current activity will not be counted as the top activityfor deciding whether the new intent should be delivered to the top instead ofstarting a new one. The previous activity will be used as the top, with theassumption being that the current activity will finish itself immediately.

FLAG_ACTIVITY_REORDER_TO_FRONT?
??如果在Intent中設(shè)置,并傳遞給Context.startActivity(),這個標(biāo)志將引發(fā)已經(jīng)運行的Activity移動到歷史stack的頂端。?
??例如,假設(shè)一個Task由四個Activity組成:A,B,C,D。如果D調(diào)用startActivity()來啟動Activity B,那么,B會移動到歷史stack的頂端,現(xiàn)在的次序變成A,C,D,B。如果FLAG_ACTIVITY_CLEAR_TOP標(biāo)志也設(shè)置的話,那么這個標(biāo)志將被忽略。

9、??? 請描述下Activity的生命周期。

答:activity的生命周期方法有:onCreate()、onStart()、onReStart()、onResume()、onPause()、onStop()、onDestory();

可見生命周期:從onStart()直到系統(tǒng)調(diào)用onStop()

前臺生命周期:從onResume()直到系統(tǒng)調(diào)用onPause()

10、? activity在屏幕旋轉(zhuǎn)時的生命周期

答:不設(shè)置Activity的android:configChanges時,切屏?xí)匦抡{(diào)用各個生命周期,切橫屏?xí)r會執(zhí)行一次,切豎屏?xí)r會執(zhí)行兩次;設(shè)置Activity的android:configChanges="orientation"時,切屏還是會重新調(diào)用各個生命周期,切橫、豎屏?xí)r只會執(zhí)行一次;設(shè)置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfigurationChanged方法

11、? 如何啟用Service,如何停用Service。

服務(wù)的開發(fā)比較簡單,如下:

第一步:繼承Service類

public classSMSService extends Service {}

第二步:在AndroidManifest.xml文件中的<application>節(jié)點里對服務(wù)進(jìn)行配置:<serviceandroid:name=".SMSService" />

服務(wù)不能自己運行,需要通過調(diào)用Context.startService()或Context.bindService()方法啟動服務(wù)。這兩個方法都可以啟動Service,但是它們的使用場合有所不同。使用startService()方法啟用服務(wù),調(diào)用者與服務(wù)之間沒有關(guān)連,即使調(diào)用者退出了,服務(wù)仍然運行。使用bindService()方法啟用服務(wù),調(diào)用者與服務(wù)綁定在了一起,調(diào)用者一旦退出,服務(wù)也就終止,大有“不求同時生,必須同時死”的特點。

如果打算采用Context.startService()方法啟動服務(wù),在服務(wù)未被創(chuàng)建時,系統(tǒng)會先調(diào)用服務(wù)的onCreate()方法,接著調(diào)用onStart()方法。如果調(diào)用startService()方法前服務(wù)已經(jīng)被創(chuàng)建,多次調(diào)用startService()方法并不會導(dǎo)致多次創(chuàng)建服務(wù),但會導(dǎo)致多次調(diào)用onStart()方法。采用startService()方法啟動的服務(wù),只能調(diào)用Context.stopService()方法結(jié)束服務(wù),服務(wù)結(jié)束時會調(diào)用onDestroy()方法。

如果打算采用Context.bindService()方法啟動服務(wù),在服務(wù)未被創(chuàng)建時,系統(tǒng)會先調(diào)用服務(wù)的onCreate()方法,接著調(diào)用onBind()方法。這個時候調(diào)用者和服務(wù)綁定在一起,調(diào)用者退出了,系統(tǒng)就會先調(diào)用服務(wù)的onUnbind()方法,接著調(diào)用onDestroy()方法。如果調(diào)用bindService()方法前服務(wù)已經(jīng)被綁定,多次調(diào)用bindService()方法并不會導(dǎo)致多次創(chuàng)建服務(wù)及綁定(也就是說onCreate()和onBind()方法并不會被多次調(diào)用)。如果調(diào)用者希望與正在綁定的服務(wù)解除綁定,可以調(diào)用unbindService()方法,調(diào)用該方法也會導(dǎo)致系統(tǒng)調(diào)用服務(wù)的onUnbind()-->onDestroy()方法。

?

服務(wù)常用生命周期回調(diào)方法如下:

onCreate() 該方法在服務(wù)被創(chuàng)建時調(diào)用,該方法只會被調(diào)用一次,無論調(diào)用多少次startService()或bindService()方法,服務(wù)也只被創(chuàng)建一次。

onDestroy()該方法在服務(wù)被終止時調(diào)用。

與采用Context.startService()方法啟動服務(wù)有關(guān)的生命周期方法

onStart() 只有采用Context.startService()方法啟動服務(wù)時才會回調(diào)該方法。該方法在服務(wù)開始運行時被調(diào)用。多次調(diào)用startService()方法盡管不會多次創(chuàng)建服務(wù),但onStart() 方法會被多次調(diào)用。

與采用Context.bindService()方法啟動服務(wù)有關(guān)的生命周期方法

onBind()只有采用Context.bindService()方法啟動服務(wù)時才會回調(diào)該方法。該方法在調(diào)用者與服務(wù)綁定時被調(diào)用,當(dāng)調(diào)用者與服務(wù)已經(jīng)綁定,多次調(diào)用Context.bindService()方法并不會導(dǎo)致該方法被多次調(diào)用。

onUnbind()只有采用Context.bindService()方法啟動服務(wù)時才會回調(diào)該方法。該方法在調(diào)用者與服務(wù)解除綁定時被調(diào)用

?

12、??? 注冊廣播有幾種方式,這些方式有何優(yōu)缺點?請談?wù)凙ndroid引入廣播機制的用意。

答:首先寫一個類要繼承BroadcastReceiver

第一種:在清單文件中聲明,添加

<receiveandroid:name=".IncomingSMSReceiver " >

<intent-filter>

?? <actionandroid:name="android.provider.Telephony.SMS_RECEIVED")

<intent-filter>

<receiver>

第二種使用代碼進(jìn)行注冊如:

IntentFilterfilter =? newIntentFilter("android.provider.Telephony.SMS_RECEIVED");

IncomingSMSReceiverreceiver = new IncomgSMSReceiver();

registerReceiver(receiver.filter);

兩種注冊類型的區(qū)別是:

1)第一種不是常駐型廣播,也就是說廣播跟隨程序的生命周期。

2)第二種是常駐型,也就是說當(dāng)應(yīng)用程序關(guān)閉后,如果有信息廣播來,程序也會被系統(tǒng)調(diào)用自動運行。

?

13、??? 請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關(guān)系。

答:簡單的說,Handler獲取當(dāng)前線程中的looper對象,looper用來從存放Message的MessageQueue中取出Message,再有Handler進(jìn)行Message的分發(fā)和處理.

Message Queue(消息隊列):用來存放通過Handler發(fā)布的消息,通常附屬于某一個創(chuàng)建它的線程,可以通過Looper.myQueue()得到當(dāng)前線程的消息隊列

Handler:可以發(fā)布或者處理一個消息或者操作一個Runnable,通過Handler發(fā)布消息,消息將只會發(fā)送到與它關(guān)聯(lián)的消息隊列,然也只能處理該消息隊列中的消息

Looper:是Handler和消息隊列之間通訊橋梁,程序組件首先通過Handler把消息傳遞給Looper,Looper把消息放入隊列。Looper也把消息隊列里的消息廣播給所有的

Handler:Handler接受到消息后調(diào)用handleMessage進(jìn)行處理

Message:消息的類型,在Handler類中的handleMessage方法中得到單個的消息進(jìn)行處理

在單線程模型下,為了線程通信問題,Android設(shè)計了一個Message Queue(消息隊列), 線程間可以通過該Message Queue并結(jié)合Handler和Looper組件進(jìn)行信息交換。下面將對它們進(jìn)行分別介紹:

1. Message

??? Message消息,理解為線程間交流的信息,處理數(shù)據(jù)后臺線程需要更新UI,則發(fā)送Message內(nèi)含一些數(shù)據(jù)給UI線程。

2. Handler

??? Handler處理者,是Message的主要處理者,負(fù)責(zé)Message的發(fā)送,Message內(nèi)容的執(zhí)行處理。后臺線程就是通過傳進(jìn)來的 Handler對象引用來sendMessage(Message)。而使用Handler,需要implement 該類的 handleMessage(Message)方法,它是處理這些Message的操作內(nèi)容,例如Update UI。通常需要子類化Handler來實現(xiàn)handleMessage方法。

3. Message Queue

??? Message Queue消息隊列,用來存放通過Handler發(fā)布的消息,按照先進(jìn)先出執(zhí)行。

??? 每個message queue都會有一個對應(yīng)的Handler。Handler會向messagequeue通過兩種方法發(fā)送消息:sendMessage或post。這兩種消息都會插在message queue隊尾并按先進(jìn)先出執(zhí)行。但通過這兩種方法發(fā)送的消息執(zhí)行的方式略有不同:通過sendMessage發(fā)送的是一個message對象,會被 Handler的handleMessage()函數(shù)處理;而通過post方法發(fā)送的是一個runnable對象,則會自己執(zhí)行。

4. Looper

??? Looper是每條線程里的Message Queue的管家。Android沒有Global的MessageQueue,而Android會自動替主線程(UI線程)建立Message Queue,但在子線程里并沒有建立Message Queue。所以調(diào)用Looper.getMainLooper()得到的主線程的Looper不為NULL,但調(diào)用Looper.myLooper()得到當(dāng)前線程的Looper就有可能為NULL。對于子線程使用Looper,API Doc提供了正確的使用方法:這個Message機制的大概流程:

??? 1. 在Looper.loop()方法運行開始后,循環(huán)地按照接收順序取出Message Queue里面的非NULL的Message。

??? 2. 一開始Message Queue里面的Message都是NULL的。當(dāng)Handler.sendMessage(Message)到Message Queue,該函數(shù)里面設(shè)置了那個Message對象的target屬性是當(dāng)前的Handler對象。隨后Looper取出了那個Message,則調(diào)用 該Message的target指向的Hander的dispatchMessage函數(shù)對Message進(jìn)行處理。在dispatchMessage方法里,如何處理Message則由用戶指定,三個判斷,優(yōu)先級從高到低:

??? 1) Message里面的Callback,一個實現(xiàn)了Runnable接口的對象,其中run函數(shù)做處理工作;

??? 2) Handler里面的mCallback指向的一個實現(xiàn)了Callback接口的對象,由其handleMessage進(jìn)行處理;

??? 3) 處理消息Handler對象對應(yīng)的類繼承并實現(xiàn)了其中handleMessage函數(shù),通過這個實現(xiàn)的handleMessage函數(shù)處理消息。

??? 由此可見,我們實現(xiàn)的handleMessage方法是優(yōu)先級最低的!

??? 3. Handler處理完該Message (updateUI) 后,Looper則設(shè)置該Message為NULL,以便回收!

??? 在網(wǎng)上有很多文章講述主線程和其他子線程如何交互,傳送信息,最終誰來執(zhí)行處理信息之類的,個人理解是最簡單的方法——判斷Handler對象里面的Looper對象是屬于哪條線程的,則由該線程來執(zhí)行!

??? 1. 當(dāng)Handler對象的構(gòu)造函數(shù)的參數(shù)為空,則為當(dāng)前所在線程的Looper;

2. Looper.getMainLooper()得到的是主線程的Looper對象,Looper.myLooper()得到的是當(dāng)前線程的Looper對象。

14、??? 簡要解釋一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver

答:一個activity呈現(xiàn)了一個用戶可以操作的可視化用戶界面;一個service不包含可見的用戶界面,而是在后臺運行,可以與一個activity綁定,通過綁定暴露出來接口并與其進(jìn)行通信;一個broadcast receiver是一個接收廣播消息并做出回應(yīng)的component,broadcast receiver沒有界面;一個intent是一個Intent對象,它保存了消息的內(nèi)容。對于activity和service來說,它指定了請求的操作名稱和待操作數(shù)據(jù)的URI,Intent對象可以顯式的指定一個目標(biāo)component。如果這樣的話,android會找到這個component(基于manifest文件中的聲明)并激活它。但如果一個目標(biāo)不是顯式指定的,android必須找到響應(yīng)intent的最佳component。它是通過將Intent對象和目標(biāo)的intent filter相比較來完成這一工作的;一個component的intent filter告訴android該component能處理的intent。intentfilter也是在manifest文件中聲明的。

15、??? 說說mvc模式的原理,它在android中的運用,android的官方建議應(yīng)用程序的開發(fā)采用mvc模式。何謂mvc?

mvc是model,view,controller的縮寫,mvc包含三個部分:

  模型(model)對象:是應(yīng)用程序的主體部分,所有的業(yè)務(wù)邏輯都應(yīng)該寫在該層。

  視圖(view)對象:是應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分。也是在整個mvc架構(gòu)中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結(jié)果。

  控制器(control)對象:是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新model對象狀態(tài)的部分,控制器更重要的一種導(dǎo)航功能,響應(yīng)用戶出發(fā)的相關(guān)事件,交給m層處理。

  android鼓勵弱耦合和組件的重用,在android中mvc的具體體現(xiàn)如下:

  1)視圖層(view):一般采用xml文件進(jìn)行界面的描述,使用的時候可以非常方便的引入,當(dāng)然,如果你對android了解的比較的多了話,就一定可以想到在android中也可以使用JavaScript+html等的方式作為view層,當(dāng)然這里需要進(jìn)行java和javascript之間的通信,幸運的是,android提供了它們之間非常方便的通信實現(xiàn)。

  2)控制層(controller):android的控制層的重任通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫代碼,要通過activity交割model業(yè)務(wù)邏輯層處理,這樣做的另外一個原因是android中的acitivity的響應(yīng)時間是5s,如果耗時的操作放在這里,程序就很容易被回收掉。

  3)模型層(model):對數(shù)據(jù)庫的操作、對網(wǎng)絡(luò)等的操作都應(yīng)該在model里面處理,當(dāng)然對業(yè)務(wù)計算等操作也是必須放在的該層的。

16、??? 什么是ANR 如何避免它?

答:ANR:Application Not Responding。在Android中,活動管理器和窗口管理器這兩個系統(tǒng)服務(wù)負(fù)責(zé)監(jiān)視應(yīng)用程序的響應(yīng),當(dāng)用戶操作的在5s內(nèi)應(yīng)用程序沒能做出反應(yīng),BroadcastReceiver在10秒內(nèi)沒有執(zhí)行完畢,就會出現(xiàn)應(yīng)用程序無響應(yīng)對話框,這既是ANR。

避免方法:Activity應(yīng)該在它的關(guān)鍵生命周期方法(如onCreate()和onResume())里盡可能少的去做創(chuàng)建操作。潛在的耗時操作,例如網(wǎng)絡(luò)或數(shù)據(jù)庫操作,或者高耗時的計算如改變位圖尺寸,應(yīng)該在子線程里(或者異步方式)來完成。主線程應(yīng)該為子線程提供一個Handler,以便完成時能夠提交給主線程。

17、??? 什么情況會導(dǎo)致Force Close ?如何避免?能否捕獲導(dǎo)致其的異常?

答:程序出現(xiàn)異常,比如nullpointer。

避免:編寫程序時邏輯連貫,思維縝密。能捕獲異常,在logcat中能看到異常信息

18、??? 描述一下android的系統(tǒng)架構(gòu)

android系統(tǒng)架構(gòu)分從下往上為linux 內(nèi)核層、運行庫、應(yīng)用程序框架層、和應(yīng)用程序?qū)印?/p>

linuxkernel:負(fù)責(zé)硬件的驅(qū)動程序、網(wǎng)絡(luò)、電源、系統(tǒng)安全以及內(nèi)存管理等功能。

libraries和 android runtime:libraries:即c/c++函數(shù)庫部分,大多數(shù)都是開放源代碼的函數(shù)庫,例如webkit(引擎),該函數(shù)庫負(fù)責(zé) android網(wǎng)頁瀏覽器的運行,例如標(biāo)準(zhǔn)的c函數(shù)庫libc、openssl、sqlite等,當(dāng)然也包括支持游戲開發(fā)2dsgl和 3dopengles,在多媒體方面有mediaframework框架來支持各種影音和圖形文件的播放與顯示,例如mpeg4、h.264、mp3、 aac、amr、jpg和png等眾多的多媒體文件格式。android的runtime負(fù)責(zé)解釋和執(zhí)行生成的dalvik格式的字節(jié)碼。

  applicationframework(應(yīng)用軟件架構(gòu)),java應(yīng)用程序開發(fā)人員主要是使用該層封裝好的api進(jìn)行快速開發(fā)。

  applications:該層是java的應(yīng)用程序?qū)?#xff0c;android內(nèi)置的googlemaps、e-mail、即時通信工具、瀏覽器、mp3播放器等處于該層,java開發(fā)人員開發(fā)的程序也處于該層,而且和內(nèi)置的應(yīng)用程序具有平等的位置,可以調(diào)用內(nèi)置的應(yīng)用程序,也可以替換內(nèi)置的應(yīng)用程序。

  上面的四個層次,下層為上層服務(wù),上層需要下層的支持,調(diào)用下層的服務(wù),這種嚴(yán)格分層的方式帶來的極大的穩(wěn)定性、靈活性和可擴展性,使得不同層的開發(fā)人員可以按照規(guī)范專心特定層的開發(fā)。

android應(yīng)用程序使用框架的api并在框架下運行,這就帶來了程序開發(fā)的高度一致性,另一方面也告訴我們,要想寫出優(yōu)質(zhì)高效的程序就必須對整個 applicationframework進(jìn)行非常深入的理解。精通applicationframework,你就可以真正的理解android的設(shè)計和運行機制,也就更能夠駕馭整個應(yīng)用層的開發(fā)。

19、??? 請介紹下ContentProvider是如何實現(xiàn)數(shù)據(jù)共享的。

一個程序可以通過實現(xiàn)一個Content provider的抽象接口將自己的數(shù)據(jù)完全暴露出去,而且Contentproviders是以類似數(shù)據(jù)庫中表的方式將數(shù)據(jù)暴露。Content providers存儲和檢索數(shù)據(jù),通過它可以讓所有的應(yīng)用程序訪問到,這也是應(yīng)用程序之間唯一共享數(shù)據(jù)的方法。

要想使應(yīng)用程序的數(shù)據(jù)公開化,可通過2種方法:創(chuàng)建一個屬于你自己的Content provider或者將你的數(shù)據(jù)添加到一個已經(jīng)存在的Content provider中,前提是有相同數(shù)據(jù)類型并且有寫入Contentprovider的權(quán)限。

如何通過一套標(biāo)準(zhǔn)及統(tǒng)一的接口獲取其他應(yīng)用程序暴露的數(shù)據(jù)?

??? Android提供了ContentResolver,外界的程序可以通過ContentResolver接口訪問ContentProvider提供的數(shù)據(jù)。

20、??? Service和Thread的區(qū)別?

答:servie是系統(tǒng)的組件,它由系統(tǒng)進(jìn)程托管(servicemanager);它們之間的通信類似于client和server,是一種輕量級的ipc通信,這種通信的載體是binder,它是在linux層交換信息的一種ipc。而thread是由本應(yīng)用程序托管。

1). Thread:Thread是程序執(zhí)行的最小單元,它是分配CPU的基本單位。可以用Thread 來執(zhí)行一些異步的操作。

2). Service:Service是android的一種機制,當(dāng)它運行的時候如果是LocalService,那么對應(yīng)的Service 是運行在主進(jìn)程的main 線程上的。如:onCreate,onStart這些函數(shù)在被系統(tǒng)調(diào)用的時候都是在主進(jìn)程的 main 線程上運行的。如果是Remote?Service,那么對應(yīng)的Service 則是運行在獨立進(jìn)程的main 線程上。

既然這樣,那么我們?yōu)槭裁匆肧ervice 呢?其實這跟android 的系統(tǒng)機制有關(guān),我們先拿Thread 來說。Thread的運行是獨立于 Activity 的,也就是說當(dāng)一個Activity 被 finish 之后,如果你沒有主動停止Thread?或者Thread 里的?run方法沒有執(zhí)行完畢的話,Thread?也會一直執(zhí)行。因此這里會出現(xiàn)一個問題:當(dāng)Activity 被 finish 之后,你不再持有該Thread 的引用。另一方面,你沒有辦法在不同的Activity 中對同一Thread 進(jìn)行控制。??

舉個例子:如果你的Thread 需要不停地隔一段時間就要連接服務(wù)器做某種同步的話,該Thread?需要在Activity 沒有start的時候也在運行。這個時候當(dāng)你start 一個Activity 就沒有辦法在該Activity 里面控制之前創(chuàng)建的Thread。因此你便需要創(chuàng)建并啟動一個Service ,在Service 里面創(chuàng)建、運行并控制該Thread,這樣便解決了該問題(因為任何Activity 都可以控制同一Service,而系統(tǒng)也只會創(chuàng)建一個對應(yīng)Service 的實例)。??

因此你可以把Service 想象成一種消息服務(wù),而你可以在任何有Context 的地方調(diào)用Context.startService、Context.stopService、Context.bindService,Context.unbindService,來控制它,你也可以在Service 里注冊BroadcastReceiver,在其他地方通過發(fā)送broadcast 來控制它,當(dāng)然這些都是Thread 做不到的。

21、??? Android本身的api并未聲明會拋出異常,則其在運行時有無可能拋出runtime異常,你遇到過嗎?諾有的話會導(dǎo)致什么問題?如何解決?

答:會,比如nullpointerException。我遇到過,比如textview.setText()時,textview沒有初始化。會導(dǎo)致程序無法正常運行出現(xiàn)forceclose。打開控制臺查看logcat信息找出異常信息并修改程序。

22、??? IntentService有何優(yōu)點?

答:Acitivity的進(jìn)程,當(dāng)處理Intent的時候,會產(chǎn)生一個對應(yīng)的Service; Android的進(jìn)程處理器現(xiàn)在會盡可能的不kill掉你;非常容易使用

23、??? 如果后臺的Activity由于某原因被系統(tǒng)回收了,如何在被系統(tǒng)回收之前保存當(dāng)前狀態(tài)?

答:重寫onSaveInstanceState()方法,在此方法中保存需要保存的數(shù)據(jù),該方法將會在activity被回收之前調(diào)用。通過重寫onRestoreInstanceState()方法可以從中提取保存好的數(shù)據(jù)

24、??? 如何將一個Activity設(shè)置成窗口的樣式。

答:<activity>中配置:android?:theme="@android:style/Theme.Dialog"?

另外android:theme="@android:style/Theme.Translucent"?是設(shè)置透明

25、??? 如何退出Activity?如何安全退出已調(diào)用多個Activity的Application?

答:對于單一Activity的應(yīng)用來說,退出很簡單,直接finish()即可。當(dāng)然,也可以用killProcess()和System.exit()這樣的方法。

對于多個activity,1、記錄打開的Activity:每打開一個Activity,就記錄下來。在需要退出時,關(guān)閉每一個Activity即可。2、發(fā)送特定廣播:在需要結(jié)束應(yīng)用時,發(fā)送一個特定的廣播,每個Activity收到廣播后,關(guān)閉即可。3、遞歸退出:在打開新的Activity時使用startActivityForResult,然后自己加標(biāo)志,在onActivityResult中處理,遞歸關(guān)閉。為了編程方便,最好定義一個Activity基類,處理這些共通問題。

?

在2.1之前,可以使用ActivityManager的restartPackage方法。

它可以直接結(jié)束整個應(yīng)用。在使用時需要權(quán)限android.permission.RESTART_PACKAGES。

注意不要被它的名字迷惑。

可是,在2.2,這個方法失效了。在2.2添加了一個新的方法,killBackground Processes(),需要權(quán)限android.permission.KILL_BACKGROUND_PROCESSES。可惜的是,它和2.2的restartPackage一樣,根本起不到應(yīng)有的效果。

另外還有一個方法,就是系統(tǒng)自帶的應(yīng)用程序管理里,強制結(jié)束程序的方法,forceStopPackage()。它需要權(quán)限android.permission.FORCE_STOP_PACKAGES。并且需要添加android:sharedUserId="android.uid.system"屬性。同樣可惜的是,該方法是非公開的,他只能運行在系統(tǒng)進(jìn)程,第三方程序無法調(diào)用。

因為需要在Android.mk中添加LOCAL_CERTIFICATE := platform。

而Android.mk是用于在Android源碼下編譯程序用的。

從以上可以看出,在2.2,沒有辦法直接結(jié)束一個應(yīng)用,而只能用自己的辦法間接辦到。

現(xiàn)提供幾個方法,供參考:

1、拋異常強制退出:

該方法通過拋異常,使程序Force Close。

驗證可以,但是,需要解決的問題是,如何使程序結(jié)束掉,而不彈出Force Close的窗口。

2、記錄打開的Activity:

每打開一個Activity,就記錄下來。在需要退出時,關(guān)閉每一個Activity即可。

3、發(fā)送特定廣播:

在需要結(jié)束應(yīng)用時,發(fā)送一個特定的廣播,每個Activity收到廣播后,關(guān)閉即可。

4、遞歸退出

在打開新的Activity時使用startActivityForResult,然后自己加標(biāo)志,在onActivityResult中處理,遞歸關(guān)閉。

除了第一個,都是想辦法把每一個Activity都結(jié)束掉,間接達(dá)到目的。但是這樣做同樣不完美。你會發(fā)現(xiàn),如果自己的應(yīng)用程序?qū)γ恳粋€Activity都設(shè)置了nosensor,在兩個Activity結(jié)束的間隙,sensor可能有效了。但至少,我們的目的達(dá)到了,而且沒有影響用戶使用。為了編程方便,最好定義一個Activity基類,處理這些共通問題。

?

26、? AIDL的全稱是什么?如何工作?能處理哪些類型的數(shù)據(jù)?

答:全稱是:AndroidInterface Define Language

在Android中, 每個應(yīng)用程序都可以有自己的進(jìn)程. 在寫UI應(yīng)用的時候, 經(jīng)常要用到Service. 在不同的進(jìn)程中, 怎樣傳遞對象呢?顯然, Java中不允許跨進(jìn)程內(nèi)存共享.因此傳遞對象, 只能把對象拆分成操作系統(tǒng)能理解的簡單形式, 以達(dá)到跨界對象訪問的目的. 在J2EE中,采用RMI的方式, 可以通過序列化傳遞對象.在Android中, 則采用AIDL的方式. 理論上AIDL可以傳遞Bundle,實際上做起來卻比較麻煩。

AIDL(AndRoid接口描述語言)是一種借口描述語言; 編譯器可以通過aidl文件生成一段代碼,通過預(yù)先定義的接口達(dá)到兩個進(jìn)程內(nèi)部通信進(jìn)程的目的. 如果需要在一個Activity中, 訪問另一個Service中的某個對象, 需要先將對象轉(zhuǎn)化成AIDL可識別的參數(shù)(可能是多個參數(shù)),然后使用AIDL來傳遞這些參數(shù), 在消息的接收端, 使用這些參數(shù)組裝成自己需要的對象.

AIDL的IPC的機制和COM或CORBA類似, 是基于接口的,但它是輕量級的。它使用代理類在客戶端和實現(xiàn)層間傳遞值. 如果要使用AIDL, 需要完成2件事情: 1. 引入AIDL的相關(guān)類.; 2.調(diào)用aidl產(chǎn)生的class.

AIDL的創(chuàng)建方法:

AIDL語法很簡單,可以用來聲明一個帶一個或多個方法的接口,也可以傳遞參數(shù)和返回值。 由于遠(yuǎn)程調(diào)用的需要, 這些參數(shù)和返回值并不是任何類型.下面是些AIDL支持的數(shù)據(jù)類型:

1. 不需要import聲明的簡單Java編程語言類型(int,boolean等)

2. String, CharSequence不需要特殊聲明

3. List, Map和Parcelables類型, 這些類型內(nèi)所包含的數(shù)據(jù)成員也只能是簡單數(shù)據(jù)類型, String等其他比支持的類型.

(另外: 我沒嘗試Parcelables, 在Eclipse+ADT下編譯不過, 或許以后會有所支持)

27、??? 請解釋下Android程序運行時權(quán)限與文件系統(tǒng)權(quán)限的區(qū)別。

答:運行時權(quán)限D(zhuǎn)alvik(android授權(quán))

文件系統(tǒng) linux 內(nèi)核授權(quán)

28、??? 系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請說明原由。

通過直接發(fā)送Uri把參數(shù)帶過去,或者通過manifest里的intentfilter里的data屬性

?

29、??? android系統(tǒng)的優(yōu)勢和不足

答:Android平臺手機 5大優(yōu)勢:

一、開放性

在優(yōu)勢方面,Android平臺首先就是其開發(fā)性,開發(fā)的平臺允許任何移動終端廠商加入到Android聯(lián)盟中來。顯著的開放性可以使其擁有更多的開發(fā)者,隨著用戶和應(yīng)用的日益豐富,一個嶄新的平臺也將很快走向成熟。開放性對于Android的發(fā)展而言,有利于積累人氣,這里的人氣包括消費者和廠商,而對于消費者來講,隨大的受益正是豐富的軟件資源。開放的平臺也會帶來更大競爭,如此一來,消費者將可以用更低的價位購得心儀的手機。

二、掙脫運營商的束縛

在過去很長的一段時間,特別是在歐美地區(qū),手機應(yīng)用往往受到運營商制約,使用什么功能接入什么網(wǎng)絡(luò),幾乎都受到運營商的控制。從去年iPhone 上市 ,用戶可以更加方便地連接網(wǎng)絡(luò),運營商的制約減少。隨著EDGE、HSDPA這些2G至3G移動網(wǎng)絡(luò)的逐步過渡和提升,手機隨意接入網(wǎng)絡(luò)已不是運營商口中的笑談,當(dāng)你可以通過手機IM軟件方便地進(jìn)行即時聊天時,再回想不久前天價的彩信和圖鈴下載業(yè)務(wù),是不是像噩夢一樣?互聯(lián)網(wǎng)巨頭Google推動的Android終端天生就有網(wǎng)絡(luò)特色,將讓用戶離互聯(lián)網(wǎng)更近。

三、豐富的硬件選擇

這一點還是與Android平臺的開放性相關(guān),由于Android的開放性,眾多的廠商會推出千奇百怪,功能特色各具的多種產(chǎn)品。功能上的差異和特色,卻不會影響到數(shù)據(jù)同步、甚至軟件的兼容,好比你從諾基亞 Symbian風(fēng)格手機 一下改用蘋果 iPhone ,同時還可將Symbian中優(yōu)秀的軟件帶到iPhone上使用、聯(lián)系人等資料更是可以方便地轉(zhuǎn)移,是不是非常方便呢?

四、不受任何限制的開發(fā)商

Android平臺提供給第三方開發(fā)商一個十分寬泛、自由的環(huán)境,不會受到各種條條框框的阻擾,可想而知,會有多少新穎別致的軟件會誕生。但也有其兩面性,血腥、暴力、情色方面的程序和游戲如可控制正是留給Android難題之一。

五、無縫結(jié)合的Google應(yīng)用

如今叱詫互聯(lián)網(wǎng)的Google已經(jīng)走過10年度歷史,從搜索巨人到全面的互聯(lián)網(wǎng)滲透,Google服務(wù)如地圖、郵件、搜索等已經(jīng)成為連接用戶和互聯(lián)網(wǎng)的重要紐帶,而Android平臺手機將無縫結(jié)合這些優(yōu)秀的Google服務(wù)。

再說Android的5大不足:

一、安全和隱私

由于手機 與互聯(lián)網(wǎng)的緊密聯(lián)系,個人隱私很難得到保守。除了上網(wǎng)過程中經(jīng)意或不經(jīng)意留下的個人足跡,Google這個巨人也時時站在你的身后,洞穿一切,因此,互聯(lián)網(wǎng)的深入將會帶來新一輪的隱私危機。

二、首先開賣Android手機的不是最大運營商

眾所周知,T-Mobile在23日,于美國紐約發(fā)布 了Android首款手機G1。但是在北美市場,最大的兩家運營商乃AT&T和Verizon,而目前所知取得Android手機銷售權(quán)的僅有 T-Mobile和Sprint,其中T-Mobile的3G網(wǎng)絡(luò)相對于其他三家也要遜色不少,因此,用戶可以買賬購買G1,能否體驗到最佳的3G網(wǎng)絡(luò)服務(wù)則要另當(dāng)別論了!

三、運營商仍然能夠影響到Android手機

在國內(nèi)市場,不少用戶對購得移動定制機不滿,感覺所購的手機被人涂畫了廣告一般。這樣的情況在國外市場同樣出現(xiàn)。Android手機的另一發(fā)售運營商Sprint就將在其機型中內(nèi)置其手機商店程序。

四、同類機型用戶減少

在不少手機論壇都會有針對某一型號的子論壇,對一款手機的使用心得交流,并分享軟件資源。而對于Android平臺手機,由于廠商豐富,產(chǎn)品類型多樣,這樣使用同一款機型的用戶越來越少,缺少統(tǒng)一機型的程序強化。舉個稍顯不當(dāng)?shù)睦?#xff0c;現(xiàn)在山寨機泛濫,品種各異,就很少有專門針對某個型號山寨機的討論和群組,除了哪些功能異常搶眼、頗受追捧的機型以外。

五、過分依賴開發(fā)商缺少標(biāo)準(zhǔn)配置

在使用PC端的Windows Xp系統(tǒng)的時候,都會內(nèi)置微軟Windows Media Player這樣一個瀏覽器程序,用戶可以選擇更多樣的播放器,如Realplay或暴風(fēng)影音等。但入手開始使用默認(rèn)的程序同樣可以應(yīng)付多樣的需要。在Android平臺中,由于其開放性,軟件更多依賴第三方廠商,比如Android系統(tǒng)的SDK中就沒有內(nèi)置音樂 播放器,全部依賴第三方開發(fā),缺少了產(chǎn)品的統(tǒng)一性。

30、? Android dvm的進(jìn)程和Linux的進(jìn)程, 應(yīng)用程序的進(jìn)程是否為同一個概念

答:DVM指dalivk的虛擬機。每一個Android應(yīng)用程序都在它自己的進(jìn)程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每一個DVM都是在Linux 中的一個進(jìn)程,所以說可以認(rèn)為是同一個概念。

31、? sim卡的EF文件是什么?有何作用

答:sim卡的文件系統(tǒng)有自己規(guī)范,主要是為了和手機通訊,sim本 身可以有自己的操作系統(tǒng),EF就是作存儲并和手機通訊用的

32、? 嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種, 各有何特性

  頁式,段式,段頁,用到了MMU,虛擬空間等技術(shù)

33、? 什么是嵌入式實時操作系統(tǒng), Android 操作系統(tǒng)屬于實時操作系統(tǒng)嗎?

嵌入式實時操作系統(tǒng)是指當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時,能夠接受并以足夠快的速度予以處理,其處理的結(jié)果又能在規(guī)定的時間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)作出快速響應(yīng),并控制所有實時任務(wù)協(xié)調(diào)一致運行的嵌入式操作系統(tǒng)。主要用于工業(yè)控制、軍事設(shè)備、 航空航天等領(lǐng)域?qū)ο到y(tǒng)的響應(yīng)時間有苛刻的要求,這就需要使用實時系統(tǒng)。又可分為軟實時和硬實時兩種,而android是基于linux內(nèi)核的,因此屬于軟實時。

34、? 一條最長的短信息約占多少byte?

  中文70(包括標(biāo)點),英文160,160個字節(jié)。  

35、? 有一個一維整型數(shù)組int[]data保存的是一張寬為width,高為height的圖片像素值信息。請寫一個算法,將該圖片所有的白色不透明(0xffffffff)像素點的透明度調(diào)整為50%。

36、? 如何將SQLite數(shù)據(jù)庫(dictionary.db文件)與apk文件一起發(fā)布

解答:可以將dictionary.db文件復(fù)制到Eclipse Android工程中的res aw目錄中。所有在res aw目錄中的文件不會被壓縮,這樣可以直接提取該目錄中的文件。可以將dictionary.db文件復(fù)制到res aw目錄中

37、? 如何將打開res aw目錄中的數(shù)據(jù)庫文件?

解答:在Android中不能直接打開res aw目錄中的數(shù)據(jù)庫文件,而需要在程序第一次啟動時將該文件復(fù)制到手機內(nèi)存或SD卡的某個目錄中,然后再打開該數(shù)據(jù)庫文件。

復(fù)制的基本方法是使用getResources().openRawResource方法獲得res aw目錄中資源的 InputStream對象,然后將該InputStream對象中的數(shù)據(jù)寫入其他的目錄中相應(yīng)文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法來打開任意目錄中的SQLite數(shù)據(jù)庫文件。

38、? DDMS和TraceView的區(qū)別?

DDMS是一個程序執(zhí)行查看器,在里面可以看見線程和堆棧等信息,TraceView是程序性能分析器 。

39、? java中如何引用本地語言

可以用JNI(java native interface ?java 本地接口)接口 。

40、? 談?wù)凙ndroid的IPC(進(jìn)程間通信)機制

IPC是內(nèi)部進(jìn)程通信的簡稱,是共享"命名管道"的資源。Android中的IPC機制是為了讓Activity和Service之間可以隨時的進(jìn)行交互,故在Android中該機制,只適用于Activity和Service之間的通信,類似于遠(yuǎn)程方法調(diào)用,類似于C/S模式的訪問。通過定義AIDL接口文件來定義IPC接口。Servier端實現(xiàn)IPC接口,Client端調(diào)用IPC接口本地代理。

41、? NDK是什么

NDK是一些列工具的集合,NDK提供了一系列的工具,幫助開發(fā)者迅速的開發(fā)C/C++的動態(tài)庫,并能自動將so和java 應(yīng)用打成apk包。

NDK集成了交叉編譯器,并提供了相應(yīng)的mk文件和隔離cpu、平臺等的差異,開發(fā)人員只需簡單的修改mk文件就可以創(chuàng)建出so


Android Interview Questions & Answers七

Describe the APK format.
The APK file is compressed the AndroidManifest.xml file, application code (.dex files), resource files, and other files. A project is compiled into a single .apk file.

What is an action?
A description of something that an Intent sender desires.

What is activity?
A single screen in an application, with supporting?Java?code.

What is intent?
A class (Intent) describes what a caller desires to do. The caller sends this intent toAndroid's intent resolver, which finds the most suitable activity for the intent.

How is nine-patch image different from a regular bitmap?
It is a resizable bitmap resource that can be used for backgrounds or other images on the device. The NinePatch class permits drawing a bitmap in nine sections. The four corners are unscaled; the four edges are scaled in one axis, and the middle is scaled in both axes.

What languages does Android support for application development?
Android applications are written using the Java programming language.

What is a resource?
A user-supplied XML, bitmap, or other file, injected into the application build process, which can later be loaded from code.


How will you record a phone call in Android? How to get a handle on Audio Stream for a call in Android?
Permissions.PROCESS_OUTGOING_CALLS: Allows an application to monitor, modify, or abort outgoing calls.

What's the difference between file, class and activity in android??
File - It is a block of arbitrary information, or resource for storing information. It can be of any type.
Class - Its a compiled form of .Java file . Android finally used this .class files to produce an executable apk
Activity - An activity is the equivalent of a Frame/Window in GUI toolkits. It is not a file or a file type it is just a class that can be extended in Android for loading UI elements on view.

What is a Sticky Intent?
sendStickyBroadcast() performs a sendBroadcast (Intent) that is "sticky," i.e. the Intent you are sending stays around after the broadcast is complete, so that others can quickly retrieve that data through the return value of registerReceiver (BroadcastReceiver, IntentFilter). In all other ways, this behaves the same as sendBroadcast(Intent).

One example of a sticky broadcast sent via the operating system is ACTION_BATTERY_CHANGED. When you call registerReceiver() for that action -- even with a null BroadcastReceiver -- you get the Intent that was last broadcast for that action. Hence, you can use this to find the state of the battery without necessarily registering for all future state changes in the battery.





總結(jié)

以上是生活随笔為你收集整理的Android面试题目(1-2-3--7)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

日本在线成人 | 亚洲dvd | 日韩在线电影观看 | 香蕉视频在线网站 | 亚洲经典视频 | www黄色av| 免费看色网站 | 国产69精品久久久久久 | 精品视频一区在线观看 | 亚洲天堂网在线播放 | 日韩 国产 | 人人草人人草 | 狠狠天天 | 精品久久久久久久久久 | 国产午夜在线观看 | 色婷婷在线观看视频 | 色婷婷狠 | 激情综合六月 | 成人视屏免费看 | 国产精品免费观看视频 | 在线观看免费高清视频大全追剧 | 日韩成人av在线 | 久久久影院一区二区三区 | www.狠狠插.com | 亚洲欧美精品一区 | 国产精品18p | 成人av中文字幕在线观看 | 亚洲国产欧洲综合997久久, | 国产亚洲成人网 | 免费网站在线观看成人 | 久久精品国产免费看久久精品 | 欧美日在线观看 | 精品99在线 | 麻豆视频在线免费观看 | 国产日本在线 | 中文字幕视频在线播放 | 五月天丁香综合 | 碰超人人| 婷婷在线观看视频 | 国产成人一区二区三区影院在线 | 中文字幕丝袜制服 | 欧美性猛片, | 国产在线不卡一区 | 国产a国产 | 久久久久久97三级 | 国际精品久久 | 黄色成年 | 日日狠狠 | 国产五月 | 亚洲国产美女久久久久 | 丁香影院在线 | 国产精成人品免费观看 | 天天综合导航 | 成人免费电影 | 久久成人综合 | 国产成人黄色网址 | 国产精品精品久久久久久 | 免费裸体视频网 | 五月婷婷色 | 超碰97免费在线 | 国产女v资源在线观看 | 在线激情小视频 | 国产视频美女 | 五月婷婷操 | 成人手机在线视频 | 最新精品视频在线 | 色婷婷免费视频 | 久久99国产精品自在自在app | 小草av在线播放 | 日韩中文字幕免费电影 | 你操综合 | 亚洲欧洲xxxx | 国产成人在线观看免费 | 国产视频1 | 久久这里只有精品视频99 | 欧美与欧洲交xxxx免费观看 | 成人在线视频免费看 | 国产精品久久久久久久久久久久午夜片 | 精品国产一区二区三区久久 | 久草观看 | 欧美色综合天天久久综合精品 | 九九九热精品免费视频观看网站 | 国产美女精品视频 | 九九欧美 | 精品久久久久久综合日本 | 国产亚洲精品久久久久久网站 | 日韩成人精品一区二区 | 免费大片黄在线 | 国产精品久久久久久一区二区三区 | 天天夜夜狠狠操 | 五月婷婷综 | 久久国产精品久久精品国产演员表 | 久久免费视频在线观看 | 国产午夜精品一区二区三区四区 | 激情图片区 | 成人免费在线视频 | 亚洲色图激情文学 | 天干啦夜天干天干在线线 | 一区精品久久 | 天天曰天天爽 | 国产午夜精品av一区二区 | 免费观看一级一片 | 欧美精品久久久久久久久久丰满 | 干天天 | 欧美aaa级片 | 久久成人免费视频 | 日韩精品免费一区二区三区 | 亚洲另类xxxx | 五月激情丁香图片 | 天天射天天射天天射 | 视频成人永久免费视频 | 亚洲第一香蕉视频 | av东方在线 | 日本在线观看视频一区 | 色综合久久久久久久久五月 | 永久免费毛片在线观看 | 最新av网址在线观看 | 欧美国产日韩一区二区三区 | 日韩成人在线一区二区 | 久久久久国产精品一区 | 久久伊人免费视频 | 视频一区视频二区在线观看 | 婷婷亚洲综合五月天小说 | 免费在线观看黄 | 97视频免费 | 国产玖玖精品视频 | av一级在线观看 | 国产高潮久久 | 婷婷在线播放 | 欧美在线aa | 午夜在线看片 | 在线观看免费版高清版 | 激情丁香月 | 99资源网| 国产精品免费人成网站 | 国产精品黄色av | 久久精品婷婷 | 三级免费黄 | 一区二区不卡在线观看 | 91网在线 | 午夜国产福利在线观看 | 亚洲欧洲国产视频 | 日韩电影中文字幕 | 久热色超碰 | 香蕉影视app | 91精品专区 | 91香蕉视频好色先生 | 国产亚洲精品久久 | 日韩欧美69 | 一区二区中文字幕在线 | 麻豆精品传媒视频 | 日韩区视频 | 91福利视频免费观看 | 亚洲国产精品久久久 | 日韩精品中文字幕一区二区 | 91精品久久久久 | 天天做天天爱天天综合网 | 成人在线视频论坛 | 国产精品永久免费 | 91精品少妇偷拍99 | 色婷婷视频在线观看 | 四虎国产精品成人免费影视 | 美女黄久久 | 九九综合久久 | 波多野结衣久久资源 | 亚洲精品美女久久久久网站 | 国产丝袜 | av亚洲产国偷v产偷v自拍小说 | 美女在线黄 | 国产一级视频在线观看 | 精精国产xxxx视频在线播放 | 亚洲专区在线播放 | 婷婷丁香激情五月 | 久草国产在线观看 | 在线观看成人福利 | 欧美极品少妇xxxx | 国产中文字幕视频在线观看 | 在线欧美日韩 | 最近日本字幕mv免费观看在线 | 午夜在线观看一区 | sm免费xx网站 | a色视频 | 天天射综合| 中文字幕av网站 | 中文字幕黄色网 | 国产黄影院色大全免费 | 国产中文在线视频 | a视频在线播放 | 婷婷色五| 色视频在线观看免费 | 久久久久成人精品免费播放动漫 | 中文字幕亚洲综合久久五月天色无吗'' | 国产一区二区精 | 久久综合导航 | 亚洲精品乱码久久久久久蜜桃欧美 | 在线免费观看的av网站 | 手机色站 | 91精品婷婷国产综合久久蝌蚪 | 三级黄在线 | 亚洲在线精品 | 午夜国产福利在线观看 | 国产成人av综合色 | 天天爽网站 | 亚洲春色综合另类校园电影 | 久久久久久久久久福利 | 日韩av在线资源 | 中文在线字幕观看电影 | 精品麻豆入口免费 | 亚洲 在线 | 日韩在观看线 | 在线黄频 | 麻豆一级视频 | 狠狠做深爱婷婷综合一区 | 中文字幕第一页在线播放 | 操久久免费视频 | 97天天干| 天天搞天天干 | 国产在线97 | 国产精品久久中文字幕 | 国产人成免费视频 | 免费看色网站 | 亚洲成人黄 | 成人在线网站观看 | 欧美精品久久久久久久久免 | 日日射天天射 | 欧美日韩视频在线观看一区二区 | 麻豆高清免费国产一区 | 中文字幕在线免费播放 | 日韩精品一区二区电影 | 美女网站在线观看 | 在线av资源 | 日本中文字幕高清 | 久久久男人的天堂 | 日韩免费在线观看视频 | 久久99精品国产 | 欧美日韩综合在线观看 | 97人人射 | 最近中文字幕大全中文字幕免费 | 久久久国产精品亚洲一区 | 精品国产激情 | 久久男人免费视频 | 久色 网 | 久草在线费播放视频 | av中文在线影视 | 亚洲精品国产精品乱码不99热 | 91香蕉国产在线观看软件 | 91在线91拍拍在线91 | 国产亚洲免费的视频看 | 日韩免费在线观看 | 国产精品免费视频久久久 | 久久国产精品一区二区 | 中文字幕91视频 | 人成免费网站 | 国产最新福利 | 久久99精品国产99久久 | 五月婷婷丁香六月 | 久久久久亚洲精品成人网小说 | 欧美日韩一区二区三区不卡 | 欧美日韩一区二区久久 | 国产精品 中文字幕 亚洲 欧美 | 人人舔人人舔 | 久99久中文字幕在线 | 日韩欧美xxxx| 玖玖精品在线 | 久久亚洲私人国产精品va | 在线观看一 | 久久国产美女视频 | 亚洲国产成人在线播放 | 亚洲综合色丁香婷婷六月图片 | 中文字幕黄色 | 国产三级视频在线 | av网址aaa | 国产原创在线视频 | 不卡的av在线播放 | 808电影免费观看三年 | 成年人在线播放视频 | 亚洲免费在线看 | 91人人视频在线观看 | 免费男女网站 | 欧美日韩一级在线 | 亚洲精品免费在线观看视频 | 欧美日韩高清一区二区 国产亚洲免费看 | 在线精品观看国产 | 一区二区三区动漫 | 中文欧美字幕免费 | 久久福利在线 | 中文字幕在线观看完整版 | 韩日av在线 | 中文字幕一区二区三区在线观看 | 日韩免费在线播放 | 天天在线操| 国产精品三级视频 | 99在线国产| 久久国产视频网 | 国产精品欧美激情在线观看 | 麻豆91精品视频 | 久久久免费播放 | 天天干天天操天天射 | 中文字幕免费成人 | 97av免费视频 | 欧美另类交在线观看 | 1024手机基地在线观看 | 香蕉久草在线 | 欧美日韩视频免费看 | 日韩网站在线播放 | 91人人澡| 欧美小视频在线观看 | 精品免费久久 | 免费大片av| 国产精品黄色影片导航在线观看 | 欧美aaaxxxx做受视频 | 久久免费国产精品 | 久久激五月天综合精品 | 午夜精品剧场 | 国产精品国内免费一区二区三区 | 久久免费视频5 | av在线官网| 中文字幕在线观看一区 | 九月婷婷综合网 | 精品久操 | 国产日韩视频在线播放 | 精品国产一区二区三区久久久蜜月 | 四虎在线观看 | 日韩手机视频 | 国产精品女主播一区二区三区 | 国产麻豆剧传媒免费观看 | 国产一区在线免费观看视频 | 午夜精品久久久久久久久久 | 99热超碰在线| 天天爱天天操 | 国产日韩欧美精品在线观看 | 草久视频在线观看 | 亚洲天堂网站 | 色婷婷成人网 | 99九九视频 | 国产97视频 | 欧美99热 | 久久久久久久久毛片精品 | 成年人在线观看免费视频 | 91香蕉国产在线观看软件 | 国产精品一区二区三区久久 | 国产专区视频在线观看 | 日韩电影在线观看一区二区三区 | 免费视频二区 | 国产成人精品一区在线 | 99久久网站 | 中文字幕在线观看视频网站 | 亚洲欧美精品在线 | 国产韩国精品一区二区三区 | 狠狠操影视 | 午夜成人免费电影 | 国产成人黄色网址 | 国产精品一区二区在线 | 欧美日本不卡 | 一区二区三区四区在线 | 在线观看欧美成人 | 天天操夜夜想 | 在线视频a| 成人免费在线播放视频 | 色综合久久网 | 国产麻豆电影在线观看 | 成人久久 | 精品国产1区二区 | 久久大片 | 国内精品久久久精品电影院 | 91视频久久久久 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久免费电影 | 亚洲一级影院 | 在线免费黄色 | 激情五月婷婷激情 | 精品视频免费久久久看 | 亚洲午夜精品久久久久久久久久久久 | 婷婷网在线 | 午夜精品久久久 | 国产成人区 | 亚洲国产免费网站 | 国产精品日韩久久久久 | 亚洲欧洲中文日韩久久av乱码 | 久久老司机精品视频 | 中文字幕免费观看视频 | 国产在线视频一区二区三区 | 成年在线观看 | 久久人人添人人爽添人人88v | 日韩精品一区二区免费视频 | 国产在线视频一区 | av中文天堂在线 | 天天操夜夜爱 | 黄色小网站在线观看 | 日韩欧美高清视频在线观看 | 手机看片1042 | 天天综合视频在线观看 | 国产视频九色蝌蚪 | 午夜精品福利在线 | 精品人人人 | 涩涩在线 | 在线看小早川怜子av | 久草电影在线 | 色www.| 日韩av黄 | 五月天,com | 91亚瑟视频 | 91中文在线 | 精品99久久 | 色婷婷视频 | 天天操天天干天天干 | 欧美 日韩 国产 成人 在线 | 在线视频一区二区 | 91看片在线看片 | 欧美午夜一区二区福利视频 | 国产中文在线字幕 | 最近中文字幕高清字幕免费mv | 日韩在线高清 | 99久免费精品视频在线观看 | 国产成人久久av977小说 | 成人蜜桃| 国产日韩亚洲 | 国产精成人品免费观看 | 国产精品一区二区在线观看免费 | 黄色三级网站 | 午夜影院一级 | 免费污片 | 一二三四精品 | 少妇搡bbbb搡bbb搡忠贞 | 亚洲国产av精品毛片鲁大师 | 狠狠干天天色 | 国产人免费人成免费视频 | 99精品视频在线观看免费 | 免费的黄色的网站 | 青青河边草免费观看完整版高清 | 久久久久中文 | 久久亚洲欧美 | 国产精品久久久久久久久免费看 | 国内精品免费 | 伊人亚洲综合网 | 色无五月 | 久久免费成人精品视频 | 五月婷香 | 国产精品女主播一区二区三区 | 91中文字幕在线 | 999电影免费在线观看2020 | 亚洲成人黄色在线观看 | 国产精品 久久 | 欧美日韩精品电影 | 日韩精品一区二区免费 | 国产视频二区三区 | 国产综合小视频 | 国产精品久久久久久久妇 | 欧美 亚洲 另类 激情 另类 | 国产不卡毛片 | 久久国产亚洲视频 | 2022中文字幕在线观看 | 日韩精品中文字幕在线观看 | 国产又粗又猛又黄 | 久久久久久久久电影 | 日韩高清免费电影 | 久久久影院官网 | 久久久精品 | 激情视频一区二区 | 日韩手机在线 | 国产精品女同一区二区三区久久夜 | 中文字幕免费播放 | 亚洲片在线资源 | 视频在线观看亚洲 | 日韩精品不卡在线观看 | 久久午夜精品影院一区 | 黄色成年片 | 黄色美女免费网站 | 免费看v片网站 | 成人黄色大片在线观看 | 在线网址你懂得 | 99re8这里有精品热视频免费 | 免费av免费观看 | 国产精品k频道 | 深爱五月网| 国产精品久久久久免费观看 | 日韩xxx视频| 久久久久综合精品福利啪啪 | 五月的婷婷 | 亚洲成人第一区 | 黄色小说在线免费观看 | 精品久久久一区二区 | 最新日韩视频在线观看 | 狠狠色狠狠色合久久伊人 | 免费在线色电影 | 免费日韩电影 | 国产91丝袜在线播放动漫 | 在线观看网站黄 | 少妇做爰k8经典 | 在线中文字幕av观看 | 国产字幕在线观看 | www国产精品com | 岛国一区在线 | 丁香国产视频 | 又爽又黄又无遮挡网站动态图 | 一区二区三区动漫 | 激情五月综合网 | 美女免费视频观看网站 | 国产精品一区二区三区在线免费观看 | 国产成人高清在线 | 丁香婷婷综合激情五月色 | 97在线视频免费播放 | 国产精品99久久久久的智能播放 | 丁香婷婷综合激情五月色 | 在线观看你懂的网址 | 精品视频 | 97精品国产97久久久久久 | 久久在线观看视频 | 91精品久久久久 | 成人精品在线 | 中日韩三级视频 | 国产视频一 | 九九色综合 | 亚洲黄色一级视频 | 国产精品午夜在线 | 91x色| av3级在线| 久久久精品国产一区二区三区 | 亚洲黄色三级 | 国产r级在线观看 | 欧美日韩亚洲国产一区 | 久久久av电影 | 99资源网 | 一级免费黄色 | 成年人电影毛片 | 婷婷综合视频 | 久久黄色网页 | 国产黄色片免费观看 | 久久亚洲成人网 | 精品国产伦一区二区三区 | 欧美精品乱码久久久久久按摩 | 又湿又紧又大又爽a视频国产 | 成人精品一区二区三区中文字幕 | 亚洲国产小视频在线观看 | 久久特级毛片 | 国产综合精品一区二区三区 | 天天激情天天干 | 国产麻豆视频网站 | 超级碰碰碰视频 | 精品一区电影 | 国产一区精品在线 | 久久99热精品这里久久精品 | 国产美女视频 | 国产一区二区久久久久 | 国产日产高清dvd碟片 | 激情视频在线高清看 | 99热官网 | 国产91全国探花系列在线播放 | 亚洲国产视频直播 | 欧美亚洲三级 | 超碰97人人在线 | 亚洲国产精品一区二区尤物区 | 在线看v片 | 夜夜操天天操 | 日韩一区二区三区在线看 | 国产午夜三级一二三区 | 黄色h在线观看 | 三级午夜片 | 天天插日日射 | 久久视频在线免费观看 | 一区中文字幕电影 | 91视频啊啊啊 | 国产精品18久久久久久久久 | 欧美日韩在线视频一区 | 91精品成人久久 | 国产999在线观看 | 2019天天干天天色 | 国产精品国产三级国产aⅴ9色 | 在线观看国产福利片 | 午夜视频播放 | 狠狠躁日日躁夜夜躁av | 中文字幕在线看视频国产中文版 | 青青草视频精品 | www五月| www.久久色.com| 欧美成年性 | 精品国产1区二区 | 中文久久精品 | 99国产成+人+综合+亚洲 欧美 | 99精品视频在线播放免费 | 国产婷婷vvvv激情久 | 亚洲国产成人高清精品 | 中文字幕在线观看视频一区二区三区 | 在线免费黄色av | 一区二区三区久久精品 | 久久看免费视频 | 久久婷婷亚洲 | 久久综合久久久 | 日韩天堂在线观看 | 色a在线观看 | 中文字幕在线观看视频一区二区三区 | 高清不卡免费视频 | 国产九九热 | 国产一级免费观看视频 | 成人久久免费 | 国产精品久久久久婷婷 | 91麻豆精品国产91久久久更新时间 | 狠狠干天天色 | 91av手机在线观看 | av免费在线网 | 丁香视频五月 | 欧美午夜激情网 | 久久中国精品 | 婷婷5月激情5月 | 色视频网站在线观看一=区 a视频免费在线观看 | 中文字幕一区二区三区四区在线视频 | 国产明星视频三级a三级点| 激情大尺度视频 | 国产91精品在线播放 | 国产视频在线一区二区 | 西西www4444大胆在线 | 国产精品久久麻豆 | 免费在线播放av电影 | 波多野结衣一区二区三区中文字幕 | 亚洲一级片在线看 | 国产99久久九九精品免费 | 国产香蕉视频在线观看 | 91久久偷偷做嫩草影院 | 欧美人zozo | 99久久日韩精品免费热麻豆美女 | 美女网站在线播放 | 最近能播放的中文字幕 | 国产在线免费av | 日韩一区二区久久 | 久久污视频 | 久草在线综合 | 中文字幕在线免费观看 | 天堂在线一区二区 | 青青河边草免费视频 | 中文字幕视频三区 | 欧美 日韩 国产 成人 在线 | 在线观看播放av | 一本一本久久a久久精品综合小说 | 国产免费激情久久 | 国产玖玖精品视频 | 久久99精品久久久久婷婷 | 亚洲精品字幕在线观看 | 叶爱av在线 | 国产精品白虎 | 中文字幕在线视频免费播放 | 欧美一级在线观看视频 | 国内精品视频免费 | 国产在线色 | 特级毛片爽www免费版 | 国产一二三区在线观看 | 国产精品久久久久久久久久久久 | 久久麻豆视频 | 欧美性一级观看 | 手机看片午夜 | 成人午夜片av在线看 | 我要看黄色一级片 | 亚洲成av人电影 | 五月天视频网站 | 久草在线官网 | 日黄网站| 国产精品久久久久久久久费观看 | 久久在线精品视频 | 国产一级三级 | 久久精品成人欧美大片古装 | 久精品一区 | 久久福利影视 | 91亚洲精品国偷拍 | www.91成人| 国产免费观看视频 | 久草免费在线 | 国产成人精品久久久 | 免费一级黄色 | 亚洲理论在线观看电影 | 婷婷久久综合九色综合 | 日韩69av | 久草免费福利在线观看 | 天天操天天射天天操 | 精品久久一区二区 | 午夜精品av| 青草视频免费观看 | 91精品少妇偷拍99 | 亚洲一区二区观看 | 天天操天天玩 | 开心激情五月婷婷 | 伊色综合久久之综合久久 | 成人国产综合 | 免费日韩一区二区三区 | 久久久久久久国产精品 | 亚洲精选视频免费看 | 日韩欧美高清在线 | 色老板在线视频 | 亚洲成人黄 | 欧美日韩一区二区三区在线免费观看 | 欧美久久久久久久久中文字幕 | 九九九九免费视频 | 精品毛片一区二区免费看 | 成人国产网站 | 9999在线视频 | 91cn国产在线 | www.人人草 | 亚洲国内精品在线 | 欧美日韩国产在线精品 | 波多野结衣久久资源 | 麻豆视频91| 免费视频97| 91成人免费电影 | 国产成人精品久久久久 | 国产又粗又猛又黄又爽视频 | av网址最新 | 精品国产免费观看 | 特片网久久| 8x成人免费视频 | 欧美日韩视频在线 | 久久国语露脸国产精品电影 | 亚洲一级电影在线观看 | 99精品国产一区二区 | 亚洲精品综合一二三区在线观看 | 欧美日韩国产成人 | 久草在线免费播放 | 色婷婷五| 成 人 黄 色视频免费播放 | 91网在线观看 | 97精品国产97久久久久久粉红 | 一本一道久久a久久精品 | 又色又爽的网站 | 久久人人97超碰精品888 | 91精品系列 | 综合视频在线 | 人人玩人人添人人 | 久久久国产成人 | 国产成人免费观看久久久 | 欧美一二区视频 | 一区二区三区www | 国产精品岛国久久久久久久久红粉 | 69亚洲精品 | 国产精彩视频一区二区 | 国产高清永久免费 | 国产一区二区视频在线 | 午夜视频在线观看网站 | 久久精彩 | 国产精品久久久久久久久久白浆 | 中文字幕在线观看视频一区二区三区 | 日韩婷婷 | 日本激情视频中文字幕 | 操高跟美女 | 亚洲综合欧美精品电影 | 最新av在线免费观看 | 伊人天堂久久 | 欧美一区在线观看视频 | 亚洲精品乱码久久久久久蜜桃91 | 亚洲在线成人精品 | 激情欧美日韩一区二区 | 国产日韩精品在线观看 | 久久久黄色免费网站 | 欧美肥妇free | 男女全黄一级一级高潮免费看 | 亚洲少妇xxxx | 性日韩欧美在线视频 | 久久久久久久久网站 | 中文字幕中文字幕中文字幕 | 国产日韩精品一区二区 | 亚洲精品观看 | 美女黄久久 | 五月婷婷综合在线视频 | 最新av免费在线观看 | 国产亚洲一区二区在线观看 | 国产伦精品一区二区三区照片91 | 五月婷在线视频 | 日韩系列 | 五月天丁香 | 中文字幕第一页在线vr | 久久伦理| 99成人在线视频 | 狠狠躁夜夜躁人人爽视频 | 免费在线观看成人 | 免费av大片 | 婷婷精品国产欧美精品亚洲人人爽 | 九九视频这里只有精品 | 国产精品一区二区久久久久 | 黄色毛片视频 | 韩国一区二区三区视频 | 日韩电影中文字幕在线 | 97视频在线观看视频免费视频 | 精品在线观看视频 | 日韩免费视频线观看 | 精品成人a区在线观看 | 国产欧美综合视频 | 国产成人精品999 | 亚洲v欧美v国产v在线观看 | 狠狠天天 | 91亚洲精品久久久中文字幕 | 久热色超碰 | 欧美性大胆 | 国产精品一区久久久久 | 99国产精品久久久久久久久久 | 久久高清国产 | 中文av在线天堂 | 日韩久久一区二区 | 一级成人免费视频 | 天堂资源在线观看视频 | 国产在线日韩 | 婷婷丁香在线视频 | 国产高清在线一区 | 成人在线播放免费观看 | av福利在线导航 | 不卡的av电影在线观看 | 国产高清视频免费观看 | 欧美va日韩va| 婷婷丁香花五月天 | 亚洲精品国产综合99久久夜夜嗨 | 中文字幕乱码在线播放 | 亚洲精品男人天堂 | 在线看小早川怜子av | 91理论片午午伦夜理片久久 | 香蕉网在线观看 | 成人黄色在线 | 高清在线一区 | 免费视频三区 | 狠狠干婷婷色 | 日韩高清成人在线 | 91成年人在线观看 | 一级淫片在线观看 | 亚洲精品www | 亚洲精品自拍视频在线观看 | www操操| 天天操天天射天天爱 | 在线免费观看国产视频 | 麻花豆传媒一二三产区 | 精品久久久久亚洲 | 亚洲成人av片| 免费黄色av. | 国产97视频在线 | 国产精久久久久久妇女av | 国产亚洲在线观看 | a爱爱视频| 亚洲人人爱 | 狠狠网 | 国产私拍在线 | 欧美少妇影院 | 国产香蕉97碰碰碰视频在线观看 | 国产91国语对白在线 | 中文字幕成人在线观看 | 六月丁香激情网 | 久久成人在线视频 | 在线视频99 | 亚洲情婷婷 | 制服丝袜欧美 | 在线小视频国产 | av一级网站 | 青青河边草免费直播 | 久久综合久色欧美综合狠狠 | 国产一区二区在线免费 | 久久久精品国产一区二区三区 | 国产免费黄视频在线观看 | 99九九99九九九视频精品 | 国产一区二区三区在线免费观看 | 日本久久成人中文字幕电影 | 国产在线资源 | 国产综合福利在线 | 在线a人片免费观看视频 | 99一区二区三区 | 欧美视频网址 | 国产一级黄大片 | 久久综合婷婷国产二区高清 | 91大片网站| 日韩美女黄色片 | 国产精品99久久久久的智能播放 | 免费久久99精品国产 | 91九色在线视频观看 | 色婷婷国产精品一区在线观看 | 欧美精品在线免费 | 国产片免费在线观看视频 | 精品伦理一区二区三区 | 一区二区三区日韩在线观看 | 伊人狠狠 | 香蕉视频在线播放 | 国产中文在线视频 | 日韩电影一区二区三区在线观看 | 九九九热精品免费视频观看 | 欧美精品一区二区在线播放 | 亚洲高清视频在线观看免费 | 尤物一区二区三区 | 九九热免费在线视频 | 最近中文字幕视频网 | 51精品国自产在线 | 国产综合香蕉五月婷在线 | 国产一二区视频 | 国产精品久久久久久久久蜜臀 | 国产男女免费完整视频 | av色影院| 蜜桃视频成人在线观看 | 看片黄网站 | 久久在线一区 | 日韩字幕| 精品视频www | 国产亚洲精品久 | 日韩在线视频不卡 | 99色在线 | 欧美日韩一区二区在线观看 | 国产亚洲精品久久久久久无几年桃 | 国产精品午夜久久久久久99热 | 丝袜美腿在线播放 | 一级理论片在线观看 | 国产一二三四在线视频 | 在线有码中文字幕 | 97色噜噜 | 国产一级小视频 | 天天色天天综合网 | 中文字幕免费中文 | 成人av片在线观看 | 一区二区三区视频网站 | 91av视频网站 | 久久久久久97三级 | 日韩一区二区三区观看 | 日本中文字幕系列 | 国产老妇av| 美女在线观看av | 日韩欧美专区 | 久久婷婷精品视频 | 国产精品一区在线观看你懂的 | 久久精品视频在线观看 | 午夜视频二区 | 天天天天干 | 色在线视频网 | 久久精品在线 | 最近中文字幕完整高清 | 中文av免费| 最新中文在线视频 | 日韩激情在线 | 日韩电影在线一区二区 | 日韩免费中文字幕 | 在线观看网站你懂的 | 欧美一级日韩免费不卡 | 欧美日韩一区二区三区在线免费观看 | 日韩午夜在线观看 | 伊人天天干 | 免费a一级 | 日韩精品视频免费专区在线播放 | 成人午夜电影在线 | 欧美性爽爽 | 国模视频一区二区 | 国产日韩精品在线观看 | 亚洲日本va在线观看 | 色婷婷激情电影 | 美女久久久久久久 | 狠狠色香婷婷久久亚洲精品 | 久久久久久看片 | 免费在线观看一区二区三区 | 亚洲综合视频在线 | 国产一区在线观看视频 | 色婷婷狠狠五月综合天色拍 | 久久久毛片 | 免费亚洲视频 | 97在线视频免费看 | 中文字幕乱在线伦视频中文字幕乱码在线 | 欧美老人xxxx18| 最新av网址在线 | 日韩在线视频播放 | www免费在线观看 | 激情开心网站 | 日韩色中色 | 国产精品123| 国产小视频网站 | 成人h动漫精品一区二 | 一区二区三区手机在线观看 | 中文字幕在线观看完整版 | ww亚洲ww亚在线观看 | 成人av影院在线观看 | 中文在线字幕观看电影 | 免费中文字幕 | 欧美精品中文在线免费观看 | 天堂av网址| 色激情五月 | 九九九九免费视频 | a天堂一码二码专区 | 青草视频网 | 亚洲精品tv久久久久久久久久 | 中文在线a天堂 | 色婷婷国产精品 | 国产精品丝袜在线 | 91精品国自产在线观看欧美 | 亚洲高清激情 | 色的网站在线观看 | 中文字幕欲求不满 | 特级毛片网 | 精品亚洲二区 | 色在线最新 | 亚洲精品18p | 中文字幕网站视频在线 | 国产精品无av码在线观看 | 久久午夜羞羞影院 | 久草在线资源视频 | 中文字幕日韩在线播放 | 国产原创在线视频 | 欧洲精品二区 | 亚洲不卡在线 | 天天射天天色天天干 | 在线成人短视频 | 六月丁香伊人 | 在线黄色国产 | 91黄在线看 | 日韩在线视频免费播放 | 久久中文字幕在线视频 |