日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

android面试题总结加强

發(fā)布時(shí)間:2025/6/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android面试题总结加强 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在加強(qiáng)版的基礎(chǔ)上又再加強(qiáng)的android應(yīng)用面試題集

有些補(bǔ)充略顯臃腫,只為學(xué)習(xí)
1.activity的生命周期。

方法

描述

可被殺死

下一個(gè)

onCreate()

activity第一次被創(chuàng)建的時(shí)候調(diào)用。這里是你做所有初始化設(shè)置的地方──創(chuàng)建視圖、設(shè)置布局、綁定數(shù)據(jù)至列表等。如果曾經(jīng)有狀態(tài)記錄(參閱后述Saving?Activity?State。),則調(diào)用此方法時(shí)會(huì)傳入一個(gè)包含著此activity以前狀態(tài)的包對(duì)象做為參數(shù)。?

總繼之以onStart()。

onStart()

????

onRestart()

activity停止后onStop(),在再次啟動(dòng)之前被調(diào)用。?

總繼之以onStart()。

onStart()

onStart()

當(dāng)activity正要變得為用戶所見(jiàn)時(shí)被調(diào)用。?

當(dāng)activity轉(zhuǎn)向前臺(tái)時(shí)繼以onResume(),在activity變?yōu)殡[藏時(shí)繼以onStop()

onResume()?
or
onStop()

????

onResume()

activity開(kāi)始與用戶進(jìn)行交互之前被調(diào)用。此時(shí)activity位于堆棧頂部,并接受用戶輸入。?

繼之以onPause()

onPause()

onPause()

當(dāng)系統(tǒng)將要啟動(dòng)另一個(gè)activity時(shí)調(diào)用。此方法主要用來(lái)將未保存的變化進(jìn)行持久化,停止類(lèi)似動(dòng)畫(huà)這樣耗費(fèi)CPU的動(dòng)作等。這一切動(dòng)作應(yīng)該在短時(shí)間內(nèi)完成,因?yàn)?span style="color:rgb(255,0,0)">下一個(gè)activity必須等到此方法返回后才會(huì)繼續(xù)。?

當(dāng)activity重新回到前臺(tái)是繼以onResume()。當(dāng)activity變?yōu)橛脩舨豢梢?jiàn)時(shí)繼以onStop()

onResume()?
or
onStop()

onStop()

當(dāng)activity不再為用戶可見(jiàn)時(shí)調(diào)用此方法。這可能發(fā)生在它被銷(xiāo)毀或者另一個(gè)activity(可能是現(xiàn)存的或者是新的)回到運(yùn)行狀態(tài)并覆蓋了它。?

如果activity再次回到前臺(tái)跟用戶交互則繼以onRestart(),如果關(guān)閉activity則繼以onDestroy()

onRestart()?
or
onDestroy()

onDestroy()

activity銷(xiāo)毀前調(diào)用。這是activity接收的最后一個(gè)調(diào)用。這可能發(fā)生在activity結(jié)束(調(diào)用了它的?finish()?方法)或者因?yàn)?span style="color:rgb(255,0,0)">系統(tǒng)需要空間所以臨時(shí)的銷(xiāo)毀了此acitivity的實(shí)例時(shí)。你可以用isFinishing()?方法來(lái)區(qū)分這兩種情況。

nothing


(補(bǔ)充)

1、onCreate():當(dāng)Activity被創(chuàng)建的時(shí)候調(diào)用(第一次)。操作:設(shè)置布局文件,初始化視圖,綁定數(shù)據(jù)文件等。


2、onStart():當(dāng)Activity能被我們看到的時(shí)候。


3、onResume():當(dāng)Activity獲得用戶的焦點(diǎn)的時(shí)候,就是能被用戶操作的時(shí)候。


4、onPause()[pause暫停的意思]:Activity暫停。應(yīng)用程序啟動(dòng)了另一個(gè)Activity的時(shí)候。例子:來(lái)了一個(gè)電話,系統(tǒng)啟動(dòng)了電話Activity。在這個(gè)函數(shù)里要做的就是把Activity的數(shù)據(jù)保存起來(lái),當(dāng)接完電話的時(shí)候,再把這些數(shù)據(jù)讀出來(lái),把原來(lái)的Activity還原出來(lái)。


5、onstop():當(dāng)?shù)诙€(gè)Activity把第一個(gè)Activity完全遮擋住了的時(shí)候。對(duì)話框并沒(méi)有把原來(lái)的Activity完全遮擋起來(lái),不會(huì)調(diào)用。


6、onDestroy():銷(xiāo)毀Activity。1)調(diào)用了finish()方法。2)系統(tǒng)資源不夠用了。


函數(shù)調(diào)用過(guò)程:

啟動(dòng)第一個(gè)Activity的時(shí)候:

第一次創(chuàng)建onCreate()-->Activity可見(jiàn)了onStart()-->Activity可以操作了onResume()。

?

點(diǎn)擊第一個(gè)Activity上的按鈕通過(guò)Intent跳到第二個(gè)Activity:

第一個(gè)Activity暫停onPause()-->創(chuàng)建第二個(gè)ActivityonCreate()-->Activity可見(jiàn)onStart()-->Activity可操作onResume()-->第一個(gè)Activity被第二個(gè)Activity完全遮蓋onStop()(如果調(diào)用了finish(),或者系統(tǒng)資源緊缺,則會(huì)被銷(xiāo)毀onDestory())


?

點(diǎn)擊系統(tǒng)返回功能建,從第二個(gè)Activity回到第一個(gè)Activity?:

第二個(gè)Activity暫停onPause()-->第一個(gè)Activity重啟動(dòng)OnRestart()(并沒(méi)有被銷(xiāo)毀,如果銷(xiāo)毀了則要?jiǎng)?chuàng)建onCreate())-->第一個(gè)Activity可見(jiàn)onStart()-->第一個(gè)Activity可操作onResume()-->第二個(gè)Activity被完全遮蓋onStop()(如果調(diào)用了finish(),或者系統(tǒng)資源緊缺,則會(huì)被銷(xiāo)毀onDestory())。



2.橫豎屏切換時(shí)候activity的生命周期

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

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

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

3.android中的動(dòng)畫(huà)有哪幾類(lèi),它們的特點(diǎn)和區(qū)別是什么?

?  

Android提供兩種創(chuàng)建簡(jiǎn)單動(dòng)畫(huà)的機(jī)制:tweened animation(補(bǔ)間動(dòng)畫(huà))?和 frame-by-frame animation(幀動(dòng)畫(huà)).

  • tweened animation:通過(guò)對(duì)場(chǎng)景里的對(duì)象不斷做圖像變換(平移、縮放、旋轉(zhuǎn))產(chǎn)生動(dòng)畫(huà)效果
  • frame-by-frame animation:順序播放事先做好的圖像,跟電影類(lèi)似

這兩種動(dòng)畫(huà)類(lèi)型都能在任何View對(duì)象中使用,用來(lái)提供簡(jiǎn)單的旋轉(zhuǎn)計(jì)時(shí)器,activity圖標(biāo)及其他有用的UI元素。Tweened animation被andorid.view.animation包所操作;frame-by-frame animation被android.graphics.drawable.AnimationDrawable類(lèi)所操作。

想了解更多關(guān)于創(chuàng)建tweened和frame-by-frame動(dòng)畫(huà)的信息,讀一下Dev Guide-Graphics-2D Graphics里面相關(guān)部分的討論。

?

Animation 是以 XML格式定義的,定義好的XML文件存放在res/anim中。由于Tween Animation與Frame-by-frame Animation的定義、使用都有很大的差異,我們將分開(kāi)介紹,本篇幅中主要介紹Tween Animation的定義與使用。按照XML文檔的結(jié)構(gòu)【父節(jié)點(diǎn),子節(jié)點(diǎn),屬性】來(lái)介紹Tween Animation,其由4種類(lèi)型:

  • Alpha: 漸變透明度動(dòng)畫(huà)效果
  • Scale:漸變尺寸伸縮動(dòng)畫(huà)效果
  • Translate:畫(huà)面轉(zhuǎn)換位置移動(dòng)動(dòng)畫(huà)效果
  • Rotate: 畫(huà)面轉(zhuǎn)換角度移動(dòng)動(dòng)畫(huà)效果

在介紹以上4種 類(lèi)型前,先介紹Tween Animation共同的節(jié)點(diǎn)屬性。

表一

屬性[類(lèi)型]功能?
Duration[long]屬性為動(dòng)畫(huà)持續(xù)時(shí)間時(shí)間以毫秒為單位
fillAfter [boolean]當(dāng)設(shè)置為true ,該動(dòng)畫(huà)轉(zhuǎn)化在動(dòng)畫(huà)結(jié)束后被應(yīng)用
fillBefore[boolean]當(dāng)設(shè)置為true ,該動(dòng)畫(huà)轉(zhuǎn)化在動(dòng)畫(huà)開(kāi)始前被應(yīng)用

interpolator

