安卓常見面試題1_第1頁
安卓常見面試題1_第2頁
安卓常見面試題1_第3頁
安卓常見面試題1_第4頁
安卓常見面試題1_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Android面試題1. 下列哪些語句關于內存回收的說明是正確的? (b ) A、 程序員必須創(chuàng)建一個線程來釋放內存 B、 內存回收程序負責釋放無用內存 C、 內存回收程序允許程序員直接釋放內存 D、 內存回收程序可以在指定的時間釋放內存對象 2. 下面異常是屬于Runtime Exception 的是(abcd)(多選) A、ArithmeticException B、IllegalArgumentException C、NullPointerException D、BufferUnderflowException 3. Math.round(11.5)等于多少(). Math.round(

2、-11.5)等于多少(c). c A、11 ,-11 B、11 ,-12 C、12 ,-11 D、12 ,-124. 下列程序段的輸出結果是:(b ) void complicatedexpression_r() int x=20, y=30; boolean b; b=x>50&&y>60|x>50&&y<-60|x<-50&&y>60|x<-50&&y<-60; System.out.println(b); A、true B、false C、1 D、05. 對一些資源以

3、及狀態(tài)的操作保存,最好是保存在生命周期的哪個函數(shù)中進行(d) A、onPause() B、onCreate() C、 onResume() D、onStart()6. Intent傳遞數(shù)據(jù)時,下列的數(shù)據(jù)類型哪些可以被傳遞(abcd)(多選) A、Serializable B、charsequence C、Parcelable D、Bundle7. android 中下列屬于Intent的作用的是(c) A、實現(xiàn)應用程序間的數(shù)據(jù)共享 B、是一段長的生命周期,沒有用戶界面的程序,可以保持應用在后臺運行,而不會因為切換頁面而消失 C、可以實現(xiàn)界面間的切換,可以包含動作和動作數(shù)據(jù),連接四大組件的紐帶

4、D、處理一個應用程序整體性的工作8. 下列屬于SAX解析xml文件的優(yōu)點的是(b) A、將整個文檔樹在內存中,便于操作,支持刪除,修改,重新排列等多種功能 B、不用事先調入整個文檔,占用資源少 C、整個文檔調入內存,浪費時間和空間 D、不是長久駐留在內存,數(shù)據(jù)不是持久的,事件過后,若沒有保存數(shù)據(jù),數(shù)據(jù)就會 消失9. 下面的對自定style的方式正確的是(a) A、 <resources><style name="myStyle"><item name="android:layout_width">fill_parent

5、</item></style> </resources> B、 <style name="myStyle"><item name="android:layout_width">fill_parent</item> </style> C、 <resources><item name="android:layout_width">fill_parent</item> </resources> D、 <r

6、esources><style name="android:layout_width">fill_parent</style> </resources>10. 在android中使用Menu時可能需要重寫的方法有(ac)。(多選) A、onCreateOptionsMenu() B、onCreateMenu() C、onOptionsItemSelected() D、onItemSelected()11. 在SQL Server Management Studio 中運行下列T-SQL語句,其輸出值(c)。 SELECT IDENT

7、ITY B、可能為3 C、 不可能為-100 D、肯定為012. 在SQL Server 2005中運行如下T-SQL語句,假定SALES表中有多行數(shù)據(jù),執(zhí)行查詢之 后的結果是(d)。 BEGIN TRANSACTION A Update SALES Set qty=30 WHERE qty<30 BEGIN TRANSACTION BUpdate SALES Set qty=40 WHERE qty<40Update SALES Set qty=50 WHERE qty<50Update SALES Set qty=60 WHERE qty<60 COMMITTRAN

8、SACTION B COMMIT TRANSACTION A A、SALES表中qty列最小值大于等于30 B、SALES表中qty列最小值大于等于40 C、SALES表中qty列的數(shù)據(jù)全部為50 D、SALES表中qty列最小值大于等于6013. 在android中使用SQLiteOpenHelper這個輔助類時,可以生成一個數(shù)據(jù)庫,并可以對數(shù)據(jù)庫版本進行管理的方法可以是(ab) A、getWriteableDatabase() B、getReadableDatabase() C、getDatabase() D、getAbleDatabase()14. android 關于service生命

