




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Android面試題
1.下列哪些語句有關內存回收的闡明是對的的I?(b)
A、程序員必須創立一種線程來釋放內存
B、內存回收程序負責釋放無用內存
C、內存回收程序容許程序員直接釋放內存
D、內存回收程序可以在指定的時間釋放內存對象
2.下面異常是屬于RuntimeException的是(abed)(多選)
A、ArithmeticException
B、111egalArgumentException
C、NullPointerException
D、BufferUnderflowException
3.Math,round(11.5)等于多少().Math.round(Tl.5)等于多少(c).
A、11,-11B、11,-12C、12,-HD、12,-12
4.下列程序段時輸出成果是:(b)
voidcomplicatedexpression_r(){
intx=20,y=30;
booleanb;
b=x>50&&y>601|x>50&&y<-601|x<-50My>601|x<-50&&y<-60;
System,out.printin(b);
)
A、trueB、falseC、1D、Oil.activity
5.對某些資源以及狀態的操作保留,最佳是保留在生命周期的哪個函數中進行
(d)
A、onPauseOB>onCreateOC、onResumeOD、onStart()
6.Intent傳遞數據時,下列的數據類型哪些可以被傳遞(abed)(多選)
A、SerializableB、charsequenceC、ParcelableD、Bundle
7.android中下列屬于Intent代|作用的是(c)
A、實現應用程序間H勺數據共享
B、是一段長的生命周期,沒有顧客界面H勺程序,可以保持應用在后臺運夕亍,
而不會由于切換頁面而消失
C、可以實現界面間日勺切換,可以包括動作和動作數據,連接四大組件的紐帶
D、處理一種應用程序整體性的工作
8.下列屬于SAX解析xml文獻的長處的是(b)
A、將整個文檔樹在內存中,便于操作,支持刪除,修改,重新排列等多種
功能
B、不用事先調入整個文檔,占用資源少
C、整個文檔調入內存,揮霍時間和空間
D、不是長期駐留在內存,數據不是持久的,事件過后,若沒有保留數據,
數據就會
消失
9.下面時對自定style的方式對的的是(a)
A、<resources>
<stylename=,/myStyle,,>
<itemname二〃android:layoutwidth,,>fi11parent</item>
</style>
</resources>
B、<stylename二〃myStyle”>
<itemname="android:layou^width'^fi1l_parent</item>
</style>
C、<resources>
<itemname=/,android:layout_width,z>fill_parent</item>
</resources>
D、<resources>
〈stylename二〃android:layoutwidth〃>fillparent</sty'e>
</resources>
10.在android中使用Menu時也許需要重寫的措施有(ac)<,(多選)
A、onCreateOptionsMenu()
B、onCreateMenuO
C、onOptionsTtemSelected()
D、onltemSelected()
11.在SQLServerManagementStudio中運行下列T-SQL語句,其輸出值(c)o
SELECT??IDENTITY
A、也許為0.1
B、也許為3
C、不也許為TOO
D、肯定為0
12.在SQLServer2023中運行如下T-SQL語句,假定SALES表中有多行數據,
執行查詢之后的成果是(d)。
BEGINTRANSACTIONA
UpdateSALESSetqty=30WHEREqty<30
BEGINTRANSACTIONB
UpdateSALESSetqty=40WHEREqty<40
UpdateSALESSetqty=50WHEREqty<50
UpdateSALESSetqty=60WHEREqty<60
COMMITTRANSACTIONB
COMMITTRANSACTIONA
A、SALES表中qty列最小值不小于等于30
SALES表中qty列最小值不小于等于40
C、SALES表中qty列日勺數據所有為50
D、SALES表中qty列最小值不小于等于60
13.在android中使用SQLiteOpenHelper這個輔助類時,可以生成一種數據庫,
并可以對數據庫版本進行管理的措施可以是(ab)
A、getWriteableDatabaseO
B、getReadableDatabase()
C、getDatabase0
D、getAbleDatabase()
14.android有關service生命周期的onCreateO和onStart。說法對的的是
(ad)(多選題)
A、當第一次啟動歐|時候先后調用onCrcatcO和onStart。措施
B、當第一次啟動日勺時候只會調用onCreateO措施
C^假如service己經啟動,將先后調用onCreate()和onStart()措施
D、假如service己經啟動,只會執行onStart()措施,不在執行onCreate()
措施
15.下面是屬于GLSurFaceView特性的是(abc)(多選)
A、管理一種surface,這個surface就是一塊特殊的)內存,能直接排版到
android的I視圖
view上。
B、管理一種EGLdisplay,它能讓opengl把內容渲染到上述的surface上。
C、讓渲染器在獨立的線程里運作,和UT線程分離。
D、可以直接從內存或者DMA等硬件接口獲得圖像數據
16.下面在AndroidManifest.xml文獻中注冊BroadcastReceiver方式對時時
(a)
A、<receiverandroid:name=^NewBroad7A>
<intent-filter>
<action
android:name="android,provider,action.NewBroad7>
<action>
</intent-fi1ter>
</receiver>
B、<receiverandroid:name=^NewBroad^>
<intent-filter>
android:name="android,provider,action.NewBroad^/y
</intent-filter>
</receiver>
C、<receiverandroid:name=^NewBroad^
<action
android:name="android,provider,action.NewBroad7>
<action>
</receiver>
D、〈intent-filter〉
<receiverandroid:name="NewBroad”)
<action>
android:name="android,provider,action.NewBroad^/y
<action>
</receiver>
</intent-filter>
17.有關ContenValues類說法對時的是(a)
A、他和Hashtable比較類似,也是負責存儲某些名值對,不過他存儲的名
值對當中的
名是String類型,而值都是基本類型
B、他和Hashlable比較類似,也是負責存儲某些名值對,不過他存儲的名
值對當中的
名是任意類型,而值都是基本類型
C、他和Hashtable比較類似,也是負責存儲某些名值對,不過他存儲的名
值對當中歐I
名,可認為空,而值都是String類型
D、他和Hashtable比較類似,也是負責存儲某些名值對,不過他存儲的名
值對當中
的名是String類型,而值也是String類型
18.我們都懂得Hanlder是線程與Activity通信的橋梁,假如線程處理不妥,你
的機器就會變得越慢,那么線程銷毀的措施是(a)
A、onDestroyt)
B、onClear()
C、onFinish(;
D^onStopO
19.下面退出Activity錯誤的措施是(c)
A、finish()
B、拋異常強制退出
C、System,exit()
D、onStopO
20.下面屬于android的動畫分類的有(ab)(多項)
A、TweenB、FrameC、DrawD、Animation
21.下面有關Androiddvm的進程和Linux的進程,應用程序的進程說法對的時
是(d)
A、DVM指dalivk的虛擬機.每一種Android應用程序都在它自己的進程中
運行,不一定擁有一種獨立H勺Dalvik虛擬機實例.而每一種DVM都是在Linux中日勺
一種進程,因此說可以認為是同一種概念.
B、DVM指dalivk的虛擬機.每一種Android應用程序都在它自己的進程中
運行,不一定擁有一種獨立的Dalvik虛擬機實例.而每一種DVM不一定都是在Linux
中H勺一種進程,因此說不是一種概念.
C、DVM指dalivk的虛擬機.每一種Android應用程序都在它自己的進程中
運行,都擁有一種獨立的Dalvik虛擬機實例.而每一種DVM不一定都是在Linux中
的一種進程,因此說不是一種概念.
D、DVM指dalivk的虛擬機.每一種Android應用程序都在它自己的進程中
運行,都擁有一種獨立的Dalvik虛擬機實例.而每一種DVM都是在Linux中的一種
進程,因此說可以認為是同一種概念.
22.Android項目工程下面的assets目錄的作用是什么b
A、放置應用到的圖片資源。
B、重要放置多媒體等數據文獻
C、放置字符串,顏色,數組等常量數據
D、放置某些與UI對應日勺布局文獻,都是xml文獻
23.有關res/raw目錄說法對的|歐1是(a)
A、這里日勺文獻是原封不動的J存儲到設備上不會轉換為二進制日勺格式
B、這里日勺文獻是原封不動的存儲到設冬上會轉換為二進制的格式
C、這里日勺文獻最終以二進制日勺格式存儲到指定的包中
D、這里日勺文獻最終不會以二進制日勺格式存儲到指定的包中
24.下列對androidNDK的理解對時時是(abed)
A、NDK是一系列工具H勺集合
B、NDK提供了一份穩定、功能有限的API頭文獻申明。
C、使“Java+C”的開發方式終于轉正,成為官方支持的開發方式
D、NDK將是Android平臺支持C開發的)開端
二.填空題
25.android中常用的四個布局是framlayout,linenarlayout,
relativelayout和tablelayout。
26.android的四大組件是activiey,service,broadcast和contentprovide。
27.java.io包中的objectinputstream和objectoutputstream類重要用于對
對象(Object)的讀寫。
28.android中service的實現措施是:startservice和bindservice。
29.activity一般會重載7個措施用來維護其生命周期,除了
onCreate(),onStart(),onDestory()夕卜尚有
onrestart,onresume,onpause,onstop。
30.android的數據存儲的方式sharedpreference,文
獻,SQlite,contentprovider,網絡。
31.當啟動一種Activity并且新的Activity執行完后需要返回到啟動它的
Activity來執行的回調函數是startActivityResult()。
32.請使用命令行的方式創立一種名字為myAvd,sdk版本為2.2,sd卡是在d盤
的根目錄下,名字為scard.img,并指定屏幕大小
HVGA.o
33.程序運行的成果是:goodandgbc
publicclassExample{
Stringstr=newString("good");
char[]ch={,a,,,b,,,c,);
publicstaticvoidmain(Stringargs[]){
Exampleex=newExample();
ex.change(ex.str,ex.ch);
System,out.print(ex.str+,/and〃);
Sytem.out.print(ex.ch);
)
publicvoidchange(Stringstr,charch口){
str=testok;
ch[0]=g;
)
)
34.在android中,請簡述jni的調用過程。(8分)
1)安裝和下載Cygwin,下載AndroidNDK
2)在ndk項目中JNI接口H勺設計
3)使用C/C++實現當地措施
4)JNI生成動態鏈接庫.so文獻
5)將動態鏈接庫復制到java工程,在java工程中調用,運行java工程即可
35.簡述Android應用程序構造是哪些?(7分)
Android應用程序構造是:
LinuxKernel(Linux內核)、Libraries(系統運行庫或者是c/c++關鍵庫:、
Application
Framework(開發框架包)、Applications(關鍵應用程序)
36.請繼承SQLiteOpenHelper實現:(10分)
1).創立一種版本為1的“diaryOpenHelper.db”的數據庫,
2).同步創立一種“diac,”表(包括一種Jd主鍵并自增長,topic字符
型100
長度,content字符型1000長度)
3).在數據庫版本變化時請刪除diary表,并重新創立出diary表。
publicclassDBHelperextendsSQLiteOpenHelper{
publicfinalstaticStringDATABASENAME=^diaryOpenllelper.db,z;
publicfinalstaticintDATABASEVERSION=1;
〃創立數據庫
publicDBHelper(Contextcontext,Stringname,CursorFactory
factory,intversion;
(
super(context,name,factory,version);
)
〃創立表等機構性文獻
publicvoidonCreate(SQLiteDatabasedb)
{
Stringsql="createtablediary〃+
〃(〃+
〃_idintegerprimarykeyautoincremcnt,〃+
z,topicvarchar(100),,z+
“contentvarchar(1000)z/+
〃)〃:
db.execSQL(sql);
)
〃若數據庫版本有更新,則調用此措施
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,int
newVersion)
Stringsql="droptableifexistsdiary”;
db.execSQL(sql);
this.onCreate(db);
}
)
37.頁面上既有ProgressBar控件progressBar,請用書寫線程以10秒時時時
間完畢其進度顯示工作。(10分)
答案
publicclassProgressBarStuextendsActivity{
privateProgressBarprogressBar=null;
protectedvoidonCreate(BundlesavedlnstanceState){
super.onCreate(savedlnstanceState);
setContentView(R.layout,progressbar;;
〃從這到下是關鍵
progressBar二(ProgressBar)findViewById(R.id.progressBar);
Threadthread=newThread(newRunnable(){
?Override
publicvoidrun(){
intprogressBarMax=progressBar.getMax();
try(
while(progressBarMax!=progressBar.getProgress())
(
intstepProgress=progressBarMax/10;
intcurrentprogress=progressBar.getProgress();
progressBar.setProgress(currentprogress+stepProgress);
Thread,sleep(1000);
}
}catch(InterruptedExceptione){
//TODOAuto-generatcdcatchblock
e.printStackTrace();
}
}
});
thread,start:);
〃關鍵結束
)
)
38.請描述下Activity的生命周期。
必調用HU三個措施:onCreateO—>onStart()—>onResumeO,用AAA
表達
(1)父Activity啟動子Activity,子Actvity退出,父Activity調用次序如
下
AAA->onFreeze()—>onPauseO->onStopO—>onRestart0->
onStart(),onRcsumc(;…
(2)顧客點擊Home,Actvity調用次序如下
AAA->onFreeze()->onPause()—>onStopO-Maybe->onDestroy()
-Maybe
(3)調用finish。,Activity調用次序如下
AAA—>onPause()—>onStopO—>onDestroy()
(4)在Activity上顯示dialog,Activity調用次序如下
AAA
(5)在父Activity上顯示透明的或非全屏日勺activity,Activity調用次序如
下
AAA—>onFreeze0->onPause0
(6)設備進入睡眠狀態,Activity調用次序如下
AAA—>onFreeze()—>onPause()
39.假如后臺的Activity由于某原因被系統回收了,怎樣在被系統回收之前
保留目前狀態?
onSavelnstanccState()
當你日勺程序中某一種ActivityA在運行時,積極或被動地運行另一
種新區IActivityB,這個時候A會執行onSavekstanceState()。B完畢后來又
會來找A,這個時候就有兩種狀況:一是A被回收,二是A沒有被回收,被回收
區JA就要重新調用onCreate。措施,不一樣于直接啟動的I是這回onCreate:)里
是帶上了參數savedlnstanceState;而沒被收回H勺就直接執行onResume(),跳
過onCreateO/<>
40.怎樣將一種Activity設置成窗口的樣式。
在AndroidManifest.xml中定義Activity日勺地方一句話
android:theme=,,@android:style/Theme.Dialog”或
android:theme=,,@android:style/Theme.Translucent”就變成半透明日勺
41.怎樣退出Activity?怎樣安全退出已調用多種Activity的Application?
對于單一Activity的)應用來說,退出很簡樸,直接finish。即可。
當然,也可以用killProcQss()和System.Qxit()這樣H勺措施。
不過,對于多Activity的應用來說,在打開多種Activity后,假如想在最終打
開日勺Activity直接退出,上邊的措施都是沒有用日勺,由于上邊的措施都是結束
一種Activity而已。
當然,網上也有人說可以。
就仿佛有人問,在應用里怎樣捕捉Home鍵,有人就會說用keyCode比較
KEYCODEHOME即可,而實際上假如不修改framework,主線不也許做到這一點同
樣。
因此,最佳還是自己親自試一下。
那么,有無措施直接退出整個應用呢?
在2.1之前,可以使用ActivityManager的)restartPackage措施。
它可以直接結束整個應用。在使用時需要權限
android.permission.RESTART_PACKAGES0
注意不要被它的名字困惑。
可是,在2.2,這個措施失效了。
在2.2添加了一種新的措施,ki11Backgroundprocesses(),需要權限
android,permission.KILLBACKGROUNDPROCESSES0
可惜的是,它和2.2的restartPackage同樣,主線起不到應有的效果。
此外尚有一種措施,就是系統自帶日勺應用程序管理里,強制結束程序的措施,
forceStopPackage()。
它需要權限android,permission.FORCE_STOP_PACKAGESo
并且需要添加android:sharedfserld=,,android.uid.system〃屬性
同樣可惜的是,該措施是非公開的,他只能運行在系統進程,第三方程序無法調
用。
由于需要在Android,mk中添加LOCALCERTIFICATE:=platfornu
而Android,mk是用于在Android源碼下編譯程序用的。
從以上可以看出,在2.2,沒有措施直接結束一種應用,而只能用自己的措施間
接辦到。
現提供幾種措施,供參照:
1、拋異常強制退出:
該措施通過拋異常,使程序ForceClose。
驗證可以,不過,需要處理的問題是,怎樣使程序結束掉,而不彈出ForceClose
的窗口。
2^記錄打開的Activity:
每打開一種Activity,就記錄下來。在需要退出時,關閉每一種Activity即可。
3、發送特定廣播:
在需要結束應用時,發送一種特定的廣播,每個Activity收到廣播后,關閉即
可。
4、遞歸退出
在打開新的Activity時使用startActivityForResult,然后自己加標志,在
onActivityResult中處理,遞歸關閉。
除了第一種,都是想措施把每一種Activity都結束掉,間接到達目的。
不過這樣做同樣不完美。
你會發現,假如自己日勺應用程序對每一種Activity都設置了nosensor,在兩個
Activity結束的間隙,sensor也許有效了。
但至少,我們的目H勺到達了,并且沒有影響顧客使用。
為了編程以便,最佳定義一種Activity基類,處理這些共通問題。
42.請簡介下Android中常用的)五種布局。
FrameLayout(框架布局),LinearLayout(線性布局),AbsoluteLayout(絕
對布局),RelativeLayout(相對布局),TabieLayout(表格布局)
43.請簡介下Android的數據存儲方式。
一.SharedPreferences方式
二.文獻存儲方式
三.SQLite數據庫方式
四.內容提供器(Contentprovider)方式
五.網絡存儲方式
44.請簡介下ContemProvider是怎樣實現數據共享的I。
創立一種屬于你自己的Contentprovider或者將你的數據添加到一種已經存在
Contentprovider中,前提是有相似數據類型并且有寫入Contentprovider
的權限。
45.怎樣啟用Service,怎樣停用Service。
Android中的)service類似于windows中歐|service,service一般沒有顧客操
作界面,它運行于系統中不輕易被顧客發現,
可以使用它開發如監控之類日勺程序。
一。環節
第一步:繼承Service類
publicclassSMSServiceextendsService{j
第二步:在AndroidManifest.xml文獻中聆Kapp.ication>節點里對服務進行配
置:
<serviceandroid:nane=〃.DemoService”/>
二。Context.startServiceOfllContext.bindService
服務不能自己運行,需要通過調用Context.startService()或
Context.bindService:)措施啟動服務。這兩個措施都可
以啟動Service,不過它們日勺使用場所有所不一樣。
1.使用startServiceO措施啟用服務,調用者與服務之間沒有關連,雖然調用
者退出了,服務仍然運行。
使用bindService。措施啟用服務,調用者與服務綁定在了一起,調用者一旦退
出,服務也就終止。
2.采用Context.startService()措施啟動服務,在服務未被創立時,系統會先
調用服務的onCreateO措施,
接著調用onStartO措施。假如調用startService()措施前服務已經被創立,多
次調用startService()措施并
不會導致多次創立服務,但會導致多次調用onStartO措施。
采用startService()措施啟動的服務,只能調用Context.stopService()措施結
束服務,服務結束時會調用
onDcstroy()措施。
3.采用Context.bindServiceO措施啟動服務,在服務未被創立時,系統會先調
用服務日勺onCreateO措施,
接著調用。nBindO措施。這個時候調用者和服務綁定在一起,調用者退出了,
系統就會先調用服務的onllnbindO措施,
。接著調用onDestroyO措施。假如調用bindServiceO措施前服務已經被綁定,
多次調用bindServiceO措施并不會
導致多次創立服務及綁定(也就是說onCreate()和onBind。措施并不會被多次
調用)。假如調用者但愿與正在綁定的服務
解除綁定,可以調用unbindScrviccO措施,調用該措施也會導致系統調用服務
的IonUnbind()—>onDestroy()措施。
三。Service日勺生命周期
1.Service常用生命周期回調措施如下:
onCreateO該措施在服務被創立時調用,該措施只會被調用一次,無論調用多
少次startService()或bindService()措施,
服務也只被創立一次。onDestroyO該措施在服務被終止時調用。
2.Context.starlSericeO啟動Service有關的生命周期措施
onStart()只有采用Context.startScrvicc()措施啟動服務時才會回調該措
施。該措施在服務開始運行時被調用。
多次調用startService()措施盡管不會多次創立服務,但onStart。措施會被
多次調用。
3.Context.bindServ:ce()啟動Service有關的生命周期措施
onBindO只有采用Context.bindServiceO措施后動服務時才會回調該措施。該
措施在調用者與服務綁定期被調用,
當調用者與服務已經綁定,多次調用Context.bindServiceO措施并不會導致該
措施被多次調用。
onUnbindO只有采用Context.bindScrvic。()措施啟動服務時才會回調該措施。
該措施在調用者與服務解除綁定期被調用。
備注:
1.采用startService()啟動服務
Intentintent=newIntent(DemoActivity,this,DemoService.class);
startService(intent);
2.Context.bindService()啟動
Intentintent=newIntent(DemoActivity,this,DemoService,class);
bindService(intent,conn,Context.BINDAUTOCREATE);
//unbindService(conn);〃解除綁定
46.注冊廣播有幾種方式,這些方式有何優缺陷?請談談Android引入廣播機制
的用意。
Android廣播機制(兩種注冊措施)
在android下,要想接受廣播信息,那么這個廣播接受器就得我們自己來實現了,
我們可以繼承BroadcastRecciver,就可以有一種廣播接受器了。有個接受器還
不夠,我們還得重寫BroadcastReceiver里面的)onReceiver措施,當來廣潘的)
時候我們要干什么,這就要我們自己來實現,不過我們可以搞一種信息防火墻。
詳細的I代碼:
publicclassSmsBroadCastRocoiverextendsBroadcastRcceivcr
?Override
publicvoidonReceive(Contextcontext,Intentintent)
Bundlebundle=intent.getExtrasO:
Object[]object=(Object[])bundle.get(^pdus^);
SmsMessagesms口二newSmsMessage[object,length];
for(inti=0:i<object.length;i++)
sms[0]=SmsMessage.createFromPdu((byte[])object[i]);
Toast.makeText(context,〃來自
/z+sms[i].getDisplayOriginatingAddress()+〃H勺消息是:
*+sms[i].getDisplayMessageBody(),Toast.LENGT1I_S1IORT).show();
〃終止廣播,在這里我們可以稍微處理,根據顧客輸入的號碼可以實現
短信防火墻。
abortBroadcast();
)
)
當實現了廣播接受器,還要設置廣播接受器接受廣播信息的類型,這里是信息:
vider.Telephony.SMSRECEIVED
我們就可以把廣播接受器注冊到系統里面,可以讓系統懂得我們有個廣播接受
器。這里有兩種,一種是代碼動態注冊:
〃生成廣播處理
smsBroadCastReceiver=newSmsBroadCastReceiver();
〃實例化過濾器并設置要過濾的廣播
TntentFilterintentFilter=new
IntentFiIter(''android,provider.Telephony.SMSRECEIVED");
〃注冊廣播
BroadcastReceiverActivity.this.registerReceiver(smsBroadCastReceiver,
intentFilter);
—*種是在AndroidManifest,xml中配置廣播
<?xmlversion=0"encoding="utf-8”?>
<manifestxmlns:android二〃〃
package="spl.broadcastReceiver”
androidiversionCode=〃1〃
android:versionName=/,1.0”>
<applicationandroid:icon=〃@drawable/icon〃
android:label=z,@string/app_name,,>
<activityandroid:name=,/.BroadcastReceiverActivity
android:label=,,@string/appname〃>
<intent-filter>
<actionandroid:name=,,android.intent,action.MAIN'"/>
<category
android:name=〃android,intent,category.LAUNCHER/,/>
</intent-filter>
</activity>
<!一廣播注冊一》
<receiverandroid:name=,/.SmsBroaclCastReceiver'^
<intent-filterandroid:priority=〃20〃>
<action
android:name=〃android,provider.Telephony.SMSRECEIVED”/)
</intent-filter>
</receiver>
</application>
<uses-sdkandroid:minSdkVersion=,,7,z/>
<!—權限申請一》
<uses-permission
android:name="android,permission.RECEIVESMSZ,></uses-permission>
</manifest>
兩種注冊類型的區別是:
1)第一種不是常駐型廣播,也就是說廣播跟隨程序的生命周期。
2)第二種是常駐型,也就是說當應用程序關閉后,假如有信息廣播來,程
序也會被系統調用自動運行。
47.請解釋下在單線程模型中Message、Handler、MessageQueuesLooper之間
的關系。
Handler簡介:
一,種Handler容許你發送和處理Message和Runable對象,這些對象和一種線程
的MessageQueue有關聯。每一種線程實例和一種單獨日勺線程以及該線程時
MessageQuoue有關聯°當你創立一種新的JHandler時,它就和創立它日勺線程綁
定在一起了。這里,線程我們也可以理解為線程H勺MessageQueue。從這一點上
來看,Handler把Message和Runable對象傳遞給MessageQueue,并且在這些對
象離開MessageQueue時,Handler負責執行他們。
Handler有兩個重要的用途:(1)確定在未來的其個時間點執行一種或者某些
Message和Runnable對象。(2)在其他線程(不是Handler綁定線程)中排入
某些要執行的動作。
SchedulingMessage,即(1),可以通過如下措施完畢:
post(Runnable):Runnable在handler綁定日勺線程上執行,也就是說不創立新線
程。
postAtTime(Runnable,long):
postDelayed(Runnable,long):
sendEmpt^^Message(int):
sendMessage(Message;:
sendMessageAtTime(Message,long):
sendMessageDelayed(Message,long):
post這個動作讓你把Runnable對象排入MessageQueue,MessageQueue受到這些
消息的時候執行他們,當然以一定的I排序。sendMessage這個動作容許你把
Message對象排成隊列,這些Message對象包括其些信息,Hand1er的I
hanlerMessage(Message)會處理這些Message.當然,handlerMessage(Message)
必須由Handler的子類來重寫。這是編程人員需要作的事。
當posting或者sending到一種Hanler時,你可以有三種行為:當MessageQueue
準備好就處理,定義一種延遲時間,定義一種精確的時間去處理。后兩者容許你
實現timeout,tick,和基于時間的)行為。
當你的應用創立一種新口勺進程時,主線程(也就是UI線程)自帶一種
MessageQueue,這個MessageQueue管理頂層H勺應用對象(像
activities,broadcastreceivers等)和主線程創立的I窗體。你可以創立自己
時線程,并通過一種Handler和主線程進行通信。這和之前同樣,通過post和
sendmessage來完畢,差異在于在哪一種線程中執行這樣措施。在恰當日勺時候,
給定歐IRunnable和Message將在Handler日勺MessageQueue中被Scheduledo
Message簡介:
Message類就是定義了一種信息,這個信息中包括一種描述符和任意的數據對
象,這個信息被用來傳遞給Handler.Message對象提供額外的兩個int域和一種
Object域,這可以讓你在大多數狀況下不用作分派的動作。
盡管Message歐I構造函數是public的),不過獲取Message實例的I最佳措施是調
用Message.obtainO,或者Handler.obtainMessage()措施,這些措施會從回收
對象池中獲取一種。
MessageQueue簡介:
這是一種包括message列表日勺底層類。Looper負責分發這些message。Messages
并不是直接加到一種MessageQueue中,而是通過MessageQueue.TdleHandler
關聯到Loopero
你可以通過Looper.myQucuc()從目前線程中獲取MessageQueue。
Looper簡介:
Looper類被用來執行一種線程中日勺message循環。默認狀況,沒有一種消息循
環關聯到線程。在線程中調用prepare。創立一種Looper,然后用loop。夾處
理messages,直到循環終止。
大多數和messageloop口勺交互是通過Handler0
下面是一種經典的帶有Looper的線程實現。
classLooperThreadextendsThread{
publicHandlermllandler;
publicvoidrun(){
Looper,prepare();
mHandler=newHandler(){
publicvoidhandleMessage(Messagemsg){
//processincomingmessageshere
)
};
Looper.loop();
}
)
48.AIDL的全稱是什么?怎樣工作?能處理哪些類型的數據?
AIDL/、J英文全稱是AndroidInterfaceDefineLanguage
當A進程要去調用B進程中H勺service時;并實現通信,我們一般都是通過AIDL
來操作日勺
A工程:
首先我們在net.blogjava,mobile,aidlservice包中創立一種
RemoteService.aidl文獻,在里面我們自定義一種接口,具有措施get。ADT插
件會在gen目錄下自動生成一種RemoteService.java文獻,該類中具有一種名
為RemoteService.stub的內部類,該內部類中具有aidl文獻接口的Iget措施。
闡明一:aidl文獻的位置不固定,可以任意
然后定義自己的MyService類,在MyService類中自定義一種內部類去繼承
RemoteService.stub這個內部類,實現get措施。在onBind措施中返回這個內
部類的對象,系統會自動將這個對象封裝成【Binder對象,傳遞給他的調用者。
另一方面需要在AndroidManifest.xml文獻中配置MyService類,代碼如卜:
。一注冊服務一>
<serviceandroid:nane=,/.MyService”〉
<intent-filter>
<!—指定調用AIDL服務的ID—>
<action
android:name="net.bogjava.mobile.aidlservice.RemoteService'/>
</intent-filter>
</service>
為何要指定調用AIDL服務的ID,就是要告訴外界MyService這個類可以被別的
進程訪問,只要別的進程懂得這個ID,正是有了這個ID,B工程才能找到A工程
實現通信。
闡明:AIDL并不需要權限
B工程:
首先我們要將A工程中生成日勺RemoteService.java文獻拷貝到B工程中,
在bindService措施中綁定aidl服務
綁定AIDL服務就是將RemoteServiceH勺1D作為intent代Jaction參數。
闡明:假如我們單獨將RemoteService.aidl文獻放在一種包里,那個在
我們將gen目錄下口勺該包拷貝到B工程中。假如我們將RemoteService.aidl文
獻和我們的其他類寄存在一起,那么我們在B工程中就要建立對應口勺包,以保證
RmoteScrvicc.java文獻的)報名對H'、J,我們不能修改RemoteService.java文獻
bindService(new
Inten("net.blogjava,mobile,aidlservice.RemoteService'"),
serviceConnection,Context.BIND_AUTO_CREATE);
ServiceConnection日勺onServiceConnected(ComponentNamename,
IBinderservice)措施中的service參數就是A工程中MyService類中繼承了
RemoteService.stub類日勺內部類H勺對象。
49.請解釋下Android程序運行時權限與文獻系統權限的區別。
運行時權限Dalvik(android授權)
文獻系統linux內核授權
50.系統上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請闡明原由。
通過直接發送Uri把參數帶過去,或者通過manifest里歐Iintentfilter里日勺
data屬性
51.你怎樣評價Android系統?優缺陷。
答:Android平臺5大優勢:
一、開放性
在優勢方面,Android平臺首先就是其開發性,開發的平臺容許任何移動終端廠
商加入到Android聯盟中來。明顯日勺開放性可以使其擁有更多的開發者,伴隨顧
客和應用的日益豐富,一種嶄新日勺平臺也將很快走向成熟。開放性對于Android
的發展而言,有助于積累人氣,這里日勺人氣包括消費者和廠商,而對于消費者來
講,隨大的受益正是豐富的軟件資源。開放的平臺也會帶來更大競爭,如此一來,
消費者將可以用更低的價位購得心儀的o
二、掙脫運行商的束縛
在過去很長H勺一段時間,尤其是在歐美地區,應用往往受到運行商制約,使
用什么功能接入什么網絡,幾乎都受到運行商的控制。從去年iPhone上市,
顧客可以愈加以便地連接網絡,運行商口勺制約減少。伴隨EDGE、HSDPA這些2G
至3G移動網絡的逐漸過渡和提高,隨意接入網絡已不是運行商口中的笑談,
當你可以通過IM軟件以便地進行即時聊天時,再回憶很快前天價的彩信和圖
鈴下載業務,是不是像惡夢同樣?互聯網巨頭Google推進日勺Android終端天生
就有網絡特色,將讓顧客離互聯網更近。
三、豐富的硬件選擇
這一點還是與Android平臺日勺開放性有關,由于Android的開放性,眾多的廠商
會推出千奇百怪,功能特色各具的多種產品。功能上H勺差異和特色,卻不會影響
到數據同步、甚至軟件日勺兼容,好比你從諾基亞Symbian風格一下改月蘋
果iPhone,同步還互將Symbian中優秀的軟件帶到iPhone上使用、聯絡人等
資料更是可以以便地轉移,是不是非常以便呢?
四、不受任何限制的開發商
Android平臺提供應第三方開發商一種十分寬泛、自由的環境,不會受到多種條
條框框日勺阻擾,可想而知,會有多少新奇別致的軟件會誕生。但也有其兩面性,
血腥、暴力、情色方面日勺程序和游戲如可控制正是留給Android難題之一。
五、無縫結合的IGoogle應用
如今叱詫互聯網的Google已經走過23年度歷史,從搜索巨人到全面的互聯網滲
透,Google服務如地圖、郵件、搜索等已經成為連接顧客和互聯網日勺重要紐帶,
而Android平臺將無縫結合這些優秀的Google服務。
再說Android的5大局限性:
一、安全和隱私
由于與互聯網H勺緊密聯絡,個人隱私很難得到保守。除了上網過程中經意或
不經意留下日勺個人足跡,Google這個巨人也時時站在你的身后,洞穿一切,因
此,互聯網日勺深入將會帶來新一輪日勺隱私危機。
二、首先開賣Android的不是最大運行商
眾所周知,T-Mobile在23日,于美國紐約公布了Android首款GU不過在
北美市場,最大的兩家運行商乃AT&T和Verizon,而目前所知獲得Android銷
售權的僅有T-Mobile和Sprint,其中T-Mobile的3G網絡相對于其他三家也要
遜色不少,因此,顧客可以買賬購置G1,能否體驗到最佳的3G網絡服務則要另
當別論了!
三、運行商仍然可以影響到Android
在國內市場,不少顧客對購得移動定制機不滿,感覺所購的被人涂畫了廣告
一般。這樣日勺狀況在國外市場同樣出現。Android的另一發售運行商Sprint
就將在其機型中內置其商店程序。
四、同類機型顧客減少
在不少論壇都會有針對某一型號的子論壇,對一款時使專心得交流,并分
享軟件資源。而對于Android平臺,由于廠商豐富,產品類型多樣,這樣使
用同一款機型的顧客越來越少,缺乏統一機型日勺程序強化。舉個稍顯不妥日勺例子,
目前山寨機泛濫,品種各異,就很少有專門針對某個型號山寨機日勺討論和群組,
除了哪些功能異常搶眼、頗受追捧口勺機型以外。
五、過度依賴開發商缺乏原則配置
在使用PC端股JWindowsXp系統的時候,都會內置微軟WindowsMediaPlayer
這樣一種瀏覽器程序,顧客可以選擇更多樣日勺播放器,如Realplay或暴風影音
等。但入手開始使用默認日勺程序同樣可以應付多樣的需要。在Android平臺中,
由于其開放性,軟件更多依賴第三方廠商,例如Android系統日勺SDK中就沒有內
置音樂播放器,所有依賴第三方開發,缺乏了產品的統一性。
52.什么是ANR怎樣防止它?
答:ANR:ApplicationNotResponding,五秒
在Android中,活動管理器和窗口管理器這兩個系統服務負責監視應用程序的響
應。當出現下列狀況時,Android就會顯示ANR對話框了:
對輸入事件(如按鍵、觸摸屏事件)的響應超過5秒
意向接受器(intentReceiver)超過10秒鐘仍未執行完畢
Android應用程序完全運行在一種獨立日勺線程中(例如main)o這就意味著,
任何在主線程中運行的,需要消耗大量時間日勺操作都會引起ANR。由于此時,你
的應用程序已經沒有機會去響應輸入事件和意向廣播(Intentbroadcast)0
因此,任何運行在主線程中的措施,都要盡量的只做少許的工作。尤其是活
動生命周期中的J重要措施如onCreateO和onResume()等更應如此。潛在日勺比較
耗時的操作,如訪問網絡和數據庫;或者是開銷很大的計算,例如變化位圖H勺大
小,需要在一種單獨的子線程中完畢(或者是使用異步祈求,如數據庫操作)。但
這并不意味著你日勺主線程需要進入阻塞狀態已等待子線程結束一也不需要調
用Therad.wait()或者Thread,sleep。措施。取而代之日勺是,主線程為子線程提
供一種句柄(Handler),讓子線程在即將結束的時候調用它(xing:可以參看
SnakeH勺例子,這種措施與此前我們所接觸H勺有所不一樣)。使用這種措施波及
你的應用程序,可以保證你H勺程序對輸入保持良好的響應,從而防止由于輸入事
件超過5秒鐘不被處理而產生的ANRO這種實踐需要應用到所有顯示顧客界面的
線程,由于他們都面臨著同樣的超時問題。
53.什么狀況會導致ForceClose?怎樣防止?能否捕捉導致其的異常?
答:一般像空指針啊,可以看起logcat,然后對應到程序中來處理錯誤
54.Android自身的api并未申明會拋出異常,則其在運行時有無也許拋出
runtime異常,你碰到過嗎?諾有的話會導致什么問題?怎樣處理?
55.簡要解釋一下activity、intent、intentfiltersse
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 焊接h型鋼收縮量
- 寒假生活中所了解到的公民權利和義務
- 海馬體記憶法的具體訓練方法
- 2025年鶴壁b2貨運資格證模擬考試
- 備戰2025年高考二輪復習課件(高三) 政治(廣東版)大單元突破練12 民事權利與義務
- 肝癌切除術后護理查房
- 租船居間協議合同范本
- 腰椎病人的術后護理
- 農村蓋房承攬合同范本
- 物品管理制度
- 小學學校勞動教育清單(1-6年級)
- CMG軟件STARS模塊操作手冊
- 研究生自然辯證法題庫及答案
- 施工組織機構框圖和職責分工
- β石膏粉及α高強石膏生產裝置工藝技術規程
- 05第五章 預防中心靜脈導管相關血流感染集束化護理措施和核查表
- 建設項目職業衛生三同時檔案管理
- JKW三相無功補償控制器說明書賽源電氣技術
- 印章刻制申請表、銷毀申請表
- 基于項目式學習的信息技術教學設計與實施以數據處理與應用為例
- 試驗室標準化上墻標牌
評論
0/150
提交評論