指定一個(gè)動(dòng)畫(huà)的插入器有一些常見(jiàn)的插入器
accelerate_decelerate_interpolator
加速-減速 動(dòng)畫(huà)插入器
accelerate_interpolator
加速-動(dòng)畫(huà)插入器
decelerate_interpolator
減速- 動(dòng)畫(huà)插入器
其他的屬于特定的動(dòng)畫(huà)效果
repeatCount[int]動(dòng)畫(huà)的重復(fù)次數(shù)?
RepeatMode[int]定義重復(fù)的行為1:重新開(kāi)始? 2:plays backward
startOffset[long]動(dòng)畫(huà)之間的時(shí)間間隔,從上次動(dòng)畫(huà)停多少時(shí)間開(kāi)始執(zhí)行下個(gè)動(dòng)畫(huà)
zAdjustment[int]定義動(dòng)畫(huà)的Z Order的改變0:保持Z Order不變
1:保持在最上層
-1:保持在最下層

?

下面我們開(kāi)始結(jié) 合具體的例子,分別介紹4種類(lèi)型各自特有的節(jié)點(diǎn)元素。

表二

XML節(jié)點(diǎn)功能說(shuō)明
alpha漸變透明度動(dòng)畫(huà)效果
<alpha
android:fromAlpha=”0.1″
android:toAlpha=”1.0″
android:duration=”3000″ />
fromAlpha

屬性為動(dòng)畫(huà)起始時(shí)透明度

0.0表示完全不透明
1.0表示完全透明
以上值取0.0-1.0之間的float數(shù)據(jù)類(lèi)型的數(shù)字
toAlpha屬性為動(dòng)畫(huà)結(jié)束時(shí)透明度

表三

scale漸變尺寸伸縮動(dòng)畫(huà)效果
<scale
android:interpolator= “@android:anim/accelerate_decelerate_interpolator”
android:fromXScale=”0.0″
android:toXScale=”1.4″
android:fromYScale=”0.0″
android:toYScale=”1.4″
android:pivotX=”50%”
android:pivotY=”50%”
android:fillAfter=”false”
android:startOffset=“700”
android:duration=”700″
android:repeatCount=”10″ />
fromXScale[float] fromYScale[float]為動(dòng)畫(huà)起始時(shí),X、Y坐標(biāo)上的伸縮尺寸0.0表示收縮到?jīng)]有
1.0表示正常無(wú)伸縮
值小于1.0表示收縮
值大于1.0表示放大
toXScale [float]
toYScale[float]
為動(dòng)畫(huà)結(jié)束時(shí),X、Y坐標(biāo)上的伸縮尺寸
pivotX[float]
pivotY[float]
為動(dòng)畫(huà)相對(duì)于物件的X、Y坐標(biāo)的開(kāi)始位置屬性值說(shuō)明:從0%-100%中取值,50%為物件的X或Y方向坐標(biāo)上的中點(diǎn)位置
????

表四

translate畫(huà)面轉(zhuǎn)換位置移動(dòng)動(dòng)畫(huà)效果
<translate
android:fromXDelta=”30″
android:toXDelta=”-80″
android:fromYDelta=”30″
android:toYDelta=”300″
android:duration=”2000″ />
fromXDelta
toXDelta
為動(dòng)畫(huà)、結(jié)束起始時(shí) X坐標(biāo)上的位置?
fromYDelta
toYDelta
為動(dòng)畫(huà)、結(jié)束起始時(shí) Y坐標(biāo)上的位置?
????

表五

rotate畫(huà)面轉(zhuǎn)移旋轉(zhuǎn)動(dòng)畫(huà)效果
<rotate
android:interpolator=”@android:anim/accelerate_decelerate_interpolator”
android:fromDegrees=”0″
android:toDegrees=”+350″
android:pivotX=”50%”
android:pivotY=”50%”
android:duration=”3000″ />
fromDegrees為動(dòng)畫(huà)起始時(shí)物件的角度說(shuō)明
當(dāng)角度為負(fù)數(shù)——表示逆時(shí)針旋轉(zhuǎn)
當(dāng)角度為正數(shù)——表示順時(shí)針旋轉(zhuǎn)
(負(fù)數(shù)from——to正數(shù):順時(shí)針旋轉(zhuǎn))
(負(fù)數(shù)from——to負(fù)數(shù):逆時(shí)針旋轉(zhuǎn))
(正數(shù)from——to正數(shù):順時(shí)針旋轉(zhuǎn))
(正數(shù)from——to負(fù)數(shù):逆時(shí)針旋轉(zhuǎn))
toDegrees

為動(dòng)畫(huà)結(jié)束時(shí)物 件旋轉(zhuǎn)的角度 可以大于360度


pivotX
pivotY
為動(dòng)畫(huà)相對(duì)于物件的X、Y坐標(biāo)的開(kāi)始位置說(shuō)明:以上兩個(gè)屬性值 從0%-100%中取值
50%為物件的X或Y方向坐標(biāo)上的中點(diǎn)位置

?

Android SDK提供了基類(lèi):Animation,包含大量的set/getXXXX()函數(shù)來(lái)設(shè)置、讀取Animation的屬性,也就是前面表一中顯示的各種屬性。Tween Animation由4種類(lèi)型:alpha、scale、translate、roate,在Android SDK中提供了相應(yīng)的類(lèi),Animation類(lèi)派生出了AlphaAnimation、ScaleAnimation、 TranslateAnimation、RotateAnimation分別實(shí)現(xiàn)了?改變 Alpha值??伸縮??平移??旋轉(zhuǎn)?等動(dòng)畫(huà),每個(gè)子類(lèi)都在父類(lèi)的基礎(chǔ)上增加了各自獨(dú)有的屬性。

(補(bǔ)充)

? ? ?Android的動(dòng)畫(huà)效果分為兩種,一種是tweened animation(補(bǔ)間動(dòng)畫(huà)),第二種是frame by frame animation。一般我們用的是第一種。補(bǔ)間動(dòng)畫(huà)又分為AlphaAnimation,透明度轉(zhuǎn)換 ?RotateAnimation,旋轉(zhuǎn)轉(zhuǎn)換 ?ScaleAnimation,縮放轉(zhuǎn)換 ?TranslateAnimation 位置轉(zhuǎn)換(移動(dòng))。
動(dòng)畫(huà)效果在anim目錄下的xml文件中定義,在程序中用AnimationUtils.loadAnimation(Context context,int ResourcesId)載入成Animation對(duì)象,在需要顯示動(dòng)畫(huà)效果時(shí),執(zhí)行需要?jiǎng)赢?huà)的View的startAnimation方法,傳入Animation,即可。切換Activity也可以應(yīng)用動(dòng)畫(huà)效果,在startActivity方法后,執(zhí)行overridePendingTransition方法,兩個(gè)參數(shù)分別是切換前的動(dòng)畫(huà)效果,切換后的動(dòng)畫(huà)效果

4.?一條最長(zhǎng)的短信息約占多少byte?

?  中文70(包括標(biāo)點(diǎn)),英文160個(gè)字節(jié)。

5.handler機(jī)制的原理

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

  1)Looper:?一個(gè)線程可以產(chǎn)生一個(gè)Looper對(duì)象,由它來(lái)管理此線程里的Message?Queue(消息隊(duì)列)

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

  3)?Message?Queue(消息隊(duì)列):用來(lái)存放線程放入的消息。

  4)線程:UI?thread?通常就是main?thread,而Android啟動(dòng)程序時(shí)會(huì)替它建立一個(gè)Message?Queue

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


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

7.android中線程與線程,進(jìn)程與進(jìn)程之間如何通信

1、一個(gè)?Android?程序開(kāi)始運(yùn)行時(shí),會(huì)單獨(dú)啟動(dòng)一個(gè)Process
???默認(rèn)情況下,所有這個(gè)程序中的Activity或者Service都會(huì)跑在這個(gè)Process
???默認(rèn)情況下,一個(gè)Android程序也只有一個(gè)Process,但一個(gè)Process下卻可以有許多個(gè)Thread
2、一個(gè)?Android?程序開(kāi)始運(yùn)行時(shí),就有一個(gè)主線程Main?Thread被創(chuàng)建。該線程主要負(fù)責(zé)UI界面的顯示、更新和控件交互,所以又叫UI?Thread
???一個(gè)Android程序創(chuàng)建之初,一個(gè)Process呈現(xiàn)的是單線程模型--Main?Thread,所有的任務(wù)都在一個(gè)線程中運(yùn)行。所以,Main?Thread所調(diào)用的每一個(gè)函數(shù),其耗時(shí)應(yīng)該越短越好。而對(duì)于比較費(fèi)時(shí)的工作,應(yīng)該設(shè)法交給子線程去做,以避免阻塞主線程(主線程被阻塞,會(huì)導(dǎo)致程序假死?現(xiàn)象)。?

3Android單線程模型:Android?UI操作并不是線程安全的并且這些操作必須在UI線程中執(zhí)行。如果在子線程中直接修改UI,會(huì)導(dǎo)致異常

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

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

9.sim卡的EF?文件有何作用?

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