9、周期的onCreate()和onStart()說法正確的是(ad)(多選題) A、當?shù)谝淮螁拥臅r候先后調用onCreate()和onStart()方法 B、當?shù)谝淮螁拥臅r候只會調用onCreate()方法 C、如果service已經啟動,將先后調用onCreate()和onStart()方法 D、如果service已經啟動,只會執(zhí)行onStart()方法,不在執(zhí)行onCreate()方法15. 下面是屬于GLSurFaceView特性的是(abc)(多選) A、管理一個surface,這個surface就是一塊特殊的內存,能直接排版到android的視圖 view上。 B、管理一個EGL

10、display,它能讓opengl把內容渲染到上述的surface上。 C、讓渲染器在獨立的線程里運作,和UI線程分離。 D、可以直接從內存或者DMA等硬件接口取得圖像數(shù)據(jù)16. 方式正確的(a) A、<receiver android:name="NewBroad"><intent-filter><action android:name="vider.action.NewBroad"/> <action></intent-filter></receiver>

11、B、<receiver android:name="NewBroad"><intent-filter> android:name="vider.action.NewBroad"/></intent-filter></receiver> C、<receiver android:name="NewBroad"><action android:name="vider.action.NewBroad"/>

12、; <action></receiver> D、<intent-filter> <receiver android:name="NewBroad"> <action> android:name="vider.action.NewBroad"/> <action></receiver></intent-filter>17. 關于ContenValues類說法正確的是(a) A、他和Hashtable比較類似,也是負責存儲一些名值對,但

13、是他存儲的名值對當中的 名是String類型,而值都是基本類型 B、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中的 名是任意類型,而值都是基本類型 C、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中的 名,可以為空,而值都是String類型 D、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中 的名是String類型,而值也是String類型18. 我們都知道Hanlder是線程與Activity通信的橋梁,如果線程處理不當,你的機器就會變得越慢,那么線程銷毀的方法是(a) A、onDestroy(

14、) B、onClear() C、onFinish() D、onStop()19. 下面退出Activity錯誤的方法是(c) A、finish() B、拋異常強制退出 C、System.exit() D、onStop()20. 下面屬于android的動畫分類的有(ab)(多項) A、Tween B、Frame C、Draw D、Animation 21. 下面關于Android dvm的進程和Linux的進程,應用程序的進程說法正確的是(d) A、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,不一定擁有一個獨立 的Dalvik虛擬機實例.而每一個DVM都是

15、在Linux 中的一個進程,所以說可以認為是同一個概念. B、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,不一定不一定都是在Linux 中的一個進程,所以說不是一個概念. C、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的不一定都是在Linux 中的一個進程,所以說不是一個概念. D、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的 Dalvik虛擬機實例.而每一個DVM都是在Linux 中的一個進程,所以說可以認為是同一個概念.22. Android項目

16、工程下面的assets目錄的作用是什么bA、放置應用到的圖片資源。B、主要放置多媒體等數(shù)據(jù)文件C、放置字符串,顏色,數(shù)組等常量數(shù)據(jù)D、放置一些與UI相應的布局文件,都是xml文件23. 關于res/raw目錄說法正確的是(a)A、 這里的文件是原封不動的存儲到設備上不會轉換為二進制的格式B、 這里的文件是原封不動的存儲到設備上會轉換為二進制的格式C、 這里的文件最終以二進制的格式存儲到指定的包中D、 這里的文件最終不會以二進制的格式存儲到指定的包中24. 下列對android NDK的理解正確的是(abcd )A、 NDK是一系列工具的集合B、 NDK 提供了一份穩(wěn)定、功能有限的 API 頭文

17、件聲明。C、 使 “Java+C” 的開發(fā)方式終于轉正,成為官方支持的開發(fā)方式D、 NDK 將是 Android 平臺支持 C 開發(fā)的開端2 填空題25. android中常用的四個布局是framlayout,linenarlayout,relativelayout和tablelayout。26. android 的四大組件是activiey,service,broadcast和contentprovide。27. objectinputstream和objectoutputstream類主要用于對對象(Object)的讀寫。28. android 中service的實現(xiàn)方法是:startse

18、rvice和bindservice。29. activity一般會重載7個方法用來維護其生命周期,除了onCreate(),onStart(),onDestory() 外還有onrestart,onresume,onpause,onstop。30. android的數(shù)據(jù)存儲的方式sharedpreference,文件,SQlite,contentprovider,網絡。31. 當啟動一個Activity并且新的Activity執(zhí)行完后需要返回到啟動它的Activity來執(zhí)行 的回調函數(shù)是startActivityResult()。32. 請使用命令行的方式創(chuàng)建一個名字為myAvd,sdk版本為

