android考試知識點考試_第1頁
android考試知識點考試_第2頁
android考試知識點考試_第3頁
android考試知識點考試_第4頁
android考試知識點考試_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、-. z.考試知識點Android閉卷考試理解Android常見的幾種布局。幾種布局的高和寬,制定LinearLayout,線性布局,布局中的控件在線性方向上依次排列。默認控件水平方向排列。android:orientation=horizontalandroid:orientation=vertical注意:當是水平方向排列,控件寬度不能設置為android:layout_width=match_parent否則控件會把水平方向沾滿,其他控件無法會控件覆蓋無法放置當是垂直方向,內(nèi)部控件不能將android:layout_height=match_parent指定為match_parent a

2、ndroid:layout_weight=1,使用比例方式來指定控件的大小RelativeLayout,相對布局,是通過相對定位的方式讓布局中控件可以出現(xiàn)在布局的任何位置。內(nèi)部控件,三種屬性, 屬性值是true或falseandroid:layout_centerHrizontal 水平居中,屬性值是id/*“android:layout_below 在*元素的下方屬性值是數(shù)值android:layout_marginLeft 離*元素左邊緣的距離FrameLayout,幀布局,簡單,應用場景少,和碎片一起使用,沒有定位方式,所有控件默認在布局的左上角,后面的會覆蓋前面的。每一個組件都代表一個

3、畫面用該布局可以實現(xiàn)動畫效果PercentFrameRelative)Layout 百分比布局:布局中可以不用wrap_content,match_parent等方式來指定控件的大小,直接指定控件所占的百分比,實現(xiàn)平分布局甚至任意比例分割布局。注意百分比布局需要添加庫依賴 support:percent:24.由于LinearLayout本身支持按比例指定控件大小,所以百分比布只為RelativeLayout和RelativeLayout功能擴展表格布局Tablelayout采用行列的形式管理UI組件,無需明確地聲明它的行列數(shù), 而是通過添加TableRow、其他組件來控制表格的行數(shù)和列數(shù)Gr

4、idLayout是Android4.0之后新增的布局管理器,因此正常情況下需要在 Android 4.0 之后的版本中才能使用,如果希望在更早的版本中使用的話,需要導入相應的支撐庫v7包的gridlayout包。Grid Layout 網(wǎng)格布局,和前面所講的 Table Layout(表格布局) 有點類似,不過他有很多前者沒有的東西,因此也更加好用:- 可以自己設置布局中組件的排列方式- 可以自定義網(wǎng)格布局有多少行、列- 可以直接設置組件位于*行*列- 可以設置組件橫跨幾行或者幾列Absolute Layout 它不提供任何布局控制,而是由開發(fā)人員自己通過*、Y坐標來控制組件的位置。運行And

5、roid應用的手機往往千差萬別,屏幕大小、分別率、屏幕密度等都可能存在較大的差異,使用絕對布局的話很難做機型適配-已經(jīng)被廢棄理解Android應用程序開發(fā)過程中,常見的四種設計模式及各自的使用場合。ListView-Adapter、Builder-Dialog、Factory-選項卡、Listener-事件監(jiān)聽。1適配器模式:簡介:將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口,從而使原本因接口不匹配而無法再一起工作的兩個類能夠在一起工作。不同的數(shù)據(jù)提供者使用一個適配器來向一個一樣的客戶提供效勞。舉例:ListView或GridView的Adapter。2建造者模式:簡介:將一個復雜對象的構(gòu)建與它

6、的表示別離,使得同樣的構(gòu)建過程可以創(chuàng)立不同的顯示,但其根本還是不變。舉例:AlertDialog.Builder.AlertDialog.Builder, 使用該Builder來構(gòu)建復雜的AlertDialog對象工廠模式:定義一個用于創(chuàng)立對象的接口,讓子類決定將哪一個類實例化。外部不需要關心工廠是如何創(chuàng)立一個復雜產(chǎn)品的過程例如:BitmapFactory位圖工廠,專門用來將指定的圖片轉(zhuǎn)換為指定的位圖Bitmap。監(jiān)聽器模式事件源經(jīng)過事件的封裝傳給監(jiān)聽器,當事件源觸發(fā)事件后,監(jiān)聽器接收到事件對象可以回調(diào)事件的方法.Listener-事件監(jiān)聽觀察者模式:定義對象間是一Subject對多Obser

7、ver的依賴關系,當一個對象發(fā)生變化時,其它依賴該對象的對象都會收到通知,并隨著變化。播送機制就是觀察者模式ListView和BaseAdapter組合時,當BaseAdapter的item改變時,我們經(jīng)常會調(diào)用notifyDataSetChanged(),通知Listview刷新Android中可支持網(wǎng)頁的縮放的視圖(View)及其功能在Android系統(tǒng)中,內(nèi)置了一款高性能的瀏覽器,其內(nèi)核就是WebKit,WebView網(wǎng)頁視圖,就是在這個根底上封裝的一個控件,我們可以直接用這個控件在應用程序內(nèi)去顯示W(wǎng)eb頁面,直接用HTML文件做為布局文件,可以和JavaScript交互調(diào)用。顯示和渲染

8、web頁面.直接顯示網(wǎng)頁 設置在當前應用中翻開網(wǎng)頁,如果不設置的話會使用手機瀏覽器翻開網(wǎng)頁 mWebView.setWebViewClient(new WebViewClient() Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) view.loadUrl( s:/.baidu./); return true; ); mWebView.loadUrl( s:/.baidu./);和js交互設置支持JavascriptWebSettings settings =

9、webView.getSettings();settings.setJavaScriptEnabled(true);可以利用html做界面布局理解View和ViewGroup的用途及兩者之間的關系。繼承構(gòu)造:View是ViewGroup的父類類。View是所有UI組件的基類,而 ViewGroup是容納這些組件的容器,其本身也是從View派生出來的.View中所有的子類成為widgets,viewgroup的子類成為layout。View和ViewGroup之間采用了組合設計模式,可以使得“局部-整體同等對待。ViewGroup作為布局容器類的最上層,布局容器里面又可以有View和ViewGr

10、oup。對于setContentView(R.layout.layout的*ml文件)方法,Activity其實不是顯示視圖直觀上感覺是它,實際上Activity調(diào)用了PhoneWindow的setContentView()方法,然后加載視圖,將視圖放到這個Window上,而Activity其實構(gòu)造的時候初始化的是WindowPhoneWindow,Activity其實是個控制單元,即可視的人機交互界面。Activity是一個工人,它來控制Window;Window是一面顯示屏,用來顯示信息;View就是要顯示在顯示屏上的信息,這些View都是層層重疊在一起通過infalte()和addVie

11、w()放到Window顯示屏上的。而LayoutInfalter就是用來生成View的一個工具,*ML布局文件就是用來生成View的原料。(2).Activity、Window、View之間的關系:Activity是Window和View之間的橋梁,將View的內(nèi)容信息顯示在Window窗口上面。理解Android網(wǎng)絡編程中,常見的數(shù)據(jù)傳輸格式。網(wǎng)絡傳輸中最常見的有*ml和json ,還有protocol buffers,gzip,Thrift*ml通過Pull,SA*和Dom方式解析Json用JSONObject和GSON解析。Protocol Buffers一種數(shù)據(jù)描述語言,類似于*ML能

12、夠?qū)?gòu)造化數(shù)據(jù)序列化類似于*ML,但更小,更快,更簡單經(jīng)常用到json、*ml等格式的數(shù)據(jù),這些數(shù)據(jù)在傳輸前可以進展壓縮,這時候就會涉及到一種壓縮格式Gzip。Gzip的壓縮比率非常大,有的甚至能到達70%以上,可以大大減少傳輸內(nèi)容,提高用戶的傳輸速度,進而提高用戶的體驗理解根本組件Activity的相關知識(如重載方法等)。Android應用有四大組件Activity、Service、BroadcastReceiver、ContentProviderContentProvider組件:用于Android應用之間實現(xiàn)實時的數(shù)據(jù)交換。常和ContentResolver一起使用BroadcastR

13、eceiver組件:播送消息接收器,類似于事件編程中的監(jiān)聽器,但是不同的是普通的事件監(jiān)聽器監(jiān)聽的事件源是程序中的對象,而BroadcastReceiver監(jiān)聽的事件源是Android應用程序中的其它組件。Service組件: 通常位于后臺運行,一般不需要與用戶交互,所以沒有圖形界面。Service組件運行起來后會有獨立的生命周期,它通常用于為其他組件提供后臺效勞或監(jiān)控其他組件的運行狀態(tài)activity是一種可以包含用戶界面的組件,主要用于和用戶進展交互表現(xiàn)形式是一個屏幕,功能是顯示界面,消息傳遞整個生命周期:onCreate()-onDestroy()可見的生命周期:onStart()-onS

14、top()前臺的生命周期:onResume()-onPause()運行,暫停不在棧頂,但可見,停頓完全不可見,有可能因內(nèi)存不夠被回收,銷毀從棧中移除覆蓋了activity生命周期的每一個環(huán)節(jié)onCreate():當activity是被創(chuàng)立時候,會自動運行該方法。該方法做一些初始化動作,比方加載布局,綁定時間等。onStart():活動在有不可見變?yōu)榭梢姷臅r候調(diào)用。onResume():當activity開場與用戶交互獲得焦點時,會調(diào)用onResume,此是活動一定位于返回棧的棧頂,并處于運行狀態(tài)。onPause():當系統(tǒng)準備啟動或恢復另一個活動時調(diào)用。此時活動處于暫停狀態(tài)當一個活動不再處于棧

15、頂?shù)奈恢?,但仍然可見,彈出一個對話框或者一個不能占滿屏幕的活動都會導致前一個活動處于暫停狀態(tài)通常會在這個方法中釋放掉一些占用cpu的資源onStop():當這個activity完全看不見的時候,會調(diào)用onStop方法。以下三種情況都會使這個activity調(diào)用onStop()方法,第一種是一個新的activity被執(zhí)行,第二種是一個已經(jīng)存在的activity被切換到最前端,第三種是這個activity要被銷毀。onRestart():把activity從停頓狀態(tài)變?yōu)檫\行狀態(tài),活動被重新啟用。onDestroy():當activity銷毀前會調(diào)用該方法,之后變?yōu)殇N毀狀態(tài)。理解何時需要在Activ

16、ity中重寫方法onActivityResult?當使用startActivityForResult()在第一個活動中方法啟動另一個Activity時,需要在第一個活動中重寫onActivityResult()方法,獲得被啟動Activity返回的結(jié)果。Intent intent=new Intent(this,secondeActivity.class);startActivityForResult(intent,int 請求碼);重寫 Override protected void onActivityResult(int requestCode, int resultCode, Inte

17、nt data) String result = data.getE*tras().getString(result);/得到新Activity 關閉后返回的數(shù)據(jù) Log.i(TAG, result); 在第二個活動中:點擊事件中/數(shù)據(jù)是使用Intent返回 Intent intent = new Intent(); /把返回數(shù)據(jù)存入Intent intent.putE*tra(result, My name is linjiqin); /設置返回數(shù)據(jù) OtherActivity.this.setResult(RESULT_OK, intent); /關閉Activity OtherActiv

18、ity.this.finish();7理解在Intent傳遞數(shù)據(jù)時使用的幾種數(shù)據(jù)類型。根本數(shù)據(jù)類型Serializable、將一個對象序列化后轉(zhuǎn)換成可以傳輸?shù)臓顟B(tài),序列化的方法是讓類自身繼承Serializable接口Person p=new Person();p.setname();.Intent intent=new Intent(源活動,目標活動.class;intent.putE*tra(“名字,p);承受數(shù)據(jù):Person p2=getIntent().getSerializableE*tra(“名字;Parcelable,同樣需要類繼承Parcelable接口,但需要在person

19、類中重寫接口中兩個方法,必須有一個實現(xiàn)了Parcelable.Creator接口的靜態(tài)常量成員字段。承受數(shù)據(jù)方法getIntent.getParcelableE*tra(“名字;CharSequence、CharSequence接口,實現(xiàn)了這個接口的類有:CharBuffer、String、StringBuffer、StringBuilder這個四個類。所以處理String或者StringBuffer的類就不用重載。Bundle:一種存放字符串和Parcelable類型數(shù)據(jù)的map類型的容器類,通過存放數(shù)據(jù)鍵key獲取對應的各種類型的值value,而且必須通過鍵key獲取。Intent int

20、ent = new Intent();intent.setClass(activity1.this, activity2.class);/描述起點和目標Bundle bundle = new Bundle();/創(chuàng)立Bundle對象bundle.putString(something, Activity1發(fā)來的數(shù)據(jù));/裝入數(shù)據(jù)intent.putE*tras(bundle);/把Bundle塞入Intent里面startActivity(intent);/開場切換Activity2接收數(shù)據(jù)Intent intent = this.getIntent();/獲取已有的intent對象Bundl

21、e bundle = intent.getE*tras();/獲取intent里面的bundle對象string = bundle.getString(something);/獲取Bundle里面的字符串理解Android中包含哪幾個標準的“選擇部件(View)。RadioButton單項選擇按鈕同一組RadioButton放在一個RadioGroup中CheckBo*復選框Spinner下拉列表框DatePicker日期選擇組件TimePicker事件選擇組件NumberPicker數(shù)值選擇組件9理解Android工程中哪些目錄中的文件是由Eclipse自動編譯生成。src、存放的是該工程的

22、源代碼bin、編譯后自動生成目錄。二進制文件,包括class、資源文件、de*、apk等gen、自動生成的文件目錄。該目錄下的文件全部都是ADT自動生成的,一般并不需要去修改,實際上該目錄下只定義了一個R.java文件,該文件相當于工程的字典,為工程中用戶界面、字符串、圖片等資源都會在該類中創(chuàng)立其惟一的IDres存放應用程序中經(jīng)常使用的資源文件等。理解SQLite的一般用法。SQLite是一款輕量級關系型數(shù)據(jù)庫。安卓內(nèi)置SQLite。SQLiteOpenHelper:SQLiteOpenHelper是是一個輔助類。這個類主要生成一個數(shù)據(jù)庫,并對數(shù)據(jù)庫的版本進展管理。當在程序當中調(diào)用這個類的方法

23、getWritableDatabase()或者 getReadableDatabase()方法的時候,創(chuàng)立或翻開一個現(xiàn)有的數(shù)據(jù)庫,并返回一個SQLiteDatabase對象用于對數(shù)據(jù)庫進展讀寫操作。當數(shù)據(jù)庫不可寫入磁盤已滿,getReadabelDatabase()返回的對象將以只讀的方式翻開數(shù)據(jù)庫,getReadableDatabase()出現(xiàn)異常。構(gòu)造方法:public MyDatagbaseHelper(Conte*t conte*t, String name, SQLiteDatabase.CursorFactory factory, int version) this,數(shù)據(jù)庫名.db

24、,null,版本1 super(conte*t, name, factory, version);SQLiteOpenHelper 是一個抽象類,我們通常需要繼承它,并且實現(xiàn)里面的2個抽象方法:1.onCreateSQLiteDatabase dbdb.e*ecSQL(sql語句,建立表在數(shù)據(jù)庫第一次生成調(diào)用getdat.和getWriteabledatabase方法)的時候會調(diào)用這個方法,也就是說,只有在創(chuàng)立數(shù)據(jù)庫的時候才會調(diào)用,當然也有一些其它的情況,一般我們在這個方法里邊生成數(shù)據(jù)庫表。2.onUpgradeSQLiteDatabase,int,int當數(shù)據(jù)庫需要升級修改表,創(chuàng)立新表,數(shù)據(jù)

25、備份,刪除表的時候,Android系統(tǒng)會調(diào)用這個方法。比方增加一*表。這里要db.e*ecSQL(sql語句如果是建的表已經(jīng)存在,就要先刪除,或不建。3.onOpenSQLiteDatabase非抽象:當翻開數(shù)據(jù)庫時的回調(diào)函數(shù)。SQLiteDatabase sqlitedatabase=sqliteDBHelper.getWritableDatabase()插入操作 ContentValues cv = new ContentValues(); cv.put(COLUMN_NAME, person.getName(); cv.put(COLUMN_AGE, person.getAge(); /

26、當cv參數(shù)為空或者沒有內(nèi)容的時候,insert會失敗,為了防止這種情況發(fā)生, / 要在第二個參數(shù)設置一個列名,當要插入的行為空行時,將指定的列名值設置為null sqliteDataBase.insert(TABLE_NAME, null, cv);更新:sqliteDataBase.update(TABLE_NAME, cv, COLUMN_ID+ =, new StringString.valueOf(person.getId();第三個和第4個參數(shù)不指定,默認更新所有行刪除sqliteDataBase.delete(TABLE_NAME, COLUMN_ID + =, new Strin

27、gString.valueOf(id);,后面的兩個參數(shù)不指定的話默認刪除所有行或者直接用sql來操作sqliteDataBase.e*ecSQLsql語句,new String參數(shù).);11. 理解正確設置onClickListener所需要的幾個根本步驟。View.OnClickListener:單擊事件的監(jiān)聽器必須實現(xiàn)的接口基于監(jiān)聽的事件處理模型:獲取普通界面組件事件源,也就是被監(jiān)聽的對象實現(xiàn)事件監(jiān)聽器類,該監(jiān)聽器類是一個特殊的Java類,必須實現(xiàn)一個OnClickListener接口調(diào)用事件源的setOnClickListener()方法注冊事件監(jiān)聽器常見的實現(xiàn)方法:a.匿名內(nèi)部類*m

28、l布局文件中添加組件,設置組件id;在activity中獲取對應id的組件,用setOnClickListenernew OnClickListener的方式綁定控件與事件監(jiān)聽器,在內(nèi)部類中重載onClick()方法,實現(xiàn)想要的功能。a的優(yōu)化方案:使用內(nèi)部類,還有外部類,但很少用在Activity中定義一個內(nèi)部類繼承監(jiān)聽器接口,或new一個該監(jiān)聽器的對象setOnClickListener(對象實例)*ml布局文件中添加組件,設置組件id;在activity中編寫內(nèi)部類實現(xiàn)OnClickListener,實現(xiàn)onClick方法。綁定按鈕與事件監(jiān)聽器:button.setOnClickListe

29、ner(內(nèi)部類的對象);btnshow.setOnClickListener(new BtnClickListener(); /定義一個內(nèi)部類,實現(xiàn)View.OnClickListener接口,并重寫onClick()方法 class BtnClickListener implements View.OnClickListener Override public void onClick(View v) Toast.makeTe*t(getApplicationConte*t(), 按鈕被點擊了, Toast.LENGTH_SHORT).show(); c.直接綁定到標簽利用布局文件中的onC

30、lick屬性*ml布局文件中添加組件,設置onClick屬性;Java代碼中實現(xiàn)與onClick屬性值同名的方法名。d.Activiry作為事件監(jiān)聽器。整個Activity實現(xiàn)onClickListener接口,適用于控件量多的情況。*ml布局文件中添加組件,設置組件id;Activity實現(xiàn)onClickListener接口,即實現(xiàn)onClick方法,完成各組件的功能。在onCreate中綁定控件與事件監(jiān)聽器:findViewById(R.id.Button03).setOnClickListener(this);在onCreate()方法外重寫Overridepublicvoid onCl

31、ick(View arg0) if(arg0.getId()=R.id.button)System.out.println(click Button.); 12理解TabHost, TabSpec, TabWidget等根本類的用法。TabHost組件可以在界面中存放多個選項卡,必須有TabWidget與FrameLayout組件TabHost組件中必備的兩個組件TabWidget: 該組件就是TabHost標簽頁中上部 或者 下部的按鈕, 可以點擊按鈕切換選項卡;直接在tabhost中加不加,即使add了選項卡,也無法區(qū)分開選項卡TabSpec: 代表了選項卡界面, 添加一個TabSpec即

32、可添加到TabHost中,每一頁是內(nèi)容+標簽,內(nèi)容由FrameLayout顯示定義布局: 在*ML文件中使用TabHost組件, 并在其中定義一個FrameLayout選項卡內(nèi)容;b.繼承TabActivity: 顯示選項卡組件的Activity繼承TabActivity;c.獲取組件: 通過調(diào)用getTabHost()方法, 獲取TabHost對象;d.創(chuàng)立添加選項卡: 通過TabHost創(chuàng)立添加選項卡;TabHost tabs = (TabHost) findViewById(R.id.tabhost);tabs.setup();TabHost.TabSpec spec = tabs.ne

33、wTabSpec(tag1);spec.setContent(R.id.tab1);spec.setIndicator(Clock);tabs.addTab(spec);其中tabs.newTabSpec(tag1)用來new一個tab,同時標記這個tab的tagsetContent()用來處理點擊這個tab后的動作,可以是這個Activity下的一個組件,如setContent(R.id.tab1)布局文件,也可以是一個intent,比方:setContent(new Intent(this, SubTab.class)setIndicator()用來標記這個tab的名字,可以是setInd

34、icator(Clock),也可以包含其他的屬性,如圖片:setIndicator(商場,getResources().getDrawable(android.R.drawable.arrow_down_float)tabs.addTab(spec)將這個tab添加如TabHost理解AsyncTask在Android耗時操作中的使用方法。AysncTask是谷歌封裝的實現(xiàn)異步操作,用于執(zhí)行耗時任務并在UI線程中更新結(jié)果的抽象類。背后的實現(xiàn)原理就是異步消息機制Handler)AsyncTask是一個輕量級異步類,用戶可以直接繼承AsyncTask,在類中實現(xiàn)一步操作,并提供接口反應當前異步執(zhí)行

35、的程度可以通過接口實現(xiàn)UI進度更新,最后反應執(zhí)行的結(jié)果給UI主線程。使用方法:繼承AsyncTask并且制定傳入?yún)?shù)類型、描述過程類型以及返回值類型,這些類型均是泛型需要重寫的4個方法:onPreE*ecute():這個方法是在異步加載進展前執(zhí)行的,用于界面上的初始化操作,必須現(xiàn)實一個進度條對話框。doInBackground(Params.):只有這個方法是在子線程中進展的,所有下載或者加載等耗時的操作,都可以在這里執(zhí)行。任務一旦完成,就可以通過return語句將任務的執(zhí)行結(jié)果返回。如果AsyncTask的第三個泛型參數(shù)指定的是void,就可以不用返回。更新UI操作,需要調(diào)用publishP

36、rogress(傳遞的參數(shù)方法來完成。onProgressUpdate(接收的參數(shù)):這個方法是在doInBackground方法中執(zhí)行了publishProgress()方法的時候執(zhí)行,publishProgress()方法是向此方法傳遞一些用于描述過程的參數(shù),比方用Integer來描述下載的進度等,實現(xiàn)對UI進展操作。onPostE*ecute(Result):這個方法是在doInBackground()方法執(zhí)行完畢return之后執(zhí)行,根據(jù)return的result類型來判斷進展一些UI操作。比方提醒任務結(jié)果,關掉進度條對話框等以上的方法中,只有doInBackground()這個方法是

37、在子線程中執(zhí)行,其他都是在UI線程,所以可以直接對UI進展更新。New DownloadTask().e*ecte();啟動這個任務/ 這里定義的一個AsyncTask子類,輸入?yún)?shù)類型為空,過程指示參數(shù)為整型,異步返回類型為布爾28class DownLoad e*tends AsyncTask Asynctask的缺乏之處: 1.AsyncTask可能存在新開大量線程消耗系統(tǒng)資源和導致應用FC的風險 2.AsyncTask一旦執(zhí)行了 doInBackground,就算調(diào)用取消方法,也會將doInBackground里面的代碼執(zhí)行完畢,才會停頓。3.調(diào)用了AsyncTask#e*ecute(

38、)后,AsyncTask會把任務交給線程池,由線程池來管理創(chuàng)立運行線程。線程池不經(jīng)維護,當大量異步發(fā)生時,導致線程池滿了,會出異常。理解Android客戶端程序與后端Web效勞器應用程序之間的通信流程??蛻舳讼蛐谄靼l(fā)送一條 請求,效勞器接收到請求后會返回數(shù)據(jù)給客戶端,然后客戶端對數(shù)據(jù)進展解析。請求方式 URLConnection和 Client,但后者被棄用在6.0后。但請求數(shù)據(jù)是在子線程中,而數(shù)據(jù)更新是在UI主線程中必須在主線程中開啟一個線程,并且使用Handler這個對象來實現(xiàn)數(shù)據(jù)的異步請求.然后當請求響應完成之后才會在界面中更新數(shù)據(jù)。手機客戶端向Web應用效勞器發(fā)送請求信息首先引用所需

39、要的各種API,比方 ,io等定義訪問的URL3創(chuàng)立URLConnection對象,該對象的主要作用是將Android手機端的數(shù)據(jù)提交給Web應用效勞器設置數(shù)據(jù)編碼方式Android手機在將準備好的數(shù)據(jù)發(fā)送到Web效勞器之前,需要對數(shù)據(jù)的編碼進展規(guī)定,這樣效勞器在接收到這些數(shù)據(jù)后,就會根據(jù)發(fā)送過去的文字編碼處理和顯示。提交URLConnection對象和獲取效勞器 Response響應數(shù)據(jù)完成前面的工作,就該將數(shù)據(jù)提交給Web應用效勞器了,在應用效勞接收Android手機提交的數(shù)據(jù)后,經(jīng)過處理,將要返回(響應)給Android手機的數(shù)據(jù)打包到一個 Response對象中,發(fā)回給手機。手機客戶端

40、承受響應數(shù)據(jù)獲取響應效勞的數(shù)據(jù)從Web效勞器響應到手機終端的數(shù)據(jù)一般打包在一個字節(jié)數(shù)組中,關鍵是這個字節(jié)數(shù)組中可能包含了各種不同的數(shù)據(jù)類型,為此,需要采取Java數(shù)據(jù)流和過濾流的方法從字節(jié)數(shù)據(jù)中取出各種類型的數(shù)據(jù)理解MessageQueue的工作原理。是消息隊列的意思,存放所有通過Handler發(fā)送的消息。這局部消息會一直存在消息對列中,等待被處理,每個線程只有一個MessageQueue對象MessageQueue是比擬低層的類,是持有Message在Looper中派發(fā)的一個鏈表,但Message不是直接添加到MessageQueue中的,而是通過與Looper相關聯(lián)的Handler來進展的

41、。在當前線程中可以通過調(diào)用Looper.myQueue()方法來獲取當前線程的MessageQueueMessageQueue,主要包含2個操作:插入和讀取。讀取操作會伴隨著刪除操作,插入和讀取對應的方法分別為enqueueMessage和ne*t,其中enqueueMessage的作用是往消息隊列中插入一條消息,而ne*t的作用是從消息隊列中取出一條消息并將其從消息隊列中移除。雖然MessageQueue叫消息隊列,但是它的內(nèi)部實現(xiàn)并不是用的隊列,實際上它是通過一個單鏈表的數(shù)據(jù)構(gòu)造來維護消息列表,單鏈表在插入和刪除上比擬有優(yōu)勢。Message: 是線程之間傳遞的消息,在內(nèi)部攜帶少量信息,用于

42、不同線程間交換數(shù)據(jù)。what,arg1,arg2,obj攜帶Object對象Handler:處理者的意思,主要用于發(fā)送和處理消息,Handler類的作用主要有兩種:1.在新啟動的線程中發(fā)送消息。sendMessage().2.在主線程UI線程中獲取,處理消息。handleMessage()方法Looper是每個線程中MessageQueue的管家,調(diào)用Looper的loop方法,就會進入一個無限循環(huán)中,然后每當MessageQueue存在一條消息,就會將他取出,并傳遞到Handler的handleMessage()方法。每個線程也只會有一個Looper對象異步消息的處理機制:主線程創(chuàng)立Hand

43、ler對象,并重寫handleMessage()方法。當子線程需要進展UI操作,就創(chuàng)立一個Message對象,并通過Handler把這條消息發(fā)送出去。之后,這條消息會被添加到MessageQueue中等待被處理。而Looper一直嘗試從MessageQueue中取出待處理的消息,如果有,就分發(fā)到Handler的handleMessage()方法處理。由于Handler對象是在主線程創(chuàng)立,所以可以更新UILooper是每個線程中MessageQueue的管家,在loop()方法被調(diào)用后就會處于無限循環(huán)中,每當發(fā)現(xiàn)隊列中有一個消息,就會取出,放進handleMessage()方法中處理理解Shar

44、edPreferences的使用方法。SharedPreferences是Android平臺上一個輕量級的存儲類,以鍵值對形式來保存應用的一些常用配置。它是使用鍵值對的方式存儲數(shù)據(jù)。存入什么類型,讀取出來就是什么類型1得到SharedPreferences對象2、調(diào)用SharedPreferences對象的edit()方法來獲取一個SharedPreferences.Editor對象。3、向SharedPreferences.Editor對象中添加數(shù)據(jù)。4、調(diào)用mit方法將添加的數(shù)據(jù)提交。Conte*t.getSharedPreferences(文件名稱,操作模式)文件名稱不存在就會創(chuàng)立一個,操作模式有兩種:MODE_PRIVATE:默認操作模式,直接在把第二個參數(shù)寫0就是默認使用這種操作模式,這種模式表示只有當前的應用程序才可以對當前這個SharedPreferences文件進展讀寫。MODE_MULTI_PRIVATE:用于多個進程共同操作一個SharedPreferences文件。注:MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE這兩種模式已經(jīng)在android 4.2版本以后廢棄了。方法2:Activity.getPreferences(文件名,操作

溫馨提示

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

評論

0/150

提交評論