11.Activity變成一個(gè)窗口:Activity屬性設(shè)定?

  講點(diǎn)輕松的吧,可能有人希望做出來(lái)的應(yīng)用程序是一個(gè)漂浮在手機(jī)主界面的東西,那么很?簡(jiǎn)單你只需要設(shè)置?一下Activity的主題就可以了在AndroidManifest.xml?中定義?Activity的?地方一句話:?

  Xml代碼?

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

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

  Xml代碼?

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

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

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

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

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

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

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

14.在androidmvc的具體體現(xiàn)

Android?的官方建議應(yīng)用程序的開(kāi)發(fā)采用MVC?模式。何謂MVC?先看看下圖

MVC?Model,View,Controller?的縮寫(xiě),從上圖可以看出MVC?包含三個(gè)部分:

..?模型(Model)對(duì)象:是應(yīng)用程序的主體部分,所有的業(yè)務(wù)邏輯都應(yīng)該寫(xiě)在該

層。

..?視圖(View)對(duì)象:是應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分。也是在整個(gè)

MVC?架構(gòu)中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結(jié)果。

..?控制器(Control)對(duì)象:是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新

Model?對(duì)象狀態(tài)的部分,控制器更重要的一種導(dǎo)航功能,響應(yīng)用戶出發(fā)的相

關(guān)事件,交給M 層處理。

Android?鼓勵(lì)弱耦合和組件的重用,在Android?MVC?的具體體現(xiàn)如下

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

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

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


15.Android系統(tǒng)的架構(gòu)

android的系統(tǒng)架構(gòu)和其操作系統(tǒng)一樣,采用了分層的架構(gòu)。從架構(gòu)圖看,android分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和linux核心層。

  1.應(yīng)用程序

  Android會(huì)同一系列核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用JAVA語(yǔ)言編寫(xiě)的。

  2.應(yīng)用程序框架

  開(kāi)發(fā)人員也可以完全訪問(wèn)核心應(yīng)用程序所使用的API框架。該應(yīng)用程序的架構(gòu)設(shè)計(jì)簡(jiǎn)化了組件的重用;任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過(guò)得遵循框架的安全性限制)。同樣,該應(yīng)用程序重用機(jī)制也使用戶可以方便的替換程序組件。

  隱藏在每個(gè)應(yīng)用后面的是一系列的服務(wù)和系統(tǒng),?其中包括;

  *?豐富而又可擴(kuò)展的視圖(Views),可以用來(lái)構(gòu)建應(yīng)用程序,?它包括列表(lists),網(wǎng)格(grids),文本框(text?boxes),按鈕(buttons),?甚至可嵌入的web瀏覽器。

  *?內(nèi)容提供器(Content?Providers)使得應(yīng)用程序可以訪問(wèn)另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫(kù)),?或者共享它們自己的數(shù)據(jù)

  *?資源管理器(Resource?Manager)提供?非代碼資源的訪問(wèn),如本地字符串,圖形,和布局文件(?layout?files?)

  *?通知管理器?(Notification?Manager)?使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息。

  *?活動(dòng)管理器(?Activity?Manager)?用來(lái)管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。

  有關(guān)更多的細(xì)節(jié)和怎樣從頭寫(xiě)一個(gè)應(yīng)用程序,請(qǐng)參考?如何編寫(xiě)一個(gè)?Android?應(yīng)用程序.

  3.系統(tǒng)運(yùn)行庫(kù)

  1)程序庫(kù)

  Android?包含一些C/C++庫(kù),這些庫(kù)能被Android系統(tǒng)中不同的組件使用。它們通過(guò)?Android?應(yīng)用程序框架為開(kāi)發(fā)者提供服務(wù)。以下是一些核心庫(kù):

  *?系統(tǒng)?C?庫(kù)?-?一個(gè)從?BSD?繼承來(lái)的標(biāo)準(zhǔn)?C?系統(tǒng)函數(shù)庫(kù)(?libc?),?它是專(zhuān)門(mén)為基于?embedded?linux?的設(shè)備定制的。

  *?媒體庫(kù)?-?基于?PacketVideo?OpenCORE;該庫(kù)支持多種常用的音頻、視頻格式回放和錄制,同時(shí)支持靜態(tài)圖像文件。編碼格式包括MPEG4,?H.264,?MP3,?AAC,?AMR,?JPG,?PNG?

  *?Surface?Manager?-?對(duì)顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提?供了2D3D圖層的無(wú)縫融合。

  *?LibWebCore?-?一個(gè)最新的web瀏覽器引擎用,支持Android瀏覽器和一個(gè)可嵌入的web視圖。

  *?SGL?-?底層的2D圖形引擎

  *?3D?libraries?-?基于OpenGL?ES?1.0?APIs實(shí)現(xiàn);該庫(kù)可以使用硬件?3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。

  *?FreeType?-位圖(bitmap)和矢量(vector)字體顯示。

  *?SQLite?-?一個(gè)對(duì)于所有應(yīng)用程序可用,功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫(kù)引擎。

  2)Android?運(yùn)行庫(kù)

  Android?包括了一個(gè)核心庫(kù),該核心庫(kù)提供了JAVA編程語(yǔ)言核心庫(kù)的大多數(shù)功能。

  每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。Dalvik被設(shè)計(jì)成一個(gè)設(shè)備可以同時(shí)高效地運(yùn)行多個(gè)虛擬系統(tǒng)。?Dalvik虛擬機(jī)執(zhí)行(.dex)Dalvik可執(zhí)行文件,該格式文件針對(duì)小內(nèi)存使用做了優(yōu)化。同時(shí)虛擬機(jī)是基于寄存器的,所有的類(lèi)都經(jīng)由JAVA編譯器編譯,然后通過(guò)SDK中?的?“dx”?工具轉(zhuǎn)化成.dex格式由虛擬機(jī)執(zhí)行。

  Dalvik虛擬機(jī)依賴(lài)于linux內(nèi)核的一些功能,比如線程機(jī)制和底層內(nèi)存管理機(jī)制。

  4.Linux?內(nèi)核

Android?的核心系統(tǒng)服務(wù)依賴(lài)于?Linux?2.6?內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理,?網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。?Linux?內(nèi)核也同時(shí)作為硬件和軟件棧之間的抽象層。

(補(bǔ)充)




16.Android常用控件的信息

單選框(RadioButtonRadioGroup)

RadioGroup用于對(duì)單選框進(jìn)行分組相同組內(nèi)的單選框只有一個(gè)單選框被選中

事件:setOnCheckedChangeListener(),處理單選框被選擇事件。把RadioGroup.OnCheckedChangeListener實(shí)例作為參數(shù)傳入。


多選框(CheckBox):

每個(gè)多選框都是獨(dú)立的,可以通過(guò)迭代所有的多選框,然后根據(jù)其狀態(tài)是否被選中在獲取其值。

事件:setOnCheckedChangeListener(),處理多選框被選擇事件。把CheckBox.OnCheckedChangeListener()實(shí)例作為參數(shù)傳入。


下拉列表框(Spinner)

Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());獲取下拉列表框的值。

事件:setOnItemSelectedListener(),處理下拉列表框被選擇事件把Spinner.OnItemSelectedListener()實(shí)例作為參數(shù)傳入。


拖動(dòng)條(SeekBar)

SeekBar.getProgress()獲取拖動(dòng)條當(dāng)前值

事件:setOnSeekBarChangeListener(),處理拖動(dòng)條值變化事件,把SeekBar.OnSeekBarChangeListener實(shí)例作為參數(shù)傳入。


菜單(Menu):

重寫(xiě)ActivityonCreatOptionMenu(Menu?menu)方法,該方法用于創(chuàng)建選項(xiàng)菜單,當(dāng)用戶按下手機(jī)的"Menu"按鈕時(shí)就會(huì)顯示創(chuàng)建好的菜單,在onCreatOptionMenu(Menu?Menu)方法內(nèi)部可以調(diào)用Menu.add()方法實(shí)現(xiàn)菜單的添加。

重寫(xiě)ActivityonMenuItemSelected()方法,該方法用于處理菜單被選擇事件。


進(jìn)度對(duì)話框(ProgressDialog)

創(chuàng)建并顯示一個(gè)進(jìn)度對(duì)話框:ProgressDialog.show(ProgressDialogActivity.this,"請(qǐng)稍等""數(shù)據(jù)正在加載中...."true)

設(shè)置對(duì)話框的風(fēng)格:setProgressStyle()

ProgressDialog.STYLE_SPINNER??旋轉(zhuǎn)進(jìn)度條風(fēng)格(為默認(rèn)風(fēng)格)

ProgressDialog.STYLE_HORIZONTAL?橫向進(jìn)度條風(fēng)格

(補(bǔ)充)

下面是各種常用控件的事件監(jiān)聽(tīng)的使用
①EditText(編輯框)的事件監(jiān)聽(tīng)---OnKeyListener
②RadioGroup、RadioButton(單選按鈕)的事件監(jiān)聽(tīng)---OnCheckedChangeListener
③CheckBox(多選按鈕)的事件監(jiān)聽(tīng)---OnCheckedChangeListener
④Spinner(下拉列表)的事件監(jiān)聽(tīng)---OnItemSelectedListener
⑤Menu(菜單)的事件處理---onMenuItemSelected
⑥D(zhuǎn)ialog(對(duì)話框)的事件監(jiān)聽(tīng)---DialogInterface.OnClickListener()
http://www.iteye.com/topic/1060815