19、2.2,sd卡是在d盤的根目錄下,名字為scard.img, 并指定屏幕大小HVGA._。33. 程序運行的結果是:_good and gbc_。 public class Example String str=new String("good"); charch='a','b','c' public static void main(String args) Example ex=new Example(); ex.change(ex.str,ex.ch); System.out.print(ex.str+" an

20、d "); Sytem.out.print(ex.ch); public void change(String str,char ch) str="test ok" ch0='g' 34. 在android中,請簡述jni的調用過程。(8分)1)安裝和下載Cygwin,下載 Android NDK 2)在ndk項目中JNI接口的設計 3)使用C/C+實現(xiàn)本地方法 5)將動態(tài)鏈接庫復制到java工程,在java工程中調用,運行java工程即可35. 簡述Android應用程序結構是哪些?(7分)Android應用程序結構是: Linux Kernel

21、(Linux內核)、Libraries(系統(tǒng)運行庫或者是c/c+核心庫)、Application Framework(開發(fā)框架包)、Applications(核心應用程序)36. 請繼承SQLiteOpenHelper實現(xiàn):(10分) 1).創(chuàng)建一個版本為1的“”的數(shù)據(jù)庫, 2).同時創(chuàng)建一個 “diary” 表(包含一個_id主鍵并自增長,topic字符型100 長度, content字符型1000長度) 3).在數(shù)據(jù)庫版本變化時請刪除diary表,并重新創(chuàng)建出diary表。public class DBHelper extends SQLiteOpenHelper public final

22、 static String DATABASENAME = "diaryOpenHelper.db"public final static int DATABASEVERSION = 1;/創(chuàng)建數(shù)據(jù)庫public DBHelper(Context context,String name,CursorFactory factory,int version)super(context, name, factory, version);/創(chuàng)建表等機構性文件public void onCreate(SQLiteDatabase db)String sql ="create

23、 table diary"+"("+"_id integer primary key autoincrement,"+"topic varchar(100),"+"content varchar(1000)"+")"db.execSQL(sql);/若數(shù)據(jù)庫版本有更新,則調用此方法public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)String sql = "drop table if e

24、xists diary"db.execSQL(sql);this.onCreate(db);37. 頁面上現(xiàn)有ProgressBar控件progressBar,請用書寫線程以10秒的的時間完成其進度顯示工作。(10分)答案public class ProgressBarStu extends Activity private ProgressBar progressBar = null;protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView

