Android考試知識點考試.doc_第1頁
Android考試知識點考試.doc_第2頁
Android考試知識點考試.doc_第3頁
Android考試知識點考試.doc_第4頁
Android考試知識點考試.doc_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

精品文檔考試知識點(Android閉卷考試)1. 理解Android常見的幾種布局。幾種布局的高和寬,制定LinearLayout,線性布局,布局中的控件在線性方向上依次排列。默認控件水平方向排列。android:orientation=”horizontal”android:orientation=”vertical”注意:當是水平方向排列,控件寬度不能設(shè)置為android:layout_width=match_parent否則控件會把水平方向沾滿,其他控件無法會控件覆蓋(無法放置)當是垂直方向,內(nèi)部控件不能將android:layout_height=match_parent指定為match_parent android:layout_weight=1,使用比例方式來指定控件的大小RelativeLayout,相對布局,是通過相對定位的方式讓布局中控件可以出現(xiàn)在布局的任何位置。內(nèi)部控件,三種屬性, 屬性值是true或falseandroid:layout_centerHrizontal 水平居中,屬性值是”id/*“android:layout_below 在某元素的下方屬性值是數(shù)值android:layout_marginLeft 離某元素左邊緣的距離FrameLayout,幀布局,簡單,應(yīng)用場景少,和碎片一起使用,沒有定位方式,所有控件默認在布局的左上角,后面的會覆蓋前面的。每一個組件都代表一個畫面用該布局可以實現(xiàn)動畫效果PercentFrame(Relative)Layout 百分比布局:布局中可以不用wrap_content,match_parent等方式來指定控件的大小,直接指定控件所占的百分比,實現(xiàn)平分布局甚至任意比例分割布局。注意百分比布局需要添加庫依賴 support:percent:24.由于LinearLayout本身支持按比例指定控件大小,所以百分比布只為RelativeLayout和RelativeLayout功能擴展表格布局(Tablelayout)采用行列的形式管理UI組件,無需明確地聲明它的行列數(shù), 而是通過添加TableRow、其他組件來控制表格的行數(shù)和列數(shù)GridLayout是Android4.0之后新增的布局管理器,因此正常情況下需要在 Android 4.0 之后的版本中才能使用,如果希望在更早的版本中使用的話,需要導入相應(yīng)的支撐庫(v7包的gridlayout包)。Grid Layout 網(wǎng)格布局,和前面所講的 Table Layout(表格布局) 有點類似,不過他有很多前者沒有的東西,因此也更加好用:- 可以自己設(shè)置布局中組件的排列方式- 可以自定義網(wǎng)格布局有多少行、列- 可以直接設(shè)置組件位于某行某列- 可以設(shè)置組件橫跨幾行或者幾列Absolute Layout 它不提供任何布局控制,而是由開發(fā)人員自己通過X、Y坐標來控制組件的位置。運行Android應(yīng)用的手機往往千差萬別,屏幕大小、分別率、屏幕密度等都可能存在較大的差異,使用絕對布局的話很難做機型適配-已經(jīng)被廢棄2. 理解Android應(yīng)用程序開發(fā)過程中,常見的四種設(shè)計模式及各自的使用場合。ListView-Adapter、Builder-Dialog、Factory-選項卡、Listener-事件監(jiān)聽。1適配器模式:簡介:將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口,從而使原本因接口不匹配而無法再一起工作的兩個類能夠在一起工作。不同的數(shù)據(jù)提供者使用一個適配器來向一個相同的客戶提供服務(wù)。舉例:ListView或GridView的Adapter。2建造者模式:簡介:將一個復雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的顯示,但其根本還是不變。舉例:AlertDialog.Builder.AlertDialog.Builder, 使用該Builder來構(gòu)建復雜的AlertDialog對象工廠模式:定義一個用于創(chuàng)建對象的接口,讓子類決定將哪一個類實例化。外部不需要關(guān)心工廠是如何創(chuàng)建一個復雜產(chǎn)品的過程示例:BitmapFactory位圖工廠,專門用來將指定的圖片轉(zhuǎn)換為指定的位圖Bitmap。監(jiān)聽器模式事件源經(jīng)過事件的封裝傳給監(jiān)聽器,當事件源觸發(fā)事件后,監(jiān)聽器接收到事件對象可以回調(diào)事件的方法.Listener-事件監(jiān)聽觀察者模式:定義對象間是一(Subject)對多(Observer)的依賴關(guān)系,當一個對象發(fā)生變化時,其它依賴該對象的對象都會收到通知,并隨著變化。廣播機制就是觀察者模式ListView和BaseAdapter組合時,當BaseAdapter的item改變時,我們經(jīng)常會調(diào)用notifyDataSetChanged(),通知Listview刷新3. Android中可支持網(wǎng)頁的縮放的視圖(View)及其功能在Android系統(tǒng)中,內(nèi)置了一款高性能的瀏覽器,其內(nèi)核就是WebKit,WebView網(wǎng)頁視圖,就是在這個基礎(chǔ)上封裝的一個控件,我們可以直接用這個控件在應(yīng)用程序內(nèi)去顯示W(wǎng)eb頁面,直接用HTML文件做為布局文件,可以和JavaScript交互調(diào)用。顯示和渲染web頁面(1) .直接顯示網(wǎng)頁 設(shè)置在當前應(yīng)用中打開網(wǎng)頁,如果不設(shè)置的話會使用手機瀏覽器打開網(wǎng)頁 mWebView.setWebViewClient(new WebViewClient() Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) view.loadUrl(/); return true; ); mWebView.loadUrl(/);(2) 和js交互設(shè)置支持JavascriptWebSettings settings = webView.getSettings();settings.setJavaScriptEnabled(true);(3) 可以利用html做界面布局4. 理解View和ViewGroup的用途及兩者之間的關(guān)系。繼承結(jié)構(gòu):View是ViewGroup的父類類。View是所有UI組件的基類,而 ViewGroup是容納這些組件的容器,其本身也是從View派生出來的.View中所有的子類成為widgets,viewgroup的子類成為layout。View和ViewGroup之間采用了組合設(shè)計模式,可以使得“部分-整體”同等對待。ViewGroup作為布局容器類的最上層,布局容器里面又可以有View和ViewGroup。對于setContentView(R.layout.layout的xml文件)方法,Activity其實不是顯示視圖(直觀上感覺是它),實際上Activity調(diào)用了PhoneWindow的setContentView()方法,然后加載視圖,將視圖放到這個Window上,而Activity其實構(gòu)造的時候初始化的是Window(PhoneWindow),Activity其實是個控制單元,即可視的人機交互界面。Activity是一個工人,它來控制Window;Window是一面顯示屏,用來顯示信息;View就是要顯示在顯示屏上的信息,這些View都是層層重疊在一起(通過infalte()和addView())放到Window顯示屏上的。而LayoutInfalter就是用來生成View的一個工具,XML布局文件就是用來生成View的原料。(2).Activity、Window、View之間的關(guān)系:Activity是Window和View之間的橋梁,將View的內(nèi)容信息顯示在Window窗口上面。5. 理解Android網(wǎng)絡(luò)編程中,常見的數(shù)據(jù)傳輸格式。網(wǎng)絡(luò)傳輸中最常見的有xml和json ,還有protocol buffers,gzip,ThriftXml通過Pull,SAX和Dom方式解析Json用JSONObject和GSON解析。Protocol Buffers一種數(shù)據(jù)描述語言,類似于XML能夠?qū)⒔Y(jié)構(gòu)化數(shù)據(jù)序列化類似于XML,但更小,更快,更簡單經(jīng)常用到j(luò)son、xml等格式的數(shù)據(jù),這些數(shù)據(jù)在傳輸前可以進行壓縮,這時候就會涉及到一種壓縮格式Gzip。Gzip的壓縮比率非常大,有的甚至能達到70%以上,可以大大減少傳輸內(nèi)容,提高用戶的傳輸速度,進而提高用戶的體驗6. 理解基本組件Activity的相關(guān)知識(如重載方法等)。Android應(yīng)用有四大組件Activity、Service、BroadcastReceiver、ContentProviderContentProvider組件:用于Android應(yīng)用之間實現(xiàn)實時的數(shù)據(jù)交換。常和ContentResolver一起使用BroadcastReceiver組件:廣播消息接收器,類似于事件編程中的監(jiān)聽器,但是不同的是普通的事件監(jiān)聽器監(jiān)聽的事件源是程序中的對象,而BroadcastReceiver監(jiān)聽的事件源是Android應(yīng)用程序中的其它組件。Service組件: 通常位于后臺運行,一般不需要與用戶交互,所以沒有圖形界面。Service組件運行起來后會有獨立的生命周期,它通常用于為其他組件提供后臺服務(wù)或監(jiān)控其他組件的運行狀態(tài)(1) activity是一種可以包含用戶界面的組件,主要用于和用戶進行交互表現(xiàn)形式是一個屏幕,功能是顯示界面,消息傳遞整個生命周期:onCreate()-onDestroy()可見的生命周期:onStart()-onStop()前臺的生命周期: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)(當一個活動不再處于棧頂?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)。理解何時需要在Activity中重寫方法onActivityResult?當使用startActivityForResult()(在第一個活動中)方法啟動另一個Activity時,需要在第一個活動中重寫onActivityResult()方法,獲得被啟動Activity返回的結(jié)果。Intent intent=new Intent(this,secondeActivity.class);startActivityForResult(intent,int 請求碼);重寫 Override protected void onActivityResult(int requestCode, int resultCode, Intent data) String result = data.getExtras().getString(result);/得到新Activity 關(guān)閉后返回的數(shù)據(jù) Log.i(TAG, result); 在第二個活動中:點擊事件中/數(shù)據(jù)是使用Intent返回 Intent intent = new Intent(); /把返回數(shù)據(jù)存入Intent intent.putExtra(result, My name is linjiqin); /設(shè)置返回數(shù)據(jù) OtherActivity.this.setResult(RESULT_OK, intent); /關(guān)閉Activity OtherActivity.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.putExtra(“名字”,p);接受數(shù)據(jù):Person p2=getIntent().getSerializableExtra(“名字);Parcelable,同樣需要類繼承Parcelable接口,但需要在person類中重寫接口中兩個方法,必須有一個實現(xiàn)了Parcelable.Creator接口的靜態(tài)常量成員字段。接受數(shù)據(jù)方法getIntent.getParcelableExtra(“名字);CharSequence、CharSequence接口,實現(xiàn)了這個接口的類有:CharBuffer、String、StringBuffer、StringBuilder這個四個類。所以處理String或者StringBuffer的類就不用重載。Bundle:一種存放字符串和Parcelable類型數(shù)據(jù)的map類型的容器類,通過存放數(shù)據(jù)鍵(key)獲取對應(yīng)的各種類型的值(value),而且必須通過鍵(key)獲取。Intent intent = 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.putExtras(bundle);/把Bundle塞入Intent里面startActivity(intent);/開始切換Activity2接收數(shù)據(jù)Intent intent = this.getIntent();/獲取已有的intent對象Bundle bundle = intent.getExtras();/獲取intent里面的bundle對象string = bundle.getString(something);/獲取Bundle里面的字符串8 理解Android中包含哪幾個標準的“選擇”部件(View)。 RadioButton單選按鈕(同一組RadioButton放在一個RadioGroup中) CheckBox復選框 Spinner下拉列表框 DatePicker日期選擇組件 TimePicker事件選擇組件 NumberPicker數(shù)值選擇組件9理解Android工程中哪些目錄中的文件是由Eclipse自動編譯生成。src、存放的是該項目的源代碼bin、編譯后自動生成目錄。二進制文件,包括class、資源文件、dex、apk等gen、自動生成的文件目錄。該目錄下的文件全部都是ADT自動生成的,一般并不需要去修改,實際上該目錄下只定義了一個R.java文件,該文件相當于項目的字典,為項目中用戶界面、字符串、圖片等資源都會在該類中創(chuàng)建其惟一的IDres存放應(yīng)用程序中經(jīng)常使用的資源文件等。9 理解SQLite的一般用法。SQLite是一款輕量級關(guān)系型數(shù)據(jù)庫。安卓內(nèi)置SQLite。SQLiteOpenHelper:SQLiteOpenHelper是是一個輔助類。這個類主要生成一個數(shù)據(jù)庫,并對數(shù)據(jù)庫的版本進行管理。當在程序當中調(diào)用這個類的方法getWritableDatabase()或者 getReadableDatabase()方法的時候,創(chuàng)建或打開一個現(xiàn)有的數(shù)據(jù)庫,并返回一個SQLiteDatabase對象用于對數(shù)據(jù)庫進行讀寫操作。當數(shù)據(jù)庫不可寫入(磁盤已滿),getReadabelDatabase()返回的對象將以只讀的方式打開數(shù)據(jù)庫,getReadableDatabase()出現(xiàn)異常。構(gòu)造方法:public MyDatagbaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) this,數(shù)據(jù)庫名.db,null,版本1 super(context, name, factory, version);SQLiteOpenHelper 是一個抽象類,我們通常需要繼承它,并且實現(xiàn)里面的2個抽象方法:1.onCreate(SQLiteDatabase db)db.execSQL(sql語句,建立表)在數(shù)據(jù)庫第一次生成(調(diào)用getdat.和getWriteabledatabase方法)的時候會調(diào)用這個方法,也就是說,只有在創(chuàng)建數(shù)據(jù)庫的時候才會調(diào)用,當然也有一些其它的情況,一般我們在這個方法里邊生成數(shù)據(jù)庫表。2.onUpgrade(SQLiteDatabase,int,int)當數(shù)據(jù)庫需要升級(修改表,創(chuàng)建新表,數(shù)據(jù)備份,刪除表)的時候,Android系統(tǒng)會調(diào)用這個方法。比如增加一張表。這里要db.execSQL(sql語句)如果是建的表已經(jīng)存在,就要先刪除,或不建。3.onOpen(SQLiteDatabase)非抽象:當打開數(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(); /當cv參數(shù)為空或者沒有內(nèi)容的時候,insert會失敗,為了防止這種情況發(fā)生, / 要在第二個參數(shù)設(shè)置一個列名,當要插入的行為空行時,將指定的列名值設(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 StringString.valueOf(id);,后面的兩個參數(shù)不指定的話默認刪除所有行或者直接用sql來操作sqliteDataBase.execSQL(sql語句,new String參數(shù).);11. 理解正確設(shè)置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)部類xml布局文件中添加組件,設(shè)置組件id;在activity中獲取對應(yīng)id的組件,用setOnClickListener(new OnClickListener()的方式綁定控件與事件監(jiān)聽器,在內(nèi)部類中重載onClick()方法,實現(xiàn)想要的功能。a的優(yōu)化方案:使用內(nèi)部類,還有外部類,但很少用在Activity中定義一個內(nèi)部類繼承監(jiān)聽器接口,或new一個該監(jiān)聽器的對象setOnClickListener(對象實例)xml布局文件中添加組件,設(shè)置組件id;在activity中編寫內(nèi)部類實現(xiàn)OnClickListener,實現(xiàn)onClick()方法。綁定按鈕與事件監(jiān)聽器:button.setOnClickListener(內(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.makeText(getApplicationContext(), 按鈕被點擊了, Toast.LENGTH_SHORT).show(); c.直接綁定到標簽利用布局文件中的onClick屬性xml布局文件中添加組件,設(shè)置onClick屬性;Java代碼中實現(xiàn)與onClick屬性值同名的方法名。d.Activiry作為事件監(jiān)聽器。整個Activity實現(xiàn)onClickListener接口,適用于控件量多的情況。xml布局文件中添加組件,設(shè)置組件id;Activity實現(xiàn)onClickListener接口,即實現(xiàn)onClick方法,完成各組件的功能。在onCreate()中綁定控件與事件監(jiān)聽器:findViewById(R.id.Button03).setOnClickListener(this);在onCreate()方法外重寫Overridepublic void onClick(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即可添加到TabHost中,每一頁是內(nèi)容+標簽,內(nèi)容由FrameLayout顯示定義布局: 在XML文件中使用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.newTabSpec(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的名字,可以是setIndicator(Clock),也可以包含其他的屬性,如圖片:setIndicator(商場,getResources().getDrawable(android.R.drawable.arrow_down_float)tabs.addTab(spec)將這個tab添加如TabHost13 理解AsyncTask在Android耗時操作中的使用方法。AysncTask是谷歌封裝的實現(xiàn)異步操作,用于執(zhí)行耗時任務(wù)并在UI線程中更新結(jié)果的抽象類。背后的實現(xiàn)原理就是異步消息機制(Handler)AsyncTask是一個輕量級異步類,用戶可以直接繼承AsyncTask,在類中實現(xiàn)一步操作,并提供接口反饋當前異步執(zhí)行的程度(可以通過接口實現(xiàn)UI進度更新),最后反饋執(zhí)行的結(jié)果給UI主線程。使用方法:繼承AsyncTask并且制定傳入?yún)?shù)類型、描述過程類型以及返回值類型,這些類型均是泛型需要重寫的4個方法:onPreExecute():這個方法是在異步加載進行前執(zhí)行的,用于界面上的初始化操作,必須現(xiàn)實一個進度條對話框。doInBackground(Params.):只有這個方法是在子線程中進行的,所有下載或者加載等耗時的操作,都可以在這里執(zhí)行。任務(wù)一旦完成,就可以通過return語句將任務(wù)的執(zhí)行結(jié)果返回。如果AsyncTask的第三個泛型參數(shù)指定的是void,就可以不用返回。更新UI操作,需要調(diào)用publishProgress(傳遞的參數(shù))方法來完成。onProgressUpdate(接收的參數(shù)):這個方法是在doInBackground方法中執(zhí)行了publishProgress()方法的時候執(zhí)行,publishProgress()方法是向此方法傳遞一些用于描述過程的參數(shù),比如用Integer來描述下載的進度等,實現(xiàn)對UI進行操作。onPostExecute(Result):這個方法是在doInBackground()方法執(zhí)行完畢return之后執(zhí)行,根據(jù)return的result類型來判斷進行一些UI操作。比如提醒任務(wù)結(jié)果,關(guān)掉進度條對話框等以上的方法中,只有doInBackground()這個方法是在子線程中執(zhí)行,其他都是在UI線程,所以可以直接對UI進行更新。New DownloadTask().execte();啟動這個任務(wù) / 這里定義的一個AsyncTask子類,輸入?yún)?shù)類型為空,過程指示參數(shù)為整型,異步返回類型為布爾28 class DownLoad extends AsyncTask Asynctask的不足之處: 1.AsyncTask可能存在新開大量線程消耗系統(tǒng)資源和導致應(yīng)用FC的風險 2.AsyncTask一旦執(zhí)行了 doInBackground,就算調(diào)用取消方法,也會將 doInBackground里面的代碼執(zhí)行完畢,才會停止。 3.調(diào)用了AsyncTask#execute()后,AsyncTask會把任務(wù)交給線程池,由線程池來管理創(chuàng)建運行線程。線程池不經(jīng)維護,當大量異步發(fā)生時,導致線程池滿了,會出異常。14 理解Android客戶端程序與后端Web服務(wù)器應(yīng)用程序之間的通信流程??蛻舳讼蚍?wù)器發(fā)送一條HTTP請求,服務(wù)器接收到請求后會返回數(shù)據(jù)給客戶端,然后客戶端對數(shù)據(jù)進行解析。請求方式 HttpURLConnection和HttpClient,但后者被棄用在6.0后。但請求數(shù)據(jù)是在子線程中,而數(shù)據(jù)更新是在UI主線程中必須在主線程中開啟一個線程,并且使用Handler這個對象來實現(xiàn)數(shù)據(jù)的異步請求.然后當請求響應(yīng)完成之后才會在界面中更新數(shù)據(jù)。1. 手機客戶端向Web應(yīng)用服務(wù)器發(fā)送請求信息1) 首先引用所需要的各種API,比如http,io等2) 定義訪問網(wǎng)站的URL(3)創(chuàng)建HttpURLConnection對象,該對象的主要作用是將Android手機端的數(shù)據(jù)提交給Web應(yīng)用服務(wù)器3) 設(shè)置數(shù)據(jù)編碼方式Android手機在將準備好的數(shù)據(jù)發(fā)送到Web服務(wù)器之前,需要對數(shù)據(jù)的編碼進行規(guī)定,這樣服務(wù)器在接收到這些數(shù)據(jù)后,就會根據(jù)發(fā)送過去的文字編碼處理和顯示。4) 提交HttpURLConnection對象和獲取服務(wù)器HttpResponse響應(yīng)數(shù)據(jù)完成前面的工作,就該將數(shù)據(jù)提交給Web應(yīng)用服務(wù)器了,在應(yīng)用服務(wù)接收Android手機提交的數(shù)據(jù)后,經(jīng)過處理,將要返回(響應(yīng))給Android手機的數(shù)據(jù)打包到一個HttpResponse對象中,發(fā)回給手機。2. 手機客戶端接受響應(yīng)數(shù)據(jù)獲取響應(yīng)服務(wù)的數(shù)據(jù)從Web服務(wù)器響應(yīng)到手機終端的數(shù)據(jù)一般打包在一個字節(jié)數(shù)組中,關(guān)鍵是這個字節(jié)數(shù)組中可能包含了各種不同的數(shù)據(jù)類型,為此,需要采取Java數(shù)據(jù)流和過濾流的方法從字節(jié)數(shù)據(jù)中取出各種類型的數(shù)據(jù)15 理解MessageQueue的工作原理。是消息隊列的意思,存放所有通過Handler發(fā)送的消息。這部分消息會一直存在消息對列中,等待被處理,每個線程只有一個MessageQueue對象MessageQueue是比較低層的類,是持有Message(在Looper中派發(fā))的一個鏈表,但Message不是直接添加到MessageQueue中的,而是通過與Looper相關(guān)聯(lián)的Handler來進行的。在當前線程中可以通過調(diào)用Looper.myQueue()方法來獲取當前線程的MessageQueueMessageQueue,主要包含2個操作:插入和讀取。讀取操作會伴隨著刪除操作,插入和讀取對應(yīng)的方法分別為enqueueMessage和next,其中enqueueMessage的作用是往消息隊列中插入一條消息,而next的作用是從消息隊列中取出一條消息并將其從消息隊列中移除。雖然MessageQueue叫消息隊列,但是它的內(nèi)部實現(xiàn)并不是用的隊列,實際上它是通過一個單鏈表的數(shù)據(jù)結(jié)構(gòu)來維護消息列表,單鏈表在插入和刪除上比較有優(yōu)勢。Message: 是線程之間傳遞的消息,在內(nèi)部攜帶少量信息,用于不同線程間交換數(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對象異步消息的處理機制:(1) 主線程創(chuàng)建Handler對象,并重寫handleMessage()方法。(2) 當子線程需要進行UI操作,就創(chuàng)建一個Message對象,并通過Handler把這條消息發(fā)送出去。之后,這條消息會被添加到MessageQueue中等待被處理。(3) 而Looper一直嘗試從MessageQueue中取出待處理的消息,如果有,就分發(fā)到Handler的handleMessage()方法處理。由于Handler對象是在主線程創(chuàng)建,所以可以更新UI(4)Looper是每個線程中MessageQueue的管家,在loop()方法被調(diào)用后就會處于無限循環(huán)中,每當發(fā)現(xiàn)隊列中有一個消息,就會取出,放進handleMessage()方法中處理16 理解SharedPreferences的使用方法。SharedPreferences是Android平臺上一個輕量級的存儲類,以鍵值對形式來保存應(yīng)用的一些常用配置。它是使用鍵值對的方式存儲數(shù)據(jù)。存入什么類型,讀取出來就是什么類型1得到SharedPreferences對象2、調(diào)用SharedPreferences對象的edit()方法來獲取一個SharedPreferences.Editor對象。3、向SharedPreferences.Editor對象中添加數(shù)據(jù)。4、調(diào)用commit方法將添加的數(shù)據(jù)提交。Context.getSharedPreferences(文件名稱,操作模式)文件名稱不存在就會創(chuàng)建一個,操作模式有兩種:MODE_PRIVATE:默認操作模式,直接在把第二個參數(shù)寫0就是默認使用這種操作模式,這種模式表示只有當前的應(yīng)用程序才可以對當前這個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

提交評論