17.請(qǐng)介紹下Android中常用的五種布局

Android布局是應(yīng)用界面開(kāi)發(fā)的重要一環(huán),在Android中,共有五種布局方式,分別是:FrameLayout(幀布局),LinearLayout?(線性布局),

AbsoluteLayout(絕對(duì)布局),RelativeLayout(相對(duì)布局),TableLayout(表格布局)。?

??1.FrameLayout????

? ? ? ?這個(gè)布局可以看成是墻腳堆東西,有一個(gè)四方的矩形的左上角墻腳,我們放了第一個(gè)東西,要再放一個(gè),那就在放在原來(lái)放的位置的上面,這樣依次的放,會(huì)蓋住原來(lái)的東西。這個(gè)布局比較簡(jiǎn)單,也只能放一點(diǎn)比較簡(jiǎn)單的東西。????

? 2.LinearLayout????

? ? ? ?線性布局,這個(gè)東西,從外框上可以理解為一個(gè)div,他首先是一個(gè)一個(gè)從上往下羅列在屏幕上。每一個(gè)LinearLayout里面又可分為垂直布局?(android:orientation="vertical")和水平布局(android:orientation="horizontal"?)。當(dāng)垂直布局時(shí),每一行就只有一個(gè)元素,多個(gè)元素依次垂直往下;水平布局時(shí),只有一行,每一個(gè)元素依次向右排列。????

LinearLayout中有一個(gè)重要的屬性?android:layout_weight="1",這個(gè)weight在垂直布局時(shí),代表行距;水平的時(shí)候代表列寬;weight值越大就越大。????

? 3.AbsoluteLayout????

? ? ? ?絕對(duì)布局猶如div指定了absolute屬性,用X,Y坐標(biāo)來(lái)指定元素的位置android:layout_x="20px"?android:layout_y="12px"?這種布局方式也比較簡(jiǎn)單,但是在垂直隨便切換時(shí),往往會(huì)出問(wèn)題,而且多個(gè)元素的時(shí)候,計(jì)算比較麻煩。????

4.RelativeLayout????

????相對(duì)布局可以理解為某一個(gè)元素為參照物,來(lái)定位的布局方式。主要屬性有:????

????相對(duì)于某一個(gè)元素????

????android:layout_below="@id/aaa"?該元素在?idaaa的下面????

????android:layout_toLeftOf="@id/bbb"?該元素在?idbbb的左邊?????

?????相對(duì)于父元素的地方????

?????android:layout_alignParentLeft="true" ?與父元素左對(duì)齊????

?????android:layout_alignParentRight="true" 與父元素右對(duì)齊????

?????還可以指定邊距等,具體詳見(jiàn)API ? ?? ??

5.TableLayout????

?????表格布局類(lèi)似Html里面的Table。每一個(gè)TableLayout里面有表格行TableRowTableRow里面可以具體定義每一個(gè)元素,設(shè)定他的對(duì)齊方式?android:gravity=""?。????

?????每一個(gè)布局都有自己適合的方式,另外,這五個(gè)布局元素可以相互嵌套應(yīng)用,做出美觀的界面。

18.如何啟用Service,如何停用Service?

Android中的服務(wù)和windows中的服務(wù)是類(lèi)似的東西,服務(wù)一般沒(méi)有用戶操作界面,它運(yùn)行于系統(tǒng)中不容易被用戶發(fā)覺(jué),可以使用它開(kāi)發(fā)如監(jiān)控之類(lèi)的程序。服務(wù)的開(kāi)發(fā)比較簡(jiǎn)單,如下:

第一步:繼承Service類(lèi)

public?class?SMSService?extends?Service?{

}

第二步:在AndroidManifest.xml文件中的<application>節(jié)點(diǎn)里對(duì)服務(wù)進(jìn)行配置:

<service?android:name=".SMSService"?/>

?

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

?

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

?

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

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

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

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

?

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

onStart()?只有采用Context.startService()方法啟動(dòng)服務(wù)時(shí)才會(huì)回調(diào)該方法。該方法在服務(wù)開(kāi)始運(yùn)行時(shí)被調(diào)用。多次調(diào)用startService()方法盡管不會(huì)多次創(chuàng)建服務(wù),但onStart()?方法會(huì)被多次調(diào)用

?

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

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

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