25、(R.gressbar);/從這到下是關鍵progressBar = (ProgressBar)findViewById(R.gressBar);Thread thread = new Thread(new Runnable() Overridepublic void run() int progressBarMax = progressBar.getMax();try while(progressBarMax!=progressBar.getProgress()int stepProgress = progressBarMax/10;int currentpr

26、ogress = progressBar.getProgress();progressBar.setProgress(currentprogress+stepProgress);Thread.sleep(1000); catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace(););thread.start();/關鍵結束38. 請描述下Activity的生命周期。 必調用的三個方法:onCreate() -> onStart() -> onResume(),用AAA表示(1)

27、父Activity啟動子Activity,子Actvity退出,父Activity調用順序如下AAA -> onFreeze() -> onPause() -> onStop() -> onRestart() -> onStart(),onResume() (2)用戶點擊Home,Actvity調用順序如下AAA -> onFreeze() -> onPause() -> onStop() - Maybe -> onDestroy() Maybe(3)調用finish(), Activity調用順序如下AAA -> onPause()

28、 -> onStop() -> onDestroy()(4)在Activity上顯示dialog, Activity調用順序如下AAA(5)在父Activity上顯示透明的或非全屏的activity,Activity調用順序如下AAA -> onFreeze() -> onPause()(6)設備進入睡眠狀態(tài),Activity調用順序如下AAA -> onFreeze() -> onPause()39. 如果后臺的Activity由于某原因被系統(tǒng)回收了,如何在被系統(tǒng)回收之前保存當前狀態(tài)?      onSav

29、eInstanceState()      當你的程序中某一個Activity A在運行時,主動或被動地運行另一個新的Activity B,這個時候A會執(zhí)行onSaveInstanceState()。B完成以后又會來找A,這個時候就有兩種情況:一是A被回收,二是A沒有被回收,被回收的A就要重新調用onCreate()方法,不同于直接啟動的是這回onCreate()里是帶上了參數(shù)savedInstanceState;而沒被收回的就直接執(zhí)行onResume(),跳過onCreate()了。 40. 如何將一個Activity設置成窗口的樣

30、式。 在AndroidManifest.xml 中定義Activity的地方一句話android:theme="android:style/Theme.Dialog"或android:theme="android:style/Theme.Translucent"就變成半透明的41. 如何退出Activity?如何安全退出已調用多個Activity的Application?對于單一Activity的應用來說,退出很簡單,直接finish()即可。當然,也可以用killProcess()和System.exit()這樣的方法。但是,對于多Activity的應

31、用來說,在打開多個Activity后,如果想在最后打開的Activity直接退出,上邊的方法都是沒有用的,因為上邊的方法都是結束一個Activity而已。當然,網上也有人說可以。就好像有人問,在應用里如何捕獲Home鍵,有人就會說用keyCode比較KEYCODE_HOME即可,而事實上如果不修改framework,根本不可能做到這一點一樣。所以,最好還是自己親自試一下。那么,有沒有辦法直接退出整個應用呢?在2.1之前,可以使用ActivityManager的restartPackage方法。它可以直接結束整個應用。在使用時需要權限android.permission.RESTART_PACK

32、AGES。注意不要被它的名字迷惑。可是,在2.2,這個方法失效了。在2.2添加了一個新的方法,killBackgroundProcesses(),需要權限 android.permission.KILL_BACKGROUND_PROCESSES??上У氖牵?.2的restartPackage一樣,根本起不到應有的效果。另外還有一個方法,就是系統(tǒng)自帶的應用程序管理里,強制結束程序的方法,forceStopPackage()。它需要權限android.permission.FORCE_STOP_PACKAGES。并且需要添加android:sharedUserId="android.

33、uid.system"屬性同樣可惜的是,該方法是非公開的,他只能運行在系統(tǒng)進程,第三方程序無法調用。因為需要在Android.mk中添加LOCAL_CERTIFICATE := platform。而Android.mk是用于在Android源碼下編譯程序用的。從以上可以看出,在2.2,沒有辦法直接結束一個應用,而只能用自己的辦法間接辦到。現(xiàn)提供幾個方法,供參考:1、拋異常強制退出:該方法通過拋異常,使程序Force Close。驗證可以,但是,需要解決的問題是,如何使程序結束掉,而不彈出Force Close的窗口。2、記錄打開的Activity:每打開一個Activity,就記錄下

34、來。在需要退出時,關閉每一個Activity即可。3、發(fā)送特定廣播:在需要結束應用時,發(fā)送一個特定的廣播,每個Activity收到廣播后,關閉即可。4、遞歸退出在打開新的Activity時使用startActivityForResult,然后自己加標志,在onActivityResult中處理,遞歸關閉。除了第一個,都是想辦法把每一個Activity都結束掉,間接達到目的。但是這樣做同樣不完美。你會發(fā)現(xiàn),如果自己的應用程序對每一個Activity都設置了nosensor,在兩個Activity結束的間隙,sensor可能有效了。但至少,我們的目的達到了,而且沒有影響用戶使用。為了編程方便,最好

35、定義一個Activity基類,處理這些共通問題。 42. 請介紹下Android中常用的五種布局。FrameLayout(框架布局),LinearLayout (線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)43. 請介紹下Android的數(shù)據(jù)存儲方式。四.內容提供器(Content provider)方式五. 網絡存儲方式44. 請介紹下ContentProvider是如何實現(xiàn)數(shù)據(jù)共享的。創(chuàng)建一個屬于你自己的Content provider或者將你的數(shù)據(jù)添加到一個已經存在的Content provider中,

36、前提是有相同數(shù)據(jù)類型并且有寫入Content provider的權限。45. 如何啟用Service,如何停用Service。Android中的service類似于windows中的service,service一般沒有用戶操作界面,它運行于系統(tǒng)中不容易被用戶發(fā)覺,可以使用它開發(fā)如監(jiān)控之類的程序。一。步驟第一步:繼承Service類public class SMSService extends Service 第二步:在AndroidManifest.xml文件中的<application>節(jié)點里對服務進行配置:<service android:name=".Dem

37、oService" />服務不能自己運行,需要通過調用Context.startService()或Context.bindService()方法啟動服務。這兩個方法都可以啟動Service,但是它們的使用場合有所不同。1.使用startService()方法啟用服務,調用者與服務之間沒有關連,即使調用者退出了,服務仍然運行。使用bindService()方法啟用服務,調用者與服務綁定在了一起,調用者一旦退出,服務也就終止。2.采用Context.startService()方法啟動服務,在服務未被創(chuàng)建時,系統(tǒng)會先調用服務的onCreate()方法,接著調用onStart()方

38、法。如果調用startService()方法前服務已經被創(chuàng)建,多次調用startService()方法并不會導致多次創(chuàng)建服務,但會導致多次調用onStart()方法。采用startService()方法啟動的服務,只能調用Context.stopService()方法結束服務,服務結束時會調用onDestroy()方法。 3.采用Context.bindService()方法啟動服務,在服務未被創(chuàng)建時,系統(tǒng)會先調用服務的onCreate()方法,接著調用onBind()方法。這個時候調用者和服務綁定在一起,調用者退出了,系統(tǒng)就會先調用服務的onUnbind()方法,。接著調用onDestroy

39、()方法。如果調用bindService()方法前服務已經被綁定,多次調用bindService()方法并不會導致多次創(chuàng)建服務及綁定(也就是說onCreate()和onBind()方法并不會被多次調用)。如果調用者希望與正在綁定的服務解除綁定,可以調用unbindService()方法,調用該方法也會導致系統(tǒng)調用服務的onUnbind()->onDestroy()方法。三。Service的生命周期1.Service常用生命周期回調方法如下:onCreate() 該方法在服務被創(chuàng)建時調用,該方法只會被調用一次,無論調用多少次startService()或bindService()方法,服務

40、也只被創(chuàng)建一次。 onDestroy()該方法在服務被終止時調用。 2. Context.startService()啟動Service有關的生命周期方法onStart() 只有采用Context.startService()方法啟動服務時才會回調該方法。該方法在服務開始運行時被調用。多次調用startService()方法盡管不會多次創(chuàng)建服務,但onStart() 方法會被多次調用。3. Context.bindService()啟動Service有關的生命周期方法onBind()只有采用Context.bindService()方法啟動服務時才會回調該方法。該方法在調用者與服務綁定時被調用

41、,當調用者與服務已經綁定,多次調用Context.bindService()方法并不會導致該方法被多次調用。onUnbind()只有采用Context.bindService()方法啟動服務時才會回調該方法。該方法在調用者與服務解除綁定時被調用。備注:1. 采用startService()啟動服務 Intent intent = new Intent(DemoActivity.this, DemoService.class); startService(intent);2.Context.bindService()啟動 Intent intent = new Intent(DemoActivi

42、ty.this, DemoService.class); bindService(intent, conn, Context.BIND_AUTO_CREATE); /unbindService(conn);/解除綁定46. 注冊廣播有幾種方式,這些方式有何優(yōu)缺點?請談談Android引入廣播機制的用意。 Android廣播機制(兩種注冊方法) 在android下,要想接受廣播信息,那么這個廣播接收器就得我們自己來實現(xiàn)了,我們可以繼承BroadcastReceiver,就可以有一個廣播接受器了。有個接受器還不夠,我們還得重寫B(tài)roadcastReceiver里面的onReceiver方法,當來廣

43、播的時候我們要干什么,這就要我們自己來實現(xiàn),不過我們可以搞一個信息防火墻。具體的代碼:public class SmsBroadCastReceiver extends BroadcastReceiver Override public void onReceive(Context context, Intent intent) Bundle bundle = intent.getExtras(); Object object = (Object)bundle.get("pdus"); SmsMessage sms=new SmsMessageobject.length;

44、for(int i=0;i<object.length;i+) sms0 = SmsMessage.createFromPdu(byte)objecti); Toast.makeText(context, "來自"+smsi.getDisplayOriginatingAddress()+" 的消息是:"+smsi.getDisplayMessageBody(), Toast.LENGTH_SHORT).show(); /終止廣播,在這里我們可以稍微處理,根據(jù)用戶輸入的號碼可以實現(xiàn)短信防火墻。 abortBroadcast(); 當實現(xiàn)了廣播接收器,

