




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
...Android面試題
i.下列哪些語句關于內存回收的說明是對的的?(b)
A、程序員必須創建一個線程來釋放內存
B、內存回收程序負責釋放無用內存
C、內存回收程序允許程序員直接釋放內存
D、內存回收程序可以在指定的時間釋放內存對象
2.下面異常是屬于RuntimeException的是(abed)(多選)
A、ArithmeticExcepton
B、IllegalArgumentException
C、NullPointerException
D、BufferllnderflowException
3.”由11.1*01111(1(11.5)等于多少0小加01.「01111(1(?11.5)等于多少((0.c
A、11,-11B、11,-12C、12,-11D、12,-12
4.下列程序段的輸出結果是:(b)
voidcomplicakdexpression_r(){
intx=20,y=30;
booleanb;
b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;
System.out.println(b);
)
A、trueB、falseC、1D、Oil.activity
5.對一些資源以及狀態的操作保存,最佳是保存在生命周期的哪個函數中進行(d)
A、onPause()B、onCreate()C、onResume()D、onStart()
6.Intent傳遞數據時,下列的數據類型哪些可以被傳遞(abed)(多選)
A、SerializableB、charsequenceC、ParcelableD、Bundle
7.android中下列屬于Intent的作用的是(c)
A、實現應用程序間的數據共享
B、是一段長的生命周期,沒有用戶界面的程序,可以保持應用在后臺運營,而不會由于
切換頁面而消失
C、可以實現界面間的切換,可以包含動作和動作數據,連接四大組件的紐帶
D、解決一個應用程序整體性的工作
8.下列屬于SAX解析xml文獻的優點的是(b)
A、》等整個文檔樹在內存中,便于操作,支持刪除,修改,重新排列等多種功能
B、不用事先調入整個文檔,占用資源少
C、整個文檔調入內存,浪費時間和空間
D、不是長期駐留在內存,數據不是持久的,事件過后,若沒有保存數據,數據就會
消失
9.下面的對自定style的方式對的的是(a)
A、<resources>
<stylename="myStyle">
<itemname="android:layout_width">fill_parent</item>
</style>
</resourccs>
B、<stylename="myStyle">
<itemname="android:layout_wid(hn>fill_parent</item>
</style>
C、<resources>
<itemname="android:layout_width">fill_parent</item>
</resources>
D、<resources>
<stylename="android:layout_widtli">fill_parent</style>
</resources>
A、SALES表中qty列最小值大于等于30
B、SALES表中qty列最小值大于等于40
C、SALES表中qty列的數據所有為50
D、SALES表中q【y列最小值大于等于60
13.在android中使用SQLiteOpenHelper這個輔助類時,可以生成一個數據庫,并可以
對數據庫版本進行管理的方法可以是(ab)
A、getWriteableDaubase()
B、getReadablcDatabaseO
C、getDatabase()
D、gctAblcDatabasc()
14.android關于service生命周期的onCreate。和onStart。說法對的的是(ad)(多選題)
A、當第一次啟動的時候先后調用onCrcatc。和onStart()方法
B、當第一次啟動的時候只會調用onCrcatc()方法
C、假如service已經啟動,將先后調用onCreate。和onStart。方法
D、假如service已經啟動,只會執行onStart。方法,不在執行onCreate。方法
15.下面是屬于GLSurFaccView特性的是(abc)侈選)
A、管理一個surface,這個surface就是一塊特殊的內存,能直接排版到android的視圖
view上。
B、管理一個EGLdisplay,它能讓opengl把內容渲染到上述的surface上。
C、讓渲染器在獨立的線程里運作,和UI線程分離。
D、可以直接從內存或者DMA等硬件接口取得圖像數據
16.下面在AndroidManifest.xml文獻中注冊BroadcastReceiver方式對的的(a)
A、<receiverandroid:name="NewBroad">
<intent-filter>
<action
android:name="vider.action.NewFirocid"l>
<action>
</intcnt-filtcr>
</receiver>
B、<receiverandroicl:name="NewBroad
<intcnt-filtci>
android:name="videnact:on.Ne\\Broad"/>
</intent-filter>
</receiver>
C、<receiverandroid:name="NewBroad">
<action
android:nnme="videnaction.NewBr()ad,'l>
<aclion>
</receiver>
D、<inlent-filter>
<rcccivcrandroid:namc="NewBroad'^
<ac(ion>
android:name="videnaction.NewBroad"/>
<ac(ion>
</receiver>
</intcnt-filtcr>
17.關于ContenValues類說法對的的是(a)
A、他?口Hashtable版交類似,也是負責存儲一些名值對,但是他存儲的名值對當中的
名是String類型,而值都是基本類型
B、他和Hashtable必交類似,也是負責存儲一些名值對,但是他存儲的名值對當中的
名是任意類型,而值都是基本類型
C、港口Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中的
名,可認為空,而值都是String類型
D、港口Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中
的名是String類型,而值也是String類型
18.我們都知道Hanlder是線程與Activity通信的橋梁,假如線程解決不妥,你的機器就會
變得越慢,那么線程銷毀的方法是(a)
A、onDestroy()
B、onClear()
C、onFinish()
D、onStop()
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應用程序都在它自己的進程中運營,不一定
擁有一個獨立的Dalvik虛擬機實例.而每一個DVM都是在Linux中的一個進程、所以說可以認
為是同一個概念.
B、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運營,不一
定擁有一個獨立的Dalvik虛擬機實例.而每一個DVM不一定都是在Linux中的一個進程.所以
說不是一個概念.
C、DVM指dalivk的虛擬機.每fAndroid應用程序都在它自己的進程中運營.都擁
有一個獨立的Dalvik虛擬機實例.而每一個DVM不一定都是在Linux中的一個進程,所以說不
是一個概念.
D、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運營,都擁
有一個獨立的Dalvik虛擬機實例.而每一個DVM都是在Linux中的一個進程,所以說可以認為
是同一個概念.
22.Android項目工程下面的assets目錄的作用是什么b
A、放置應用到的圖片資源。
B、重要放置多媒體等數據文獻
C、放置字符串,顏色,數組等常量數據
D、放置一些與UI相應的布局文獻,都是xml文獻
23.關于res/raw目錄說法對的的是(a)
A、這里的文獻是原封不動的存儲到設備上不會轉換為二進制的格式
B、這里的文獻是原封不動的存儲到設備上會轉換為二進制的格式
C、這里的文獻最終以二進制的格式存儲到指定的包中
D、這里的文獻最終不會以二進制的格式存儲到指定的包中
24.下列對androidNDK的理解對的的是(abed)
A、NDK是一系列工具的集合
B、NDK提供了一份穩定、功能有限的API頭文獻聲明。
C、使"Java+C"的開發方式終于轉正,成為官方支持的開發方式
D、NDK將是Android平臺支持C開發的開端
二.填空題
25.android中常用的四個布局是framlayoutJinenarlayout1relativelayout和tablelavout。
26.android的四大組件是activiev,service,broadcast和coiitentprovide。
27.java.io包中的obiectinputstream和obiectoutuutslream類重要用于對對象(Object)的
讀寫。
28.android中service的實現方法是:startservicebindserviceo
29.activity一般會重載7個方法用來維護其生命周期,除了
onCreate(),onStart().onDestore()外尚有onrestart,onresume,onpause,onstopo
30.android的數據存儲的方式sharedpreference.文獻,0。1讓?£。111?1】1。1*。¥1(101\網絡>>
31.當啟動一個Activity并且新的Activity執行完后需要返回到啟動它的Activity來執行的
回調函數是startActivityResult()。
32.請使用命令行的方式創建一個名字為myAvd,sdk版本為2.2,sd卡是在d盤的根目錄下.
名字為scard.img,并指定屏幕大小HVGA.
33.程序運營的結果是:—R(”)dandqbc___________。
publicclassExample{
Stringstr=newString("good");
char[]ch=1a,,'b,,,c,);
publicstaticvoidmain(Stringargs[])(
Exampleex=newExample();
ex.change(9x.str,ex.ch);
System.out.print(ex.str+*and");
Sytem.out.print(ex.ch);
)
publicvoidchange(Stringstr,charch[])[
str="lestok〃;
ch[0]=g*;
)
)
34.在android中,請簡述jni的調用過程。(8分)
1)安裝和下載Cygwin,下載AndroidNDK
2)在ndk項目中JNI接口的設計
3)使用C/C++實現本地方法
4)JNI生成動態鏈接庫.so文獻
5)將動態鏈接庫復制到java工程,在java工程中調用,運營java工程即可
35.簡述Android應用程序結構是哪些?(7分)
Android應用程序結構是:
LinuxKemel(Linux內核)、Libraries(系統運營庫或者是c/c++核心庫)、Application
Framework(開發框架包I、Applications(核心應用程序)
36.請繼承SQLiteOpenHdper實現:(10分)
I).創建一個版本為1的"diaryOpenHelper.db"的數據庫,
2).同時創建一個"diary"表(包含一個」d主鍵并自增長,topic字符型100
長度,content字符型1000長度)
3).在數據庫版本變化時請刪除diary表,并重新創建出diary表。
publicclassDBHelperextendsSQLiteOpenHelper{
publicfinalstaticStringDATABASENAME="diaryOpenHelper.db";
publicfinalstaticintDATABASEVERSION=1;
//創建數據庫
publicDBHclpcr(Contcxtcontcxt,Stringnamc,CursorFactoryfactory,intversion)
(
supcr(contcxt,name,factory,version);
)
〃創建表等機構性文獻
publicvoidonCreate(SQLiteDatabasedb)
(
Stringsql="create(ablediary"+
"("+
“_idintegerprimarykeyauloincren]ent,"+
"topicvarchar(100),u+
"contentvarchar(1000)"+
db.execSQL(sql);
}
〃’若數據庫版本有更新,則調用此方法
publicvoidonUpgradc(SQLitcDatabascdbJntoldVcrsionJiitncwVcrsion)
(
Siringsql="droptableifexistsdiary";
db.execSQL(sql);
this.onCreate(db):
37.頁面上現有ProgressBar控件progressBar,清用書寫線程以10秒的的時間完畢其迸度
顯示工作。(10分)
答案
publicclassProgressBarStuextendsActivity{
privateProgressBarprogressBar=null;
protectedvoidonCreate(BundlesavedlnstanceS(ate){
supcr.onCrcatc(savcdlnstanccStcitc);
setContentView(R.gressbar);
〃從這到下是關鍵
progressBar=(ProgressBar)findViewByI(.l(R.gressBar);
Threadthread=newThrcad(ncwRunnablc(){
?Override
publicvoidrun。{
intprogressBarMax=progressBar.getMax();
try{
while(progressBarMax!=progressBar.geiProgress())
{
intstepProgress=progressBarMax/10;
intcurrenlprogress=progressBar.getProgressO;
progressBar.setProgress(cuiTentprogress+stepProgress);
Thread.sleep(IOOO);
I
}catch(InterruptedExceplione){
//TODOAuto-gcncratcdcatchblock
e.printS(ackTrace();
I);
thrcad.start();
//關鍵結束
38.請描述下Activity的生命周期。
必調用的三個方法:onCrcate()—>onStart()—>onRcsume(),用AAA表達
(1)父Activity啟動子Activity,子Actvity退出,父Activity調用順序如下
AAA—>onFreeze()—>onPause()—>onStopO-->onRestart()—>onStart(),onResume()...
(2)用戶點擊Home,Actvity調用順序如下
AAA->onFreeze()—>onPause()—>onStopO-Maybe->onDestroyO-Maybe
(3)調用tlnish(),Activity調用順序如下
AAA->onPause()->onStopO->onDestroyO
(4)在Activity上顯示dialog,Activity調用順序如下
AAA
(5)在父Activity上顯示透明的或非全屏的activity,Activity調用順序如下
AAA->onFreezeO->onPause()
(6)設備進入睡眠狀態,Activity調用順序如下
AAA->onFreezeO->onPause()
39.假如后臺的Activity由于某因素被系統回收了,如何在被系統回收之前保存當前狀
態?
onSavelnstanceStateO
當你的程序中某一個ActivityA在運營時,積極或被動地運營另一個新的ActivityB,這
個時候A會執行onSaveIns(anceState()oB完畢以后又會來找A,這個時候就有兩種情況:
一是A被回收,二是A沒有被回收,被回收的A就要重新調用onCreale()方法,不同于直
接啟動的是這回onCreale()里是帶上了參數savedlnslanceSlale;而沒被收回的就直接執行
onResume(),onCreaie()T.>
40.如何將一個Activity設立成窗口的樣式。
在AndroidManifest.xml中定義Activity的地方一句話
android:(heme="@android:style/Theme.Dialog"^
android:【hen】e="@android:slyle/Theme.Translucent”就變成半透明的
41.如何退出Activity?如何安全退出已調用多個Activity的Application?
對于單一Activity的應用來說,退出很簡樸,直接finish。即可。
當然,也可以用killProcess。和Syslem.exil。這樣的方法。
但是,對于多Activity的應用來說,在打開多個Activity后,假如想在最后打開的Activity
直接退出,上邊的方法都是沒有用的,由于上邊的方法都是結束一個Activity而已。
當然,網上也有人說可以。
就仿佛有人問,在應用里婦何捕獲Home鍵,有人就會說用keyCode比較KEYCODE_HOME
即可,而事實上假如不修改framework,主線不也許做到這一點同樣.
所以,最佳還是自己親自試一下。
那么,有沒有辦法直接退出整個應用呢?
在2.1之前,可以使用ActivityManager的restartPackage方法。
它可以直接結束整個應用。在使用時需要權限andioid.permission.RESTART_PACKAGESo
注意不要被它的名字迷惑.
可是,在2.2,這個方法失效了。
在2.2添加了一個新的方法,killBackgroundProcessesO,需要權限
android.permission.KILL_BACKGROUND_PROCESSESo
可惜的是,它和2.2的restartPackage同樣,主線起不到應有的效果。
此外尚有一個方法,就是系統自帶的應用程序管理里,強制結束程序的方法,
forceSlopPackage()o
它需SKI?android.permission.FORCE_STOP_PACKAGESo
并且需要添加android:sharcdUserId="android.uid.system”屬性
同樣可惜的是,該方法是非公開的,他只能運營在系統進程,第三方程序無法調用。
由于需要在Android.mk中添加LOCAL_CERTIFICATE:=plaiformo
而Android.mk是用于在Android源碼下編譯程序用的。
從以上可以看出,在2.2,沒有辦法直接結束一個應用,而只能用自己的辦法間接辦到。
現提供幾個方法,供參考:
1、拋異常強制退出:
該方法通過拋異常,使程序ForceClose。
驗證可以,但是,需要解決的問題是,如何使程序結束掉,而不彈出ForceClose的窗口。
2、記錄打開的Activity:
每打開一個Activity,就記錄下來。在需要退出時,關閉每一個Activity即可。
3、發送特定廣播:
在需要結束應用時,發送一個特定的廣播,每個Activity收到廣播后,關閉即可。
4、遞歸退出
在打開新的Activity時使用startActivityForResult,然后自己加標志,在onActivityRcsult中
解決,遞歸關閉。
除了第一個,都是想辦法把每一個Activity都結束掉,間接達成目的。
但是這樣做同樣不完美。
你會發現,假如自己的應用程序對每一個Activity都設立了noscnsor,在兩個Activity結束
的間隙,sensor也許有效了。
但至少,我們的目的達成了,并且沒有影響用戶使用。
為了編程方便,最佳定義一個Activity基類,解決這些共通問題。
42.請介紹下Android中常用的五種布局。
FrameLayout(框架布局),LinearLayout(線性布局),AbsoluteLayout(絕對布局),
RelaliveLayout(相對布局),TableLayout(表格布局)
43.請介紹下Android穗據存儲方式。
一.SharedPreferences方式
二.文獻存儲方式
三.SQLite數據庫方式
四.內容提供器(Contentprovider)方式
五.網絡存儲方式
44.請介紹下ContentProvidcr是如何實現數據共享的。
創建一個屬于你自己的Contentprovider或者將你的數據添加到一個已經存在的Content
provider中,前提是有相同數據類型并且有寫入Contentprovider的權限。
45.如何啟用Service,如何停用Service。
Android中的service類似丁windows中的service,service一般沒有用戶操作界面,它運營
于系統中不容易被用戶發現,
可以使用它開發如監控之類的程序。
一。環節
第一步:繼承Service類
publicclassSMSSeniceextendsService{}
第二步:在AndroidManifcst.xmi文獻中的〈application〉節點里對服務進行配置:
〈serviceandroid:name=".DemoService”/>
二。Context.startServiceOfQContext.bindService
服務不能自己運營,需要通過調用ContexLstarlService?;駽ornexi.bindServiceO方法啟動服
務。這兩個方法都可
以啟動Service,但是它優的使用場合有所不同。
I.使用starlServiceO方法啟用服務,調用者與服務之間沒有關連,即使調用者退出了,服務
仍然運營。
使用bindScrviccO方法啟用服務,調用者與服務綁定在了一起,調用者一旦退出,服務也就
終止。
2.采用Context.startServicef)方法啟動服務,在服務未被創建時,系統會先調用服務的
onCreate()方法,
接著調用onSlart。方法。假如調用startService。方法前服務已經被創建多次調用startService()
方法并
不會導致多次創建服務,但會導致多次調用onSlartO方法。
采用startService。方法啟動的服務,只能調用Context.stopService。方法結束服務,服務結束
時會調用
onDestroy。方法。
3.采用Contcxt.bindScrvicc()方法啟動服務,在服務未被創建時,系統會先調用服務的
onCreate()方法,
接著調用onBind。方法。這個時候調用者和服務綁定在一起,調用者退出了,系統就會先調
用服務的onUnbind。方法,
。接著調用onDeslroy。方法。假如調用bindService。方法前服務已經被綁定,多次調用
bindService。方法并不會
導致多次創建服務及綁定〔也就是說onCreateO和onBind()方法并不會被多次調用)。假如調用
者希望與正在綁定的服務
解除綁定,可以調用unbindService。方法,調用該方法也會導致系統調用服務的
onUnbind()-->onDeslroy()方法。
三。Service的生命周期
1.Service常用生命周期回凋方法如下:
onCreateO該方法在服務被創建時調用,該方法只會被調用一次,無論調用多少次
startService()a)6bindService。方法,
服務也只被創建一次。onDestroyO該方法在服務被終止時調用。
2.Context.startService。啟動Service有關的生命周期方法
onStart()只有采用Contcxt.startScrvicc。方法啟動服務時才會回調該方法。該方法在服務開
始運營時被調用。
多次調用sianService()方法盡管不會多次創建服務,但onSian。方法會被多次調用。
3.Context.bindService。啟動Service有關的生命周期方法
onBind。只有采用Context.bindScrvicc。方法啟動服務時才會回調該方法。該方法在調用者與
服務綁定期被調用,
當調用者與服務已經綁定,多次調用Context.bindService。方法并不會導致該方法被多次調
用。
onUnbind。只有采用Conlexl.bindService。方法啟動服務時才會回調該方法。該方法在調用者
與服務解除綁定期被調用。
備注:
1.采用startService。啟動服務
Intentintent=newIntent(DernoActivity.this,DcmoService.class);
startSeivice(intenl);
2.Context.bindService()啟動
Intentintent=newIntcnt(DcmoActivity.this,DemoService.class);
bindService(intent,conn.Context.BIND_AUTO_CREATE);
//unbindServicc(conn);/;解除綁定
46.注冊廣播有幾種方式,這些方式有何優缺陷?請談談Android引入廣播機制的用意。
Android廣播機制(兩種注冊方法)
在android下,要想接受廣播信息,那么這個廣播接受器就得我們自己來實現了,我們可以
繼承BroadcastReceiver,就可以有一個廣播接受器了。有個接受器還不夠,我們還得重寫
BroadcastReceiver里面的onReceiver方法,當來廣播的時候我們要干什么,這就要我們自己
來實現,但是我們可以搞一個信息防火墻。具體的代碼:
publicclassSmsBroadCastReceiverextendsBroadcastReceiver
(
@Overridc
publicvoidonReceive(Contextcontext,Intentintent)
(
Bundlebundle=intent.getExtras();
Object[]object=(Object[])bundle.get("pdusH);
SmsMessagesms[]=newSmsMessage[object.length];
for(inti=0;i<object.length;i++)
sms[O]=SmsMessage.createFromPdu((byte[i)object[i]);
Toast.makeText(context,"+sms[il.ge(DisplayOriginatingAddress()+"的消
息是:"+sms[i].ge(DisplayMessageBody(),Toast.LENGTH_SHORT).show();
)
〃終止廣播,在這里我們可以稍微解決,根據用戶輸入的號碼可以實現短信防火墻。
abortBroadcast();
)
)
當實現了廣播接受器,還要設立廣播接受器接受廣播信息的類型,這里是信息:
vider.Telephony.SMS_RECEIVED
我們就可以把廣播接受器注冊到系統里面,可以讓系統知道我們有個廣播接受器。這里有
兩種,一種是代碼動態注冊:
〃生成廣播解決
smsBroadCastRcccivcr=newSmsBroadCastRcccivcr();
〃實例化過濾器并設立要過濾的廣播
IntentFilterintentFilter=newIntentFilter("vider.Telephony.SMS_RECEIVED");
〃注冊廣播
BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver,intentFilter);
一種是在AndroidManifesixml中配置廣播
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android=,"
package=,,spl.hroadCastReceiver"
android:versionCode="1"
android:vcrsionNamc="1.0">
<applicalionandroid:icon="@drawable/icon"android:label="@string/app_name">
<activityandroid:name=".BroadCastReceiverActivity"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="ent.action.MAIN"/>
<categoiyandroid:name="ent.category.LAUNCHER"/>
</intcnt-filtcr>
</activity>
v!--廣播注冊-〉
<receiverandroid:name=".SmsBroadCastReceiver">
<intent-filterandroid:priority="20">
<actionandroid:name="vidcr.Tclephony.SMS_REC曰VED"/>
</intent-filter>
</recciver>
</application>
<uscs-sdkandroid:minSdkVcrsion="7"/>
<!--權限申請
<uses-permissionandroid:narne="android.permission.RECEIVE_SMS"x/uses-pennission>
</tnanifest>
兩種注冊類型的區別是:
1)第一種不是常駐型廣播,也就是說廣播跟隨程序的生命周期。
2)第二種是常駐型,也就是說當應用程序關閉后,假如有信息廣播來,程序也會被系
統調用自動運營。
47.請解釋下在單線程模型中Message、Handler、MessageQueue、Looper之間的關系。
Handler簡介:
一個Handler允許你發送和解決Message和Runable對象,這些對象和一個線程的
MessageQueue相關聯。每一個線程實例和一個單獨的線程以及該線程的MessageQueue相關
聯。當你創建一?新的Handler時,它就和創建它的線程綁定在一起了。這里,線程我們也
可以理解為線程的MessageQueue.,從這一點上來看,Handler把Message和Runable對象傳
遞給MessageQueue,并且在這些對象離開MessageQueue時,Handler負責執行他們。
Handler有兩個重要的用途:(1)擬定在將來的某個時間點執行一個或者一些Message和
Runnable對象。(2)在其他線程(不是Handler綁定線程)中排入一些要執行的動作。
SchedulingMessage,即(1),可以通過以下方法完畢:
post(Runnable):Runnable在handler綁定的線程上執行,也就是說不創建新線程。
postA(Time(Runnable,long):
postDelayed(Runnable,long):
sendEmptyMessage(int):
sendMessage(Message):
sendMcssagcAtTiinc(Messagc,long):
sendMessageDelayed(MessageJong):
post這個動作讓你把Runnable對象排入McssagcQucue,McssagcQucuc受到這些消息的時候
執行他們,當然以一定的排序。scndMcssagc這個動作允許你把Message對象排成隊列,這
些Message對象包含一些信息Handler的hanlcrMessage(Message)會解決這些Message.當然,
handlerMe#age(Mes*age)必須由Handler的子類來重寫.這是編程人員需要作的事.
當posting或者sending到一個Hanlcr時,你可以有三種行為:當McssagcQucuc準備好就解
決,定義一個延遲時間,定義一個精確的時間去解決。后兩者允許你實現timeout,tick,和基
于時間的行為。
當你的應用創建一個新的進程時,主線程(也就是UI線程)自帶一個MessageQueue,這個
McssagcQucuc管理頂層的應用對象(像activities,broadcastreceivers等)和主線程創建的窗
體。你可以創建自己的線程,并通過一個Handler和主線程進行通信。這和之前同樣,通過
post和sendmessage來完比,差別在于在哪一個線程中執行這么方法。在恰當的時候,給定
的Runnable和Message將在Handler的MessageQueue中被Scheduled。
Message簡介:
Message類就是定義了一個信息,這個信息中包含一個描述符和任意的數據對象,這個信息
被用來傳遞給Handler.Message對象提供額外的兩個int域?口一個Objecl域,這可以讓你在
大多數情況下不用作分派的動作。
盡管Message的構造函數是public的,但是獲取Message實例的最佳方法是調用
Messagc.obtain。,或者Handler.obtainMessage。方法,這些方法會從回收對象池中獲取一
MessageQueue簡介:
這是一個包含message列表的底層類。Looper負責分發這些message。Messages并不是直接
加到一個MessageQueue中,而是通過MessageQueue.IdleHandler關聯至ULooper。
你可以通過Looper.myQueue。從當前線程中獲取MessageQueue。
Looper簡介:
Looper類被用來執行一個線程中的message循環。默認情況,沒有一個消息循環關聯到線程。
在線程中調用prepare。創建一個Looper,然后用loop。來解決messages,直到循環終止。
大多數和messageloop的交互是通過Handler。
下面是一個典型的帶有Looper的線程實現。
classLoopcfl'hrcadextendsI'hrcad{
publicHandlermHandler;
publicvoidrun(){
Looper.prcparcO;
mHandler=newHandler(){
publicvoidhandleMcssage(Mcssagemsg){
//processincomingmessageshere
Looper.loopO;
1
)
48.AIDL的全稱是什么?如何工作?能解決哪些類型的數據?
AIDL的英文全稱是AndroidInterfaceDefineLanguage
當A進程要去調用B進程中的service時,并實現通信,我們通常都是通過AIDL來操作的
A工程:
一方面我們在net.blogjava.mobile.aidlservice包中創建一個RemoleService.aidl文獻,在里面
我們自定義一個接口,具有方法g%ADT插件會在gen目錄下自動生成一個
RcniotcScrvicc.java文獻,該類中具有一個名為RcmotcScrvicc.stub的內部類,該內部類中具
有aidl文獻接口的get方法。
說明一:aidl文獻的位置不固定,可以任意
然后定義自己的MyService類,在MySenice類中自定義一個內部類去繼承
RemoteService.stub這個內部類,實現get方法。在onBind方法中返回這個內部類的對象,
系統會自動將這個對象封裝成IBinder對象,傳遞給他的調用者。
另一方面需要在AndroidManifest.xml文獻中配置MySenice類,代碼如下:
<!-注冊服務->
〈serviceandroid:namc=,,.MyScrvicc">
<intent-fil(er>
指定調用AIDL服務的ID->
<actionandroid:nanie="net.blogjava.niobile.aidlservice.RemoteService"/>
</intent-filter>
</service>
為什么要指定調用AIDL服務的ID,就是要告訴外界MyService這個類可以被別的進程訪問,
只要別的進程知道這個ID,正是有了這個ID,B工程才=找到A工程實現通信。
說明:AIDL并不需要權限
B工程:
一方面我們要將A工程中生成的RemoteService.java文獻拷貝到B工程中,在
bindService方法中綁定aidl服務
綁定AIDL服務就是將RemoteService的ID作為intent的action參數。
說明:假如我們單獨將RemoteService.aidl文獻放在一個包里,那個在我們將gen目
錄下的該包拷貝到B工程中。假如我們將RcmotcScrvicc.aidl文獻和我們的其他類存放在一
起,那么我們在B工程中就要建立相應的包,以保證RmotcScrvicc.java文獻的報名對的,
我們不能修改RemoteService.java文獻
bindService(newInten("nel.blogjava.mobile.aidlseivice.RemoteService"),
serviceConnection,ContextBIND_AUTO_CREATE);
ServiceConnection09onServiceConnected(ComponentNamename,【Binderservice;方法
中的service參數就是A工程中MyService類中繼承了RemoteSeivice.stub類的內部類的對象。
49.請解釋下Android程序運營時權限與文獻系統權限的區別。
運營時權限Dalvik(android授權)
文獻系統linux內核授權
50.系統上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請說明原由。
通過直接發送Uri把參數帶過去,或者通過manifest里的intcntfiltcr里的data屬性
51.你如何評價Android系統?優缺陷.
答:Android平臺手機5大優勢:
一、開放性
在優勢方面,Android平臺一方面就是其開發性,開發的平臺允許任何J移動終端廠商加入到
Android聯盟中來。顯著的開放性可以使其擁有更多的開發者,隨著用戶和應用的日益豐富,
一個嶄新的平臺相等不久走向成熟。開放性對于Android的發展而言,有助于積累人氣,這
里的人氣涉及消費者和廠商,而對于消費者來講,隨大的受益正是豐富的軟件資源。開放的
平臺也會帶來更大競爭,如此一來,消費者將可以用更低的價位購得心儀的手機。
二、掙脫運營商的束縛
在過去很長的一段時間,特別是在歐美地區,手機應用往往受到運營商制約,使用什么功能
接入什么網絡,幾乎都受到運營商的控制。從去年iPhone上市,用戶可以更加方便地連接
網絡,運營商的制約減少。隨著EDGE、HSDPA這些2G至3G移動網絡的逐步過渡和提高,
手機隨意接入網絡已不是運營商口中的笑談,當你可以通過手機IM軟件方便地進行即時聊
天時,再回想不久前天價的彩信和圖鈴下載業務,是不是像惡夢同樣?互聯網巨頭Google
推動的Android終端天生就有網絡特色,將讓用戶離互聯網更近。
三、豐富的硬件選擇
這一點還是與Android平臺的開放性相關,由于Android的開放性,眾多的廠商會推出千奇
百怪,功能特色各具的多種產品。功能上的差異和特色,卻不會影響到數據同步、層至軟件
的兼容,好比你從諾基亞Symbian風格手機一下改用蘋果iPhone,同時還可將Symbian
中優秀的軟件帶到iPhone上使用、聯系人等資料更是可以方便地轉移,是不是非常方便呢?
四、不受任何限制的開發商
Android平臺提供應第三方開發商一個十分寬泛、自由的環境,不會受到各種條條框框的阻
擾,可想而知,會有多少新奇別致的軟件會誕生。但也有其兩面性,血腥、暴力、情色方面
的程序和游戲如可控制正是留給Android難題之一。
五、無舞結合的Google應用
如今叱詫互聯網的Google已經走過2023度歷史,從搜索巨人到全面的互聯網滲透,Google
服務如地圖、郵件、搜索等已經成為連接用戶和互聯網的重要紐帶,而Android平臺手機將
無縫結合這些優秀的Google服務。
再說Android的5大局限性:
一、安全和隱私
由于手機與互聯網的緊密聯系,個人隱私很難得到保守.除了上網過程中經意或不經意留
下的個人足跡,Google這個巨人也時時站在你的身后,洞穿一切,因此,互聯網的進/
將會帶來新一輪的隱私危機。
二、一方面開賣Android手機的不是最大運營商
眾所周知,T-Mobile在23日,于美國紐約發布了Android首款手機G1。但是在北美市場,
最大的兩家運營商乃AT&T和Verizon而目前所知取得Android手機銷售權的僅有T-Mobile
和Sprint,其中T-Mobile的3G網絡相對于其他三家也要遜色不少,因此,用戶可以買賬購
買GI,能否體驗到最佳的3G網絡服務則要另當別論了!
三、運營商仍然可以影響到Android手機
在國內市場,不少用戶對購得移動定制機不滿,感覺所購的手機被人涂畫了廣告一般。這樣
的情況在國外市場同樣出現。Android手機的另一發售運營商Sprint就將在其機型中內置其
手機商店程序。
四、同類機型用戶減少
在不少手機論壇都會有針對某一型號的子論壇,對一款手機的使專心4號交流,并分享軟件資
源。而對于Android平臺手機,由于廠商豐富,產品類型多樣,這樣使用同一款機型的用戶
越來越少,缺少統一機型的程序強化。舉個稍顯不妥的例子,現在山寨機泛濫,品種各異,
就很少有專門針對某個型號山寨機的討論?口群組,除了哪些功能異常搶眼、頗受追捧的機型
以外。
五、過度依賴開發商缺少標準配置
在使用PC端的WindowsXp系統的時候,都會內置微軟WindowsMediaPlayer這樣一瀏
覽器程序,用戶可以選擇更多樣的播放器,如Realplay或暴風影音等。但入手開始使用默
認的程序同樣可以應付多樣的需要。在Android平臺中,由于其開放性,軟件更多依賴第
三方廠商,比如Android系統的SDK中就沒有內置音樂播放器,所有依賴第三方開發,缺
少了產品的統T生。
52.什么是ANR如何避免它?
答:ANR:ApplicationNotResponding,五秒
在Android中,活動管理器和窗口管理器這兩個系統服務負責監視應用程序的響應。蘭出現
下列情況時,Android就會顯示ANR對話框了:
對輸入事件(如按鍵、觸摸屏事件)的響應超過5秒
意向接受器(intentReceiver)超過10秒鐘仍未執行完畢
Android應用程序完全運營在一個獨立的線程中(例如main)。這就意味著,任何在主線
程中運營的,需要消耗大量時間的操作都會引發ANR。由于此時,你的應用程序已經沒有
機會去響應輸入事件和意向廣播(Intentbroadcast)。
因此,任何運營在主線程中的方法,都要盡也許的只做少量的工作。特別是活動生命周
期中的重要方法如onCreate。和onResume。等更應如此。潛在的比較耗時的操作,如訪問
網絡和數據庫;或者是開銷很大的計算,比如改變位圖的大小,需要在一個單獨的子線程中
完畢(或者是使用異步請求,如數據庫操作)。但這并不意味著你的主線程需要進入阻塞狀態
已等待子線程結束-也不需要調用Therad.wait()或者Thread.sleep。方法。取而代之的是,
主線程為子線■供一個句柄(Handler),讓子線程在即將結束的時候調用它(xing:可以參看
Snake的例子,這種方法與以前我們所接觸的有所不同),使用這種方法涉及你的應用程序,
可以保證你的程序對輸入保持良好的響應從而避免由于輸入事件超過5秒鐘不被解決而產
生的ANR。這種實踐需要應用到所有顯示用戶界面的線程,由于他們都面臨著同樣的超時
問題。
53.什么情況會導致ForceClose?如何避免?能否捕獲導致其的異常?
答:一般像空指針啊,可以看起logcat,然后相應到程序中來解決錯誤
54.Android自身的api并未聲明會拋出異常,則其在運營時有無也許拋出runtime異常,
你碰到過嗎?諾有的話會導致什么問題?如何解決?
55.簡要解釋一下activity、
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 特色餐飲店加盟服務合同范本
- 2025至2030年中國頸椎牽引治療枕市場分析及競爭策略研究報告
- 2025至2030年中國夾鋼絲石棉布市場分析及競爭策略研究報告
- 2025至2030年中國針織棉布市場分析及競爭策略研究報告
- 2025年學校重大事項請示報告制度與民主管理
- 學校戶外生活活動方案
- 孝為先活動方案
- 學校雙優化具體活動方案
- 學期升旗活動方案
- 網絡輿情監控管理制度
- 2024-2025學年人教版(2024)初中英語七年級下冊教學工作總結(共4套)
- Unit 1 Happy Holiday 第5課時(Section B 2a-3c) 2025-2026學年人教版英語八年級下冊
- 機器試用擔保協議書范本
- 小學生預防拐騙教育課件
- 醫學影像分析-洞察及研究
- 2025至2030中國無線通訊檢測行業市場發展分析及競爭格局與投資機會報告
- 2025年廣東高考物理試卷真題及答案詳解(精校打印版)
- 2025年上海徐匯區高一(下)信息技術合格考試題及答案
- 2025至2030年中國鐵電存儲器行業市場深度評估及投資機會預測報告
- 國家開放大學《理工英語1》期末機考題庫
評論
0/150
提交評論