[java]?view plaincopy
  • 采用Context.?bindService()方法啟動(dòng)服務(wù)的代碼如下:??
  • public?class?HelloActivity?extends?Activity?{??
  • ?????ServiceConnection?conn?=?new?ServiceConnection()?{??
  • ??????????????public?void?onServiceConnected(ComponentName?name,?IBinder?service)?{??
  • ???????????}??
  • ???????????public?void?onServiceDisconnected(ComponentName?name)?{??
  • ???????????}??
  • ?????};??
  • ????@Override???
  • public?void?onCreate(Bundle?savedInstanceState)?{???
  • ????????Button?button?=(Button)?this.findViewById(R.id.button);??
  • ????????button.setOnClickListener(new?View.OnClickListener(){??
  • ???????????????public?void?onClick(View?v)?{??
  • ??????????????????Intent?intent?=?new?Intent(HelloActivity.this,?SMSService.class);??
  • ??????????????????bindService(intent,?conn,?Context.BIND_AUTO_CREATE);??
  • ??????????????????//unbindService(conn);//解除綁定??
  • ? ? ? ?}});?????????
  • ????}??
  • }??
  • 19.ListView的優(yōu)化方案


    1,如果自定義適配器,那么在getView方法中要考慮方法傳進(jìn)來(lái)的參數(shù)contentView是否為null,如果為null就創(chuàng)建contentView并返回,如果不為null則直接使用。在這個(gè)方法中,盡可能少創(chuàng)建view
    2,給contentView設(shè)置tag(setTag()),傳入一個(gè)viewHolder對(duì)象,用于緩存要顯示的數(shù)據(jù),可以達(dá)到圖像數(shù)據(jù)異步加載的效果
    3,如果listview需要顯示的item很多,就要考慮分頁(yè)加載。比如一共要顯示100條或者更多的時(shí)候,我們可以考慮先加載20條,等用戶拉到列表底部的時(shí)候,再去加載接下來(lái)的20條。

    20廣播接收者生命周期


    廣播接收器只有一個(gè)回調(diào)方法:
    void onReceive(Context curContext, Intent broadcastMsg)
    當(dāng)廣播消息抵達(dá)接收器時(shí),Android調(diào)用它的onReceive()方法并將包含消息的Intent對(duì)象傳遞給它。廣播接收器僅在它執(zhí)行這個(gè)方法時(shí)處于活躍狀態(tài)。當(dāng)onReceive()返回后,它即為失活狀態(tài)。
    擁有一個(gè)活躍狀態(tài)的廣播接收器的進(jìn)程被保護(hù)起來(lái)而不會(huì)被殺死。但僅擁有失活狀態(tài)組件的進(jìn)程則會(huì)在其它進(jìn)程需要它所占有的內(nèi)存的時(shí)候隨時(shí)被殺掉。
    這種方式引出了一個(gè)問(wèn)題:如果響應(yīng)一個(gè)廣播信息需要很長(zhǎng)的一段時(shí)間,我們一般會(huì)將其納入一個(gè)衍生的線程中去完成,而不是在主線程內(nèi)完成它,從而保證用戶交互過(guò)程的流暢。如果onReceive()衍生了一個(gè)線程并且返回,則包涵新線程在內(nèi)的整個(gè)進(jìn)程都被會(huì)判為失活狀態(tài)(除非進(jìn)程內(nèi)的其它應(yīng)用程序組件仍處于活躍狀態(tài)),于是它就有可能被殺掉。這個(gè)問(wèn)題的解決方法是令onReceive()啟動(dòng)一個(gè)新服務(wù),并用其完成任務(wù),于是系統(tǒng)就會(huì)知道進(jìn)程中仍然在處理著工作。

    21.設(shè)計(jì)模式和IoC(Inversion of Control?控制反轉(zhuǎn))


    Android?框架魅力的源泉在于IoC,在開(kāi)發(fā)Android?的過(guò)程中你會(huì)時(shí)刻感受到IoC?帶來(lái)

    的巨大方便,就拿Activity?來(lái)說(shuō),下面的函數(shù)是框架調(diào)用自動(dòng)調(diào)用的:

    protected?void?onCreate(Bundle?savedInstanceState)?

    不是程序編寫(xiě)者主動(dòng)去調(diào)用,反而是用戶寫(xiě)的代碼被框架調(diào)用,這也就反轉(zhuǎn)

    !當(dāng)然IoC?本身的內(nèi)涵遠(yuǎn)遠(yuǎn)不止這些,但是從這個(gè)例子中也可以窺視出IoC

    帶來(lái)的巨大好處。此類(lèi)的例子在Android?隨處可見(jiàn),例如說(shuō)數(shù)據(jù)庫(kù)的管理類(lèi),

    例如說(shuō)Android?SAX?Handler?的調(diào)用等。有時(shí)候,您甚至需要自己編寫(xiě)簡(jiǎn)

    單的IoC?實(shí)現(xiàn),上面展示的多線程現(xiàn)在就是一個(gè)說(shuō)明

    22.Android中的長(zhǎng)度單位詳解

    現(xiàn)在這里介紹一下dp?spdp?也就是dip。這個(gè)和sp?基本類(lèi)似。如果設(shè)置表示長(zhǎng)度、高度等屬性時(shí)可以使用dp?sp。但如果設(shè)置字體,需要使用spdp?是與密度無(wú)關(guān),sp?除了與密度無(wú)關(guān)外,還與scale?無(wú)關(guān)。如果屏幕密度為160,這時(shí)dp?sp?px?是一樣的。1dp=1sp=1px,但如果使用px?作單位,如果屏幕大小不變(假設(shè)還是3.2?寸),而屏幕密度變成了320。那么原來(lái)TextView?的寬度設(shè)成160px,在密度為320?3.2?寸屏幕里看要比在密度為160?3.2?寸屏幕上看短了一半。但如果設(shè)置成160dp?160sp?的話。系統(tǒng)會(huì)自動(dòng)將width?屬性值設(shè)置成320px?的。也就是160?*?320?/?160。其中320?/?160?可稱(chēng)為密度比例因子。

    也就是說(shuō),如果使用dp?sp,系統(tǒng)會(huì)根據(jù)屏幕密度的變化自動(dòng)進(jìn)行轉(zhuǎn)換。

    下面看一下其他單位的含義

    px:表示屏幕實(shí)際的象素。例如,320*480?的屏幕在橫向有320個(gè)象素,

    在縱向有480?個(gè)象素。

    in:表示英寸,是屏幕的物理尺寸。每英寸等于2.54?厘米。例如,形容

    手機(jī)屏幕大小,經(jīng)常說(shuō),3.2(英)寸、3.5(英)寸、4(英)寸就是指這個(gè)

    單位。這些尺寸是屏幕的對(duì)角線長(zhǎng)度。如果手機(jī)的屏幕是3.2?英寸,表示手機(jī)

    的屏幕(可視區(qū)域)對(duì)角線長(zhǎng)度是3.2*2.54?=?8.128?厘米。讀者可以去量

    一量自己的手機(jī)屏幕,看和實(shí)際的尺寸是否一致。 ?


    23.?4activity的啟動(dòng)模式

    standard:?標(biāo)準(zhǔn)模式,一調(diào)用startActivity()方法就會(huì)產(chǎn)生一個(gè)新的實(shí)例。?

    singleTop:?如果已經(jīng)有一個(gè)實(shí)例位于Activity棧的頂部時(shí),就不產(chǎn)生新的實(shí)例,而只是調(diào)用Activity中的newInstance()方法。如果不位于棧頂,會(huì)產(chǎn)生一個(gè)新的實(shí)例。?

    singleTask:?會(huì)在一個(gè)新的task中產(chǎn)生這個(gè)實(shí)例,以后每次調(diào)用都會(huì)使用這個(gè),不會(huì)去產(chǎn)生新的實(shí)例了。?

    singleInstance:?這個(gè)跟singleTask基本上是一樣,只有一個(gè)區(qū)別:在這個(gè)模式下的Activity實(shí)例所處的task中,只能有這個(gè)activity實(shí)例,不能有其他的實(shí)例。

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


    ANRApplication?Not?Responding

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

      用戶對(duì)應(yīng)用程序的操作(輸入事件,按鍵、觸摸屏事件)5秒內(nèi)無(wú)響應(yīng)

      廣播接受器(BroadcastReceiver)10秒內(nèi)仍未執(zhí)行完畢?

      Android應(yīng)用程序完全運(yùn)行在一個(gè)獨(dú)立的線程中(例如main)。這就意味著,任何在主線程中運(yùn)行的,需要消耗大量時(shí)間的操作都會(huì)引發(fā)ANR。因?yàn)榇藭r(shí),你的應(yīng)用程序已經(jīng)沒(méi)有機(jī)會(huì)去響應(yīng)輸入事件和意向廣播(Intent?broadcast)。?

    避免方法:Activity應(yīng)該在它的關(guān)鍵生命周期方法(如 onCreate()和onResume())里盡可能少的去做創(chuàng)建操作,

    潛在的耗時(shí)操作。例如網(wǎng)絡(luò)或數(shù)據(jù)庫(kù)操作,或者高耗時(shí)的計(jì)算如改變位圖尺寸,應(yīng)該在子線程里(或者異步方式)來(lái)完成。

    主線程應(yīng)該為子線程提供一個(gè)Handler,以便完成時(shí)能夠提交給主線程。

    25.Android?Intent的使用


    在一個(gè)Android應(yīng)用中,主要是由一些組件組成,(Activity,Service,ContentProvider,etc.)在這些組件之間的通訊中,由Intent協(xié)助完成。

    正如網(wǎng)上一些人解析所說(shuō),Intent負(fù)責(zé)對(duì)應(yīng)用中一次操作的動(dòng)作、動(dòng)作涉及數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述,Android則根據(jù)此Intent的描述,負(fù)責(zé)找到對(duì)應(yīng)的組件,將?Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。Intent在這里起著實(shí)現(xiàn)調(diào)用者與被調(diào)用者之間的解耦作用。
    Intent傳遞過(guò)程中,要找到目標(biāo)消費(fèi)者(另一個(gè)Activity,IntentReceiver或Service),也就是Intent的響應(yīng)者,有兩種方法來(lái)匹配:
    1,顯示匹配(Explicit):?

    [java]?view plaincopy
  • public?TestB?extents?Activity??
  • {??
  • ?.........??
  • };??
  • ?public?class?Test?extends?Activity??
  • {??
  • ?????......??
  • ?????public?void?switchActivity()??
  • ?????{??
  • ????????????Intent?i?=?new?Intent(Test.this,?TestB.class);??
  • ????????????this.startActivity(i);??
  • ?????}??
  • }??


  • 代碼簡(jiǎn)潔明了,執(zhí)行了switchActivity()函數(shù),就會(huì)馬上跳轉(zhuǎn)到名為T(mén)estB的Activity中。?

    2,隱式匹配(Implicit):
    ???
    ??隱式匹配,首先要匹配Intent的幾項(xiàng)值:Action,?Category,?Data/Type,Component
    如果填寫(xiě)了Componet就是上例中的Test.class)這就形成了顯示匹配。所以此部分只講前幾種匹配。匹配規(guī)則為最大匹配規(guī)則,

    1,如果你填寫(xiě)了Action,如果有一個(gè)程序的Manifest.xml中的某一個(gè)Activity的IntentFilter段中定義了包含了相同的Action那么這個(gè)Intent就與這個(gè)目標(biāo)Action匹配,如果這個(gè)Filter段中沒(méi)有定義Type,Category,那么這個(gè)Activity就匹配了。但是如果手機(jī)中有兩個(gè)以上的程序匹配,那么就會(huì)彈出一個(gè)對(duì)話可框來(lái)提示說(shuō)明。
    Action的值在Android中有很多預(yù)定義,如果你想直接轉(zhuǎn)到你自己定義的Intent接收者,你可以在接收者的IntentFilter中加入一個(gè)自定義的Action值(同時(shí)要設(shè)定Category值為"android.intent.category.DEFAULT"),在你的Intent中設(shè)定該值為Intent的Action,就直接能跳轉(zhuǎn)到你自己的Intent接收者中。因?yàn)檫@個(gè)Action在系統(tǒng)中是唯一的。
    2,data/type,你可以用Uri來(lái)做為data,比如Uri?uri?=?Uri.parse(http://www.google.com?);
    Intent?i?=?new?Intent(Intent.ACTION_VIEW,uri);手機(jī)的Intent分發(fā)過(guò)程中,會(huì)根據(jù)http://www.google.com?的scheme判斷出數(shù)據(jù)類(lèi)型type
    手機(jī)的Brower則能匹配它,在Brower的Manifest.xml中的IntenFilter中首先有ACTION_VIEW?Action,也能處理http:的type,

    3,至于分類(lèi)Category,一般不要去在Intent中設(shè)置它,如果你寫(xiě)Intent的接收者,就在Manifest.xml的Activity的IntentFilter中包含android.category.DEFAULT,這樣所有不設(shè)置Category(Intent.addCategory(String?c);)的Intent都會(huì)與這個(gè)Category匹配。

    4,extras(附加信息),是其它所有附加信息的集合。使用extras可以為組件提供擴(kuò)展信息,比如,如果要執(zhí)行“發(fā)送電子郵件”這個(gè)動(dòng)作,可以將電子郵件的標(biāo)題、正文等保存在extras里,傳給電子郵件發(fā)送組件。
    ?

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

    當(dāng)你的程序中某一個(gè)Activity?A?在運(yùn)行時(shí)中,主動(dòng)或被動(dòng)地運(yùn)行另一個(gè)新的Activity?B?
    這個(gè)時(shí)候A會(huì)執(zhí)行

    Java代碼

    public?void?onSaveInstanceState(Bundle?outState)?{???

    ? ? ? super.onSaveInstanceState(outState);????

    ? ? ? outState.putLong("id",?1234567890);

    }??

    ?

    B?完成以后又會(huì)來(lái)找A,?這個(gè)時(shí)候就有兩種情況,一種是A被回收,一種是沒(méi)有被回收,被回
    收的A就要重新調(diào)用onCreate()方法,
    不同于直接啟動(dòng)的是這回onCreate()里是帶上參數(shù)savedInstanceState,沒(méi)被收回的就還是onResume就好了。

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

    Java代碼

    if(savedInstanceState?!=?null){??
    ?????long?id?=?savedInstanceState.getLong("id");??
    }??

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


    27.如何退出Activity


    對(duì)于單一Activity的應(yīng)用來(lái)說(shuō),退出很簡(jiǎn)單,直接finish()即可。當(dāng)然,也可以用killProcess()System.exit()這樣的方法。現(xiàn)提供幾個(gè)方法,供參考:
    1、拋異常強(qiáng)制退出:該方法通過(guò)拋異常,使程序Force?Close。驗(yàn)證可以,但是,需要解決的問(wèn)題是,如何使程序結(jié)束掉,而不彈出Force?Close的窗口。
    2、記錄打開(kāi)的Activity:每打開(kāi)一個(gè)Activity,就記錄下來(lái)。在需要退出時(shí),關(guān)閉每一個(gè)Activity即可。
    3、發(fā)送特定廣播:在需要結(jié)束應(yīng)用時(shí),發(fā)送一個(gè)特定的廣播,每個(gè)Activity收到廣播后,關(guān)閉即可。
    4、遞歸退出在打開(kāi)新的Activity時(shí)使用startActivityForResult,然后自己加標(biāo)志,在onActivityResult中處理,遞歸關(guān)閉。除了第一個(gè),都是想辦法把每一個(gè)Activity都結(jié)束掉,間接達(dá)到目的。但是這樣做同樣不完美。你會(huì)發(fā)現(xiàn),如果自己的應(yīng)用程序?qū)γ恳粋€(gè)Activity都設(shè)置了nosensor,在兩個(gè)Activity結(jié)束的間隙,sensor可能有效了。但至少,我們的目的達(dá)到了,而且沒(méi)有影響用戶使用。為了編程方便,最好定義一個(gè)Activity基類(lèi),處理這些共通問(wèn)題

    28.請(qǐng)解釋下在單線程模型中MessageHandlerMessage?QueueLooper之間的關(guān)系。


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

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

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

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

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

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

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

    1. Message

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

    2. Handler

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

    3. Message Queue

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

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

    4. Looper

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

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

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

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

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

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

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

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

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

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

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


    29.你如何評(píng)價(jià)Android系統(tǒng)?優(yōu)缺點(diǎn)。


    答:Android平臺(tái)手機(jī) 5大優(yōu)勢(shì):

    一、開(kāi)放性

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

    二、掙脫運(yùn)營(yíng)商的束縛

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

    三、豐富的硬件選擇

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

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

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

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

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

    再說(shuō)Android的5大不足:

    一、安全和隱私

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

    二、首先開(kāi)賣(mài)Android手機(jī)的不是最大運(yùn)營(yíng)商

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

    三、運(yùn)營(yíng)商仍然能夠影響到Android手機(jī)

    國(guó)內(nèi)市場(chǎng),不少用戶對(duì)購(gòu)得移動(dòng)定制機(jī)不滿,感覺(jué)所購(gòu)的手機(jī)被人涂畫(huà)了廣告一般。這樣的情況在國(guó)外市場(chǎng)同樣出現(xiàn)。Android手機(jī)的另一發(fā)售運(yùn)營(yíng)商Sprint就將在其機(jī)型中內(nèi)置其手機(jī)商店程序。

    四、同類(lèi)機(jī)型用戶減少

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

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

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

    30.談?wù)?span style="font-family:'Times New Roman'">android數(shù)據(jù)存儲(chǔ)方式。

    Android提供了5種方式存儲(chǔ)數(shù)據(jù):
    1)使用SharedPreferences存儲(chǔ)數(shù)據(jù);它是Android提供的用來(lái)存儲(chǔ)一些簡(jiǎn)單配置信息的一種機(jī)制,采用了XML格式將數(shù)據(jù)存儲(chǔ)到設(shè)備中。只能在同一個(gè)包內(nèi)使用,不能在不同的包之間使用。
    2)文件存儲(chǔ)數(shù)據(jù);文件存儲(chǔ)方式是一種較常用的方法,在Android中讀取/寫(xiě)入文件的方法,與Java中實(shí)現(xiàn)I/O的程序是完全一樣的,提供了openFileInput()openFileOutput()方法來(lái)讀取設(shè)備上的文件。
    3SQLite數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù);SQLiteAndroid所帶的一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù),它支持SQL語(yǔ)句,它是一個(gè)輕量級(jí)的嵌入式數(shù)據(jù)庫(kù)。
    4)使用ContentProvider存儲(chǔ)數(shù)據(jù);主要用于應(yīng)用程序之間進(jìn)行數(shù)據(jù)交換,從而能夠讓其他的應(yīng)用保存或讀取此Content?Provider的各種數(shù)據(jù)類(lèi)型。
    5)網(wǎng)絡(luò)存儲(chǔ)數(shù)據(jù);通過(guò)網(wǎng)絡(luò)上提供給我們的存儲(chǔ)空間來(lái)上傳(存儲(chǔ))和下載(獲取)我們存儲(chǔ)在網(wǎng)絡(luò)空間中的數(shù)據(jù)信息。

    31.?AndroidActivity,?Intent,?Content?Provider,?Service各有什么區(qū)別。

    Activity:?活動(dòng),是最基本的android應(yīng)用程序組件。一個(gè)活動(dòng)就是一個(gè)用戶可以操作的可視化用戶界面,每一個(gè)活動(dòng)都被實(shí)現(xiàn)為一個(gè)獨(dú)立的類(lèi),并且從活動(dòng)基類(lèi)繼承而來(lái)。
    Intent:?意圖,描述應(yīng)用想干什么。最重要的部分是動(dòng)作和動(dòng)作對(duì)應(yīng)的數(shù)據(jù)。
    Content?Provider:內(nèi)容提供器,android應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件、SQLite數(shù)據(jù)庫(kù)中,甚至是任何有效的設(shè)備中。當(dāng)你想將你的應(yīng)用數(shù)據(jù)和其他應(yīng)用共享時(shí),內(nèi)容提供器就可以發(fā)揮作用了。
    Service:服務(wù),具有一段較長(zhǎng)生命周期且沒(méi)有用戶界面的程序組件。

    32.View,?surfaceView,?GLSurfaceView有什么區(qū)別。

    view是最基礎(chǔ)的,必須在UI主線程內(nèi)更新畫(huà)面,速度較慢。
    SurfaceView?view的子類(lèi),類(lèi)似使用雙緩機(jī)制,在新的線程中更新畫(huà)面所以刷新界面速度比view
    GLSurfaceView?SurfaceView的子類(lèi),opengl?專(zhuān)用的

    33.Manifest.xml文件中主要包括哪些信息?

    manifest:根節(jié)點(diǎn),描述了package中所有的內(nèi)容。
    uses-permission:請(qǐng)求你的package正常運(yùn)作所需賦予的安全許可。
    permission:?聲明了安全許可來(lái)限制哪些程序能你package中的組件和功能。
    instrumentation:聲明了用來(lái)測(cè)試此package或其他package指令組件的代碼。
    application:包含packageapplication級(jí)別組件聲明的根節(jié)點(diǎn)。
    activityActivity是用來(lái)與用戶交互的主要工具。
    receiverIntentReceiver能使的application獲得數(shù)據(jù)的改變或者發(fā)生的操作,即使它當(dāng)前不在運(yùn)行。
    serviceService是能在后臺(tái)運(yùn)行任意時(shí)間的組件。
    providerContentProvider是用來(lái)管理持久化數(shù)據(jù)并發(fā)布給其他應(yīng)用程序使用的組件。

    34.根據(jù)自己的理解描述下Android數(shù)字簽名。

    (1)所有的應(yīng)用程序都必須有數(shù)字證書(shū),Android系統(tǒng)不會(huì)安裝一個(gè)沒(méi)有數(shù)字證書(shū)的應(yīng)用程序
    (2)Android程序包使用的數(shù)字證書(shū)可以是自簽名的,不需要一個(gè)權(quán)威的數(shù)字證書(shū)機(jī)構(gòu)簽名認(rèn)證
    (3)如果要正式發(fā)布一個(gè)Android程序,必須使用一個(gè)合適的私鑰生成的數(shù)字證書(shū)來(lái)給程序簽名,而不能使用adt插件或者ant工具生成的調(diào)試證書(shū)來(lái)發(fā)布。
    (4)數(shù)字證書(shū)都是有有效期的,Android只是在應(yīng)用程序安裝的時(shí)候才會(huì)檢查證書(shū)的有效期。如果程序已經(jīng)安裝在系統(tǒng)中,即使證書(shū)過(guò)期也不會(huì)影響程序的正常功能。

    35.?AIDL的全稱(chēng)是什么?如何工作?能處理哪些類(lèi)型的數(shù)據(jù)?

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

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

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

    3、在Java文件中,?實(shí)現(xiàn)AIDL中定義的接口.?編譯器會(huì)根據(jù)AIDL接口,?產(chǎn)生一個(gè)JAVA接口。這個(gè)接口有一個(gè)名為Stub的內(nèi)部抽象類(lèi),它繼承擴(kuò)展了接口并實(shí)現(xiàn)了遠(yuǎn)程調(diào)用需要的幾個(gè)方法。接下來(lái)就需要自己去實(shí)現(xiàn)自定義的幾個(gè)接口了.
    4、向客戶端提供接口ITaskBinder,?如果寫(xiě)的是service,擴(kuò)展該Service并重載onBind?()方法來(lái)返回一個(gè)實(shí)現(xiàn)上述接口的類(lèi)的實(shí)例。
    5、在服務(wù)器端回調(diào)客戶端的函數(shù).?前提是當(dāng)客戶端獲取的IBinder接口的時(shí)候,要去注冊(cè)回調(diào)函數(shù),?只有這樣,?服務(wù)器端才知道該調(diào)用那些函數(shù)

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

    1.?不需要import聲明的簡(jiǎn)單Java編程語(yǔ)言類(lèi)型(int,boolean)

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

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

    (另外:?我沒(méi)嘗試Parcelables,?Eclipse+ADT下編譯不過(guò),?或許以后會(huì)有所支持).

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

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

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

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

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

    1.?聲明一個(gè)接口類(lèi)型的變量,該接口類(lèi)型在.aidl文件中定義。

    2.?實(shí)現(xiàn)ServiceConnection

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

    4.?ServiceConnection.onServiceConnected()實(shí)現(xiàn)中,你會(huì)接收一個(gè)IBinder實(shí)例(被調(diào)用的Service).?調(diào)用

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

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

    6.?斷開(kāi)連接,調(diào)用接口實(shí)例中的ApplicationContext.unbindService()
    參考:http://buaadallas.blog.51cto.com/399160/372090

    36.android:gravityandroid:layout_gravity的區(qū)別

    LinearLayout有兩個(gè)非常相似的屬性:android:gravityandroid:layout_gravity。他們的區(qū)別在?于:android:gravity用于設(shè)置View組件的對(duì)齊方式,而android:layout_gravity用于設(shè)置Container組件的?對(duì)齊方式。

    舉個(gè)例子,我們可以通過(guò)設(shè)置android:gravity="center"來(lái)讓EditText中的文字在EditText組件中居中顯示;同?時(shí)我們?cè)O(shè)置EditTextandroid:layout_gravity="right"來(lái)讓EditText組件在LinearLayout中居右 顯示。來(lái)實(shí)踐以下:

    正如我們所看到的,在EditText中,其中的文字已經(jīng)居中顯示了,而EditText組件自己也對(duì)齊到了LinearLayout的右側(cè)。

    [html]?view plaincopy
  • <LinearLayout???
  • ????xmlns:android="http://schemas.android.com/apk/res/android"???
  • ????android:orientation="vertical"???
  • ????android:layout_width="fill_parent"???
  • ????android:layout_height="fill_parent">???
  • ????<EditText???
  • ????????android:layout_width="wrap_content"???
  • ????????android:gravity="center"???
  • ????????android:layout_height="wrap_content"???
  • ????????android:text="one"???
  • ????????android:layout_gravity="right"/>???
  • </LinearLayout>

  • 38.?注冊(cè)廣播接收者兩種方式的區(qū)別,及優(yōu)缺點(diǎn)


    答:首先寫(xiě)一個(gè)類(lèi)要繼承BroadcastReceiver

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

    <receiveandroid:name=".IncomingSMSReceiver " >

    <intent-filter>

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

    <intent-filter>

    <receiver>

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

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

    IncomingSMSReceiverreceiver = new IncomgSMSReceiver();

    registerReceiver(receiver.filter);

    兩種注冊(cè)類(lèi)型的區(qū)別是:


    1)第一種是常駐型(靜態(tài)注冊(cè)),也就是說(shuō)當(dāng)應(yīng)用程序關(guān)閉后,如果有信息廣播來(lái),程序也會(huì)被系統(tǒng)調(diào)用自動(dòng)運(yùn)行。

    2)第二種不是常駐型廣播(動(dòng)態(tài)注冊(cè)),也就是說(shuō)廣播跟隨程序的生命周期。


    注冊(cè)的方法有兩種,一種是靜態(tài)注冊(cè),一種是動(dòng)態(tài)注冊(cè)。

    動(dòng)態(tài)注冊(cè)優(yōu)點(diǎn):在 Android 的廣播機(jī)制中,動(dòng)態(tài)注冊(cè)的優(yōu)先級(jí)是要高于靜態(tài)注冊(cè)優(yōu)先級(jí)的,因此在必要的情況下,我們是需要?jiǎng)討B(tài)注冊(cè)廣播接收器的。

    靜態(tài)注冊(cè)優(yōu)點(diǎn):動(dòng)態(tài)注冊(cè)廣播接收器還有一個(gè)特點(diǎn),就是當(dāng)用來(lái)注冊(cè)的 Activity 關(guān)掉后,廣播也就失效了。同時(shí)反映了靜態(tài)注冊(cè)的一個(gè)優(yōu)勢(shì),就是無(wú)需擔(dān)憂廣播接收器是否被關(guān)閉,只要設(shè)備是開(kāi)啟狀態(tài),廣播接收器就是打開(kāi)著的。

    39.Dalvik基于JVM的改進(jìn)

    1.幾個(gè)class變?yōu)橐粋€(gè)dexconstant?pool,省內(nèi)存

    2.Zygotecopy-on-write?shared,省內(nèi)存,省cpu,省電

    3.基于寄存器的bytecode,省指令,省cpu,省電

    4.Trace-based?JIT,cpu,省電,省內(nèi)存

    40.android中有哪幾種解析xml的類(lèi),官方推薦哪種?以及它們的原理和區(qū)別.

    ??DOM解析

    ????優(yōu)點(diǎn):

    1.XML樹(shù)在內(nèi)存中完整存儲(chǔ),因此可以直接修改其數(shù)據(jù)和結(jié)構(gòu).?

    2.可以通過(guò)該解析器隨時(shí)訪問(wèn)XML樹(shù)中的任何一個(gè)節(jié)點(diǎn).?

    3.DOM解析器的API在使用上也相對(duì)比較簡(jiǎn)單.

    缺點(diǎn):如果XML文檔體積比較大時(shí),將文檔讀入內(nèi)存是非常消耗系統(tǒng)資源的.

    使用場(chǎng)景:DOM?是用與平臺(tái)和語(yǔ)言無(wú)關(guān)的方式表示?XML?文檔的官方?W3C?標(biāo)準(zhǔn).DOM?是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)的集合.這個(gè)層次結(jié)構(gòu)允許開(kāi)發(fā)人員在樹(shù)中尋找特定信息.分析該結(jié)構(gòu)通常需要加載整個(gè)文檔和構(gòu)造層次結(jié)構(gòu),然后才能進(jìn)行任何工作.DOM是基于對(duì)象層次結(jié)構(gòu)的.

    ??SAX解析

    優(yōu)點(diǎn):

    SAX?對(duì)內(nèi)存的要求比較低,因?yàn)樗岄_(kāi)發(fā)人員自己來(lái)決定所要處理的標(biāo)簽.特別是當(dāng)開(kāi)發(fā)人員只需要處理文檔中所包含的部分?jǐn)?shù)據(jù)時(shí),SAX?這種擴(kuò)展能力得到了更好的體現(xiàn).

    缺點(diǎn):

    用SAX方式進(jìn)行XML解析時(shí),需要順序執(zhí)行,所以很難訪問(wèn)到同一文檔中的不同數(shù)據(jù).此外,在基于該方式的解析編碼過(guò)程也相對(duì)復(fù)雜.

    使用場(chǎng)景:

    對(duì)于含有數(shù)據(jù)量十分巨大,而又不用對(duì)文檔的所有數(shù)據(jù)進(jìn)行遍歷或者分析的時(shí)候,使用該方法十分有效.該方法不用將整個(gè)文檔讀入內(nèi)存,而只需讀取到程序所需的文檔標(biāo)簽處即可.

    ??Xmlpull解析

    android?SDK提供了xmlpull?api,xmlpull和sax類(lèi)似,是基于流(stream)操作文件,然后根據(jù)節(jié)點(diǎn)事件回調(diào)開(kāi)發(fā)者編寫(xiě)的處理程序.因?yàn)槭腔诹鞯奶幚?因此xmlpull和sax都比較節(jié)約內(nèi)存資源,不會(huì)象dom那樣要把所有節(jié)點(diǎn)以對(duì)橡樹(shù)的形式展現(xiàn)在內(nèi)存中.xmlpull比sax更簡(jiǎn)明,而且不需要掃描完整個(gè)流.


    41.Android系統(tǒng)中GC什么情況下會(huì)出現(xiàn)內(nèi)存泄露呢?

    出現(xiàn)情況:
    1.?數(shù)據(jù)庫(kù)的cursor沒(méi)有關(guān)閉
    2.構(gòu)造adapter時(shí),沒(méi)有使用緩存contentview
    ???衍生listview的優(yōu)化問(wèn)題-----減少創(chuàng)建view的對(duì)象,充分使用contentview,可以使用一靜態(tài)類(lèi)來(lái)優(yōu)化處理getview的過(guò)程
    3.Bitmap對(duì)象不使用時(shí)采用recycle()釋放內(nèi)存
    4.activity中的對(duì)象的生命周期大于activity
    調(diào)試方法:?DDMS==>?HEAPSZIE==>dataobject==>[Total?Size]

    42.談?wù)剬?duì)Android?NDK的理解

    NDK全稱(chēng):Native Development Kit。   1、NDK是一系列工具的集合。   * NDK提供了一系列的工具,幫助開(kāi)發(fā)者快速開(kāi)發(fā)C(或C++)的動(dòng)態(tài)庫(kù),并能自動(dòng)將so和java應(yīng)用一起打包成apk。這些工具對(duì)開(kāi)發(fā)者的幫助是巨大的。   * NDK集成了 交叉編譯器 ,并提供了相應(yīng)的mk文件隔離CPU、平臺(tái)、ABI等差異,開(kāi)發(fā)人員只需要簡(jiǎn)單修改mk文件(指出“哪些文件需要編譯”、“編譯特性要求”等),就可以創(chuàng)建出so。   * NDK可以自動(dòng)地將so和Java應(yīng)用一起打包,極大地減輕了開(kāi)發(fā)人員的打包工作。   2、NDK提供了一份穩(wěn)定、功能有限的API頭文件聲明。   Google明確聲明該API是穩(wěn)定的,在后續(xù)所有版本中都穩(wěn)定支持當(dāng)前發(fā)布的API。從該版本的NDK中看出,這些API支持的功能非常有限,包含有:C標(biāo)準(zhǔn)庫(kù)(libc)、標(biāo)準(zhǔn)數(shù)學(xué)庫(kù)(libm)、壓縮庫(kù)(libz)、Log庫(kù)(liblog)。



    1,雙緩沖技術(shù)原理以及優(yōu)缺點(diǎn):

    創(chuàng)建一幅后臺(tái)圖像,將每一幀畫(huà)入圖像,然后調(diào)用drawImage()方法將整個(gè)后臺(tái)圖像一次畫(huà)到屏幕上去。

    優(yōu)點(diǎn):雙緩沖技術(shù)的優(yōu)點(diǎn)在于大部分繪制是離屏的。

    ? ? ? ? ? ? 將離屏圖像一次繪至屏幕上,比直接在屏幕上繪制要有效得多。

    ? ? ? ? ? ? 雙緩沖技術(shù)可以使動(dòng)畫(huà)平滑。

    缺點(diǎn):要分配一個(gè)后臺(tái)圖像的緩沖,如果圖像相當(dāng)大,這將占用很大一塊內(nèi)存。

    2,AsyncTask簡(jiǎn)介

    在開(kāi)發(fā)Android移動(dòng)客戶端的時(shí)候往往要使用多線程來(lái)進(jìn)行操作,我們通常會(huì)將耗時(shí)的操作放在單獨(dú)的線程執(zhí)行,避免其占用主線程而給用戶帶來(lái)不好的用戶體驗(yàn)。但是在子線程中無(wú)法去操作主線程(UI 線程),在子線程中操作UI線程會(huì)出現(xiàn)錯(cuò)誤。因此android提供了一個(gè)類(lèi)Handler來(lái)在子線程中來(lái)更新UI線程,用發(fā)消息的機(jī)制更新UI界面,呈現(xiàn)給用戶。這樣就解決了子線程更新UI的問(wèn)題。但是費(fèi)時(shí)的任務(wù)操作總會(huì)啟動(dòng)一些匿名的子線程,太多的子線程給系統(tǒng)帶來(lái)巨大的負(fù)擔(dān),隨之帶來(lái)一些性能問(wèn)題。因此android提供了一個(gè)工具類(lèi)AsyncTask,顧名思義異步執(zhí)行任務(wù)。這個(gè)AsyncTask生來(lái)就是處理一些后臺(tái)的比較耗時(shí)的任務(wù),給用戶帶來(lái)良好用戶體驗(yàn)的,從編程的語(yǔ)法上顯得優(yōu)雅了許多,不再需要子線程和Handler就可以完成異步操作并且刷新用戶界面。

    3,Socket通信編程

    客戶端編程步驟:


    1、?創(chuàng)建客戶端套接字(指定服務(wù)器端IP地址與端口號(hào))


    2、?連接(Android?創(chuàng)建Socket時(shí)會(huì)自動(dòng)連接)


    3、?與服務(wù)器端進(jìn)行通信


    4、?關(guān)閉套接字


    服務(wù)器端:

    1.創(chuàng)建一個(gè)ServerSocket,用于監(jiān)聽(tīng)客戶端Socket的連接請(qǐng)求

    2.采用循環(huán)不斷接受來(lái)自客戶端的請(qǐng)求

    3.每當(dāng)接受到客戶端Socket的請(qǐng)求,服務(wù)器端也對(duì)應(yīng)產(chǎn)生一個(gè)Socket




    總結(jié)

    以上是生活随笔為你收集整理的android面试题总结加强的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

    主站蜘蛛池模板: 亚洲va中文字幕 | 韩国av电影在线观看 | 女女高潮h冰块play失禁百合 | 17c国产精品一区二区 | 四月婷婷 | 在线免费观看日本 | 欧美日日日 | 国产亚洲视频一区 | 久久精彩 | 被室友玩屁股(h)男男 | 中日韩精品一区二区三区 | 男人的天堂a在线 | 无码精品人妻一区二区三区漫画 | 亚洲v国产 | 亚洲中文字幕无码一区 | 欧美日本道 | 色网站免费在线观看 | 天天操操夜夜操操 | 亚洲a黄| 91蝌蚪网| 国产97在线观看 | 国产九九精品视频 | 成人在线免费看视频 | 久久视频这里只有精品 | 精品视频在线观看一区 | 91网站免费在线观看 | 性巴克成人免费网站 | 欧美福利片在线观看 | jjzz日本视频 | 992tv成人免费视频 | 18女人毛片 | 欧美偷拍一区二区 | 欧美色视频一区二区三区 | 午夜视频在线网站 | 亚洲欧美一区二区三区情侣bbw | 日本三级播放 | 国产美女无遮挡永久免费观看 | 欧美一区二区视频免费观看 | 在线涩涩 | 亚洲天堂黄色 | 欧美性xxxxxx| 日韩不卡av在线 | 久久黄色精品视频 | 香蕉视频传媒 | 美丽姑娘免费观看在线观看 | 国产女大学生av | 国产精品腿扒开做爽爽爽挤奶网站 | 毛片内射久久久一区 | 日韩一区二区a片免费观看 伊人网综合在线 | av在线最新 | 美女网站黄频 | 天天操人人干 | 在线观视频免费观看 | 超薄肉色丝袜一区二区 | 毛片a| 人妻av一区二区三区 | 午夜整容室 | 亚洲天堂av在线免费观看 | 欧美亚洲国产成人 | www.久久精品视频 | 亚洲精品影视 | 又大又长粗又爽又黄少妇视频 | 香蕉一级片| 人善交videos欧美3d动漫 | 女人扒开腿免费视频app | 国内毛片毛片毛片毛片毛片 | 一区二区伦理 | 免费观看黄色网页 | 污视频网站在线播放 | 欧美乱大交xxxxx | 小嫩嫩12欧美 | 少妇av片| 亚洲网站免费看 | 三级av免费| 国产精品xxxxxx| 午夜裸体性播放 | 国产精品久久久久久久久久久新郎 | 中文字幕免费高清网站 | 精品韩国一区二区三区 | 亚洲熟区| 国产精品99久久久久久久女警 | 成人音影 | 亚洲午夜精品一区二区三区 | 无码人妻一区二区三区在线 | 欧美丰满老妇熟乱xxxxyyy | 小嫩嫩精品导航 | 涩涩视频在线免费看 | 一本黄色片 | 成年人的视频网站 | 国产精品黄视频 | 日韩视频在线观看 | 国产奶水涨喷在线播放 | 国产欧美日韩视频在线观看 | 久草高清视频 | 午夜影院在线视频 | av电影在线网站 | jizz久久 | 国产妇女乱一性一交 | 三上悠亚 电影 |