45、還要設置廣播接收器接收廣播信息的類型,這里是信息:vider.Telephony.SMS_RECEIVED 我們就可以把廣播接收器注冊到系統(tǒng)里面,可以讓系統(tǒng)知道我們有個廣播接收器。這里有兩種,一種是代碼動態(tài)注冊:/生成廣播處理 smsBroadCastReceiver = new SmsBroadCastReceiver(); /實例化過濾器并設置要過濾的廣播 IntentFilter intentFilter = new IntentFilter("vider.Telephony.SMS_RECEIVED"); /注冊廣播 Br

46、oadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter); <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" package="spl.broadCastReceiver" android:versionCode="1" android:versionName="1.0"> &l

47、t;application android:icon="drawable/icon" android:label="string/app_name"> <activity android:name=".BroadCastReceiverActivity" android:label="string/app_name"> <intent-filter> <action android:name="ent.action.MAIN" />

48、 <category android:name="ent.category.LAUNCHER" /> </intent-filter> </activity> <!-廣播注冊-> <receiver android:name=".SmsBroadCastReceiver"> <intent-filter android:priority="20"> <action android:name="vider.

49、Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> </application> <uses-sdk android:minSdkVersion="7" /> <!- 權限申請 -> <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> </manifest> 兩種注冊類型的區(qū)別

50、是: 1)第一種不是常駐型廣播,也就是說廣播跟隨程序的生命周期。 2)第二種是常駐型,也就是說當應用程序關閉后,如果有信息廣播來,程序也會被系統(tǒng)調用自動運行。47. 請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關系。Handler簡介:一個Handler允許你發(fā)送和處理Message和Runable對象,這些對象和一個線程的MessageQueue相關聯(lián)。每一個線程實例和一個單獨的線程以及該線程的MessageQueue相關聯(lián)。當你創(chuàng)建一個新的Handler時,它就和創(chuàng)建它的線程綁定在一起了。這里,線程我們也可以理解為線程的Message

51、Queue。從這一點上來看,Handler把Message和Runable對象傳遞給MessageQueue,而且在這些對象離開MessageQueue時,Handler負責執(zhí)行他們。Handler有兩個主要的用途:(1)確定在將來的某個時間點執(zhí)行一個或者一些Message和Runnable對象。(2)在其他線程(不是Handler綁定線程)中排入一些要執(zhí)行的動作。Scheduling Message,即(1),可以通過以下方法完成:post(Runnable):Runnable在handler綁定的線程上執(zhí)行,也就是說不創(chuàng)建新線程。postAtTime(Runnable,long):post

52、Delayed(Runnable,long):sendEmptyMessage(int):sendMessage(Message):sendMessageAtTime(Message,long):sendMessageDelayed(Message,long):post這個動作讓你把Runnable對象排入MessageQueue,MessageQueue受到這些消息的時候執(zhí)行他們,當然以一定的排序。sendMessage這個動作允許你把Message對象排成隊列,這些Message對象包含一些信息,Handler的hanlerMessage(Message)會處理這些Message.當然,h

53、andlerMessage(Message)必須由Handler的子類來重寫。這是編程人員需要作的事。當posting或者sending到一個Hanler時,你可以有三種行為:當MessageQueue準備好就處理,定義一個延遲時間,定義一個精確的時間去處理。后兩者允許你實現(xiàn)timeout,tick,和基于時間的行為。當你的應用創(chuàng)建一個新的進程時,主線程(也就是UI線程)自帶一個MessageQueue,這個MessageQueue管理頂層的應用對象(像activities,broadcast receivers等)和主線程創(chuàng)建的窗體。你可以創(chuàng)建自己的線程,并通過一個Handler和主線程進行

54、通信。這和之前一樣,通過post和sendmessage來完成,差別在于在哪一個線程中執(zhí)行這么方法。在恰當?shù)臅r候,給定的Runnable和Message將在Handler的MessageQueue中被Scheduled。Message簡介:Message類就是定義了一個信息,這個信息中包含一個描述符和任意的數(shù)據(jù)對象,這個信息被用來傳遞給Handler.Message對象提供額外的兩個int域和一個Object域,這可以讓你在大多數(shù)情況下不用作分配的動作。盡管Message的構造函數(shù)是public的,但是獲取Message實例的最好方法是調用Message.obtain(),或者Handler.

55、obtainMessage()方法,這些方法會從回收對象池中獲取一個。MessageQueue簡介:這是一個包含message列表的底層類。Looper負責分發(fā)這些message。Messages并不是直接加到一個MessageQueue中,而是通過MessageQueue.IdleHandler關聯(lián)到Looper。你可以通過Looper.myQueue()從當前線程中獲取MessageQueue。Looper簡介:Looper類被用來執(zhí)行一個線程中的message循環(huán)。默認情況,沒有一個消息循環(huán)關聯(lián)到線程。在線程中調用prepare()創(chuàng)建一個Looper,然后用loop()來處理messages,直到循環(huán)終止。大多數(shù)和message loop的交互是通過Handler。下面是一個典型的帶有L

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論