版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、-. z.考試知識(shí)點(diǎn)Android閉卷考試?yán)斫釧ndroid常見(jiàn)的幾種布局。幾種布局的高和寬,制定LinearLayout,線性布局,布局中的控件在線性方向上依次排列。默認(rèn)控件水平方向排列。android:orientation=horizontalandroid:orientation=vertical注意:當(dāng)是水平方向排列,控件寬度不能設(shè)置為android:layout_width=match_parent否則控件會(huì)把水平方向沾滿,其他控件無(wú)法會(huì)控件覆蓋無(wú)法放置當(dāng)是垂直方向,內(nèi)部控件不能將android:layout_height=match_parent指定為match_parent a
2、ndroid:layout_weight=1,使用比例方式來(lái)指定控件的大小RelativeLayout,相對(duì)布局,是通過(guò)相對(duì)定位的方式讓布局中控件可以出現(xiàn)在布局的任何位置。內(nèi)部控件,三種屬性, 屬性值是true或falseandroid:layout_centerHrizontal 水平居中,屬性值是id/*“android:layout_below 在*元素的下方屬性值是數(shù)值android:layout_marginLeft 離*元素左邊緣的距離FrameLayout,幀布局,簡(jiǎn)單,應(yīng)用場(chǎng)景少,和碎片一起使用,沒(méi)有定位方式,所有控件默認(rèn)在布局的左上角,后面的會(huì)覆蓋前面的。每一個(gè)組件都代表一個(gè)
3、畫(huà)面用該布局可以實(shí)現(xiàn)動(dòng)畫(huà)效果PercentFrameRelative)Layout 百分比布局:布局中可以不用wrap_content,match_parent等方式來(lái)指定控件的大小,直接指定控件所占的百分比,實(shí)現(xiàn)平分布局甚至任意比例分割布局。注意百分比布局需要添加庫(kù)依賴 support:percent:24.由于LinearLayout本身支持按比例指定控件大小,所以百分比布只為RelativeLayout和RelativeLayout功能擴(kuò)展表格布局Tablelayout采用行列的形式管理UI組件,無(wú)需明確地聲明它的行列數(shù), 而是通過(guò)添加TableRow、其他組件來(lái)控制表格的行數(shù)和列數(shù)Gr
4、idLayout是Android4.0之后新增的布局管理器,因此正常情況下需要在 Android 4.0 之后的版本中才能使用,如果希望在更早的版本中使用的話,需要導(dǎo)入相應(yīng)的支撐庫(kù)v7包的gridlayout包。Grid Layout 網(wǎng)格布局,和前面所講的 Table Layout(表格布局) 有點(diǎn)類似,不過(guò)他有很多前者沒(méi)有的東西,因此也更加好用:- 可以自己設(shè)置布局中組件的排列方式- 可以自定義網(wǎng)格布局有多少行、列- 可以直接設(shè)置組件位于*行*列- 可以設(shè)置組件橫跨幾行或者幾列Absolute Layout 它不提供任何布局控制,而是由開(kāi)發(fā)人員自己通過(guò)*、Y坐標(biāo)來(lái)控制組件的位置。運(yùn)行And
5、roid應(yīng)用的手機(jī)往往千差萬(wàn)別,屏幕大小、分別率、屏幕密度等都可能存在較大的差異,使用絕對(duì)布局的話很難做機(jī)型適配-已經(jīng)被廢棄理解Android應(yīng)用程序開(kāi)發(fā)過(guò)程中,常見(jiàn)的四種設(shè)計(jì)模式及各自的使用場(chǎng)合。ListView-Adapter、Builder-Dialog、Factory-選項(xiàng)卡、Listener-事件監(jiān)聽(tīng)。1適配器模式:簡(jiǎn)介:將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,從而使原本因接口不匹配而無(wú)法再一起工作的兩個(gè)類能夠在一起工作。不同的數(shù)據(jù)提供者使用一個(gè)適配器來(lái)向一個(gè)一樣的客戶提供效勞。舉例:ListView或GridView的Adapter。2建造者模式:簡(jiǎn)介:將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它
6、的表示別離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)立不同的顯示,但其根本還是不變。舉例:AlertDialog.Builder.AlertDialog.Builder, 使用該Builder來(lái)構(gòu)建復(fù)雜的AlertDialog對(duì)象工廠模式:定義一個(gè)用于創(chuàng)立對(duì)象的接口,讓子類決定將哪一個(gè)類實(shí)例化。外部不需要關(guān)心工廠是如何創(chuàng)立一個(gè)復(fù)雜產(chǎn)品的過(guò)程例如:BitmapFactory位圖工廠,專門(mén)用來(lái)將指定的圖片轉(zhuǎn)換為指定的位圖Bitmap。監(jiān)聽(tīng)器模式事件源經(jīng)過(guò)事件的封裝傳給監(jiān)聽(tīng)器,當(dāng)事件源觸發(fā)事件后,監(jiān)聽(tīng)器接收到事件對(duì)象可以回調(diào)事件的方法.Listener-事件監(jiān)聽(tīng)觀察者模式:定義對(duì)象間是一Subject對(duì)多Obser
7、ver的依賴關(guān)系,當(dāng)一個(gè)對(duì)象發(fā)生變化時(shí),其它依賴該對(duì)象的對(duì)象都會(huì)收到通知,并隨著變化。播送機(jī)制就是觀察者模式ListView和BaseAdapter組合時(shí),當(dāng)BaseAdapter的item改變時(shí),我們經(jīng)常會(huì)調(diào)用notifyDataSetChanged(),通知Listview刷新Android中可支持網(wǎng)頁(yè)的縮放的視圖(View)及其功能在Android系統(tǒng)中,內(nèi)置了一款高性能的瀏覽器,其內(nèi)核就是WebKit,WebView網(wǎng)頁(yè)視圖,就是在這個(gè)根底上封裝的一個(gè)控件,我們可以直接用這個(gè)控件在應(yīng)用程序內(nèi)去顯示W(wǎng)eb頁(yè)面,直接用HTML文件做為布局文件,可以和JavaScript交互調(diào)用。顯示和渲染
8、web頁(yè)面.直接顯示網(wǎng)頁(yè) 設(shè)置在當(dāng)前應(yīng)用中翻開(kāi)網(wǎng)頁(yè),如果不設(shè)置的話會(huì)使用手機(jī)瀏覽器翻開(kāi)網(wǎng)頁(yè) mWebView.setWebViewClient(new WebViewClient() Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) view.loadUrl( s:/.baidu./); return true; ); mWebView.loadUrl( s:/.baidu./);和js交互設(shè)置支持JavascriptWebSettings settings =
9、webView.getSettings();settings.setJavaScriptEnabled(true);可以利用html做界面布局理解View和ViewGroup的用途及兩者之間的關(guān)系。繼承構(gòu)造:View是ViewGroup的父類類。View是所有UI組件的基類,而 ViewGroup是容納這些組件的容器,其本身也是從View派生出來(lái)的.View中所有的子類成為widgets,viewgroup的子類成為layout。View和ViewGroup之間采用了組合設(shè)計(jì)模式,可以使得“局部-整體同等對(duì)待。ViewGroup作為布局容器類的最上層,布局容器里面又可以有View和ViewGr
10、oup。對(duì)于setContentView(R.layout.layout的*ml文件)方法,Activity其實(shí)不是顯示視圖直觀上感覺(jué)是它,實(shí)際上Activity調(diào)用了PhoneWindow的setContentView()方法,然后加載視圖,將視圖放到這個(gè)Window上,而Activity其實(shí)構(gòu)造的時(shí)候初始化的是WindowPhoneWindow,Activity其實(shí)是個(gè)控制單元,即可視的人機(jī)交互界面。Activity是一個(gè)工人,它來(lái)控制Window;Window是一面顯示屏,用來(lái)顯示信息;View就是要顯示在顯示屏上的信息,這些View都是層層重疊在一起通過(guò)infalte()和addVie
11、w()放到Window顯示屏上的。而LayoutInfalter就是用來(lái)生成View的一個(gè)工具,*ML布局文件就是用來(lái)生成View的原料。(2).Activity、Window、View之間的關(guān)系:Activity是Window和View之間的橋梁,將View的內(nèi)容信息顯示在Window窗口上面。理解Android網(wǎng)絡(luò)編程中,常見(jiàn)的數(shù)據(jù)傳輸格式。網(wǎng)絡(luò)傳輸中最常見(jiàn)的有*ml和json ,還有protocol buffers,gzip,Thrift*ml通過(guò)Pull,SA*和Dom方式解析Json用JSONObject和GSON解析。Protocol Buffers一種數(shù)據(jù)描述語(yǔ)言,類似于*ML能
12、夠?qū)?gòu)造化數(shù)據(jù)序列化類似于*ML,但更小,更快,更簡(jiǎn)單經(jīng)常用到j(luò)son、*ml等格式的數(shù)據(jù),這些數(shù)據(jù)在傳輸前可以進(jìn)展壓縮,這時(shí)候就會(huì)涉及到一種壓縮格式Gzip。Gzip的壓縮比率非常大,有的甚至能到達(dá)70%以上,可以大大減少傳輸內(nèi)容,提高用戶的傳輸速度,進(jìn)而提高用戶的體驗(yàn)理解根本組件Activity的相關(guān)知識(shí)(如重載方法等)。Android應(yīng)用有四大組件Activity、Service、BroadcastReceiver、ContentProviderContentProvider組件:用于Android應(yīng)用之間實(shí)現(xiàn)實(shí)時(shí)的數(shù)據(jù)交換。常和ContentResolver一起使用BroadcastR
13、eceiver組件:播送消息接收器,類似于事件編程中的監(jiān)聽(tīng)器,但是不同的是普通的事件監(jiān)聽(tīng)器監(jiān)聽(tīng)的事件源是程序中的對(duì)象,而B(niǎo)roadcastReceiver監(jiān)聽(tīng)的事件源是Android應(yīng)用程序中的其它組件。Service組件: 通常位于后臺(tái)運(yùn)行,一般不需要與用戶交互,所以沒(méi)有圖形界面。Service組件運(yùn)行起來(lái)后會(huì)有獨(dú)立的生命周期,它通常用于為其他組件提供后臺(tái)效勞或監(jiān)控其他組件的運(yùn)行狀態(tài)activity是一種可以包含用戶界面的組件,主要用于和用戶進(jìn)展交互表現(xiàn)形式是一個(gè)屏幕,功能是顯示界面,消息傳遞整個(gè)生命周期:onCreate()-onDestroy()可見(jiàn)的生命周期:onStart()-onS
14、top()前臺(tái)的生命周期:onResume()-onPause()運(yùn)行,暫停不在棧頂,但可見(jiàn),停頓完全不可見(jiàn),有可能因內(nèi)存不夠被回收,銷毀從棧中移除覆蓋了activity生命周期的每一個(gè)環(huán)節(jié)onCreate():當(dāng)activity是被創(chuàng)立時(shí)候,會(huì)自動(dòng)運(yùn)行該方法。該方法做一些初始化動(dòng)作,比方加載布局,綁定時(shí)間等。onStart():活動(dòng)在有不可見(jiàn)變?yōu)榭梢?jiàn)的時(shí)候調(diào)用。onResume():當(dāng)activity開(kāi)場(chǎng)與用戶交互獲得焦點(diǎn)時(shí),會(huì)調(diào)用onResume,此是活動(dòng)一定位于返回棧的棧頂,并處于運(yùn)行狀態(tài)。onPause():當(dāng)系統(tǒng)準(zhǔn)備啟動(dòng)或恢復(fù)另一個(gè)活動(dòng)時(shí)調(diào)用。此時(shí)活動(dòng)處于暫停狀態(tài)當(dāng)一個(gè)活動(dòng)不再處于棧
15、頂?shù)奈恢茫匀豢梢?jiàn),彈出一個(gè)對(duì)話框或者一個(gè)不能占滿屏幕的活動(dòng)都會(huì)導(dǎo)致前一個(gè)活動(dòng)處于暫停狀態(tài)通常會(huì)在這個(gè)方法中釋放掉一些占用cpu的資源onStop():當(dāng)這個(gè)activity完全看不見(jiàn)的時(shí)候,會(huì)調(diào)用onStop方法。以下三種情況都會(huì)使這個(gè)activity調(diào)用onStop()方法,第一種是一個(gè)新的activity被執(zhí)行,第二種是一個(gè)已經(jīng)存在的activity被切換到最前端,第三種是這個(gè)activity要被銷毀。onRestart():把a(bǔ)ctivity從停頓狀態(tài)變?yōu)檫\(yùn)行狀態(tài),活動(dòng)被重新啟用。onDestroy():當(dāng)activity銷毀前會(huì)調(diào)用該方法,之后變?yōu)殇N毀狀態(tài)。理解何時(shí)需要在Activ
16、ity中重寫(xiě)方法onActivityResult?當(dāng)使用startActivityForResult()在第一個(gè)活動(dòng)中方法啟動(dòng)另一個(gè)Activity時(shí),需要在第一個(gè)活動(dòng)中重寫(xiě)onActivityResult()方法,獲得被啟動(dòng)Activity返回的結(jié)果。Intent intent=new Intent(this,secondeActivity.class);startActivityForResult(intent,int 請(qǐng)求碼);重寫(xiě) Override protected void onActivityResult(int requestCode, int resultCode, Inte
17、nt data) String result = data.getE*tras().getString(result);/得到新Activity 關(guān)閉后返回的數(shù)據(jù) Log.i(TAG, result); 在第二個(gè)活動(dòng)中:點(diǎn)擊事件中/數(shù)據(jù)是使用Intent返回 Intent intent = new Intent(); /把返回?cái)?shù)據(jù)存入Intent intent.putE*tra(result, My name is linjiqin); /設(shè)置返回?cái)?shù)據(jù) OtherActivity.this.setResult(RESULT_OK, intent); /關(guān)閉Activity OtherActiv
18、ity.this.finish();7理解在Intent傳遞數(shù)據(jù)時(shí)使用的幾種數(shù)據(jù)類型。根本數(shù)據(jù)類型Serializable、將一個(gè)對(duì)象序列化后轉(zhuǎn)換成可以傳輸?shù)臓顟B(tài),序列化的方法是讓類自身繼承Serializable接口Person p=new Person();p.setname();.Intent intent=new Intent(源活動(dòng),目標(biāo)活動(dòng).class;intent.putE*tra(“名字,p);承受數(shù)據(jù):Person p2=getIntent().getSerializableE*tra(“名字;Parcelable,同樣需要類繼承Parcelable接口,但需要在person
19、類中重寫(xiě)接口中兩個(gè)方法,必須有一個(gè)實(shí)現(xiàn)了Parcelable.Creator接口的靜態(tài)常量成員字段。承受數(shù)據(jù)方法getIntent.getParcelableE*tra(“名字;CharSequence、CharSequence接口,實(shí)現(xiàn)了這個(gè)接口的類有:CharBuffer、String、StringBuffer、StringBuilder這個(gè)四個(gè)類。所以處理String或者StringBuffer的類就不用重載。Bundle:一種存放字符串和Parcelable類型數(shù)據(jù)的map類型的容器類,通過(guò)存放數(shù)據(jù)鍵key獲取對(duì)應(yīng)的各種類型的值value,而且必須通過(guò)鍵key獲取。Intent int
20、ent = new Intent();intent.setClass(activity1.this, activity2.class);/描述起點(diǎn)和目標(biāo)Bundle bundle = new Bundle();/創(chuàng)立Bundle對(duì)象bundle.putString(something, Activity1發(fā)來(lái)的數(shù)據(jù));/裝入數(shù)據(jù)intent.putE*tras(bundle);/把Bundle塞入Intent里面startActivity(intent);/開(kāi)場(chǎng)切換Activity2接收數(shù)據(jù)Intent intent = this.getIntent();/獲取已有的intent對(duì)象Bundl
21、e bundle = intent.getE*tras();/獲取intent里面的bundle對(duì)象string = bundle.getString(something);/獲取Bundle里面的字符串理解Android中包含哪幾個(gè)標(biāo)準(zhǔn)的“選擇部件(View)。RadioButton單項(xiàng)選擇按鈕同一組RadioButton放在一個(gè)RadioGroup中CheckBo*復(fù)選框Spinner下拉列表框DatePicker日期選擇組件TimePicker事件選擇組件NumberPicker數(shù)值選擇組件9理解Android工程中哪些目錄中的文件是由Eclipse自動(dòng)編譯生成。src、存放的是該工程的
22、源代碼bin、編譯后自動(dòng)生成目錄。二進(jìn)制文件,包括class、資源文件、de*、apk等gen、自動(dòng)生成的文件目錄。該目錄下的文件全部都是ADT自動(dòng)生成的,一般并不需要去修改,實(shí)際上該目錄下只定義了一個(gè)R.java文件,該文件相當(dāng)于工程的字典,為工程中用戶界面、字符串、圖片等資源都會(huì)在該類中創(chuàng)立其惟一的IDres存放應(yīng)用程序中經(jīng)常使用的資源文件等。理解SQLite的一般用法。SQLite是一款輕量級(jí)關(guān)系型數(shù)據(jù)庫(kù)。安卓?jī)?nèi)置SQLite。SQLiteOpenHelper:SQLiteOpenHelper是是一個(gè)輔助類。這個(gè)類主要生成一個(gè)數(shù)據(jù)庫(kù),并對(duì)數(shù)據(jù)庫(kù)的版本進(jìn)展管理。當(dāng)在程序當(dāng)中調(diào)用這個(gè)類的方法
23、getWritableDatabase()或者 getReadableDatabase()方法的時(shí)候,創(chuàng)立或翻開(kāi)一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù),并返回一個(gè)SQLiteDatabase對(duì)象用于對(duì)數(shù)據(jù)庫(kù)進(jìn)展讀寫(xiě)操作。當(dāng)數(shù)據(jù)庫(kù)不可寫(xiě)入磁盤(pán)已滿,getReadabelDatabase()返回的對(duì)象將以只讀的方式翻開(kāi)數(shù)據(jù)庫(kù),getReadableDatabase()出現(xiàn)異常。構(gòu)造方法:public MyDatagbaseHelper(Conte*t conte*t, String name, SQLiteDatabase.CursorFactory factory, int version) this,數(shù)據(jù)庫(kù)名.db
24、,null,版本1 super(conte*t, name, factory, version);SQLiteOpenHelper 是一個(gè)抽象類,我們通常需要繼承它,并且實(shí)現(xiàn)里面的2個(gè)抽象方法:1.onCreateSQLiteDatabase dbdb.e*ecSQL(sql語(yǔ)句,建立表在數(shù)據(jù)庫(kù)第一次生成調(diào)用getdat.和getWriteabledatabase方法)的時(shí)候會(huì)調(diào)用這個(gè)方法,也就是說(shuō),只有在創(chuàng)立數(shù)據(jù)庫(kù)的時(shí)候才會(huì)調(diào)用,當(dāng)然也有一些其它的情況,一般我們?cè)谶@個(gè)方法里邊生成數(shù)據(jù)庫(kù)表。2.onUpgradeSQLiteDatabase,int,int當(dāng)數(shù)據(jù)庫(kù)需要升級(jí)修改表,創(chuàng)立新表,數(shù)據(jù)
25、備份,刪除表的時(shí)候,Android系統(tǒng)會(huì)調(diào)用這個(gè)方法。比方增加一*表。這里要db.e*ecSQL(sql語(yǔ)句如果是建的表已經(jīng)存在,就要先刪除,或不建。3.onOpenSQLiteDatabase非抽象:當(dāng)翻開(kāi)數(shù)據(jù)庫(kù)時(shí)的回調(diào)函數(shù)。SQLiteDatabase sqlitedatabase=sqliteDBHelper.getWritableDatabase()插入操作 ContentValues cv = new ContentValues(); cv.put(COLUMN_NAME, person.getName(); cv.put(COLUMN_AGE, person.getAge(); /
26、當(dāng)cv參數(shù)為空或者沒(méi)有內(nèi)容的時(shí)候,insert會(huì)失敗,為了防止這種情況發(fā)生, / 要在第二個(gè)參數(shù)設(shè)置一個(gè)列名,當(dāng)要插入的行為空行時(shí),將指定的列名值設(shè)置為null sqliteDataBase.insert(TABLE_NAME, null, cv);更新:sqliteDataBase.update(TABLE_NAME, cv, COLUMN_ID+ =, new StringString.valueOf(person.getId();第三個(gè)和第4個(gè)參數(shù)不指定,默認(rèn)更新所有行刪除sqliteDataBase.delete(TABLE_NAME, COLUMN_ID + =, new Strin
27、gString.valueOf(id);,后面的兩個(gè)參數(shù)不指定的話默認(rèn)刪除所有行或者直接用sql來(lái)操作sqliteDataBase.e*ecSQLsql語(yǔ)句,new String參數(shù).);11. 理解正確設(shè)置onClickListener所需要的幾個(gè)根本步驟。View.OnClickListener:?jiǎn)螕羰录谋O(jiān)聽(tīng)器必須實(shí)現(xiàn)的接口基于監(jiān)聽(tīng)的事件處理模型:獲取普通界面組件事件源,也就是被監(jiān)聽(tīng)的對(duì)象實(shí)現(xiàn)事件監(jiān)聽(tīng)器類,該監(jiān)聽(tīng)器類是一個(gè)特殊的Java類,必須實(shí)現(xiàn)一個(gè)OnClickListener接口調(diào)用事件源的setOnClickListener()方法注冊(cè)事件監(jiān)聽(tīng)器常見(jiàn)的實(shí)現(xiàn)方法:a.匿名內(nèi)部類*m
28、l布局文件中添加組件,設(shè)置組件id;在activity中獲取對(duì)應(yīng)id的組件,用setOnClickListenernew OnClickListener的方式綁定控件與事件監(jiān)聽(tīng)器,在內(nèi)部類中重載onClick()方法,實(shí)現(xiàn)想要的功能。a的優(yōu)化方案:使用內(nèi)部類,還有外部類,但很少用在Activity中定義一個(gè)內(nèi)部類繼承監(jiān)聽(tīng)器接口,或new一個(gè)該監(jiān)聽(tīng)器的對(duì)象setOnClickListener(對(duì)象實(shí)例)*ml布局文件中添加組件,設(shè)置組件id;在activity中編寫(xiě)內(nèi)部類實(shí)現(xiàn)OnClickListener,實(shí)現(xiàn)onClick方法。綁定按鈕與事件監(jiān)聽(tīng)器:button.setOnClickListe
29、ner(內(nèi)部類的對(duì)象);btnshow.setOnClickListener(new BtnClickListener(); /定義一個(gè)內(nèi)部類,實(shí)現(xiàn)View.OnClickListener接口,并重寫(xiě)onClick()方法 class BtnClickListener implements View.OnClickListener Override public void onClick(View v) Toast.makeTe*t(getApplicationConte*t(), 按鈕被點(diǎn)擊了, Toast.LENGTH_SHORT).show(); c.直接綁定到標(biāo)簽利用布局文件中的onC
30、lick屬性*ml布局文件中添加組件,設(shè)置onClick屬性;Java代碼中實(shí)現(xiàn)與onClick屬性值同名的方法名。d.Activiry作為事件監(jiān)聽(tīng)器。整個(gè)Activity實(shí)現(xiàn)onClickListener接口,適用于控件量多的情況。*ml布局文件中添加組件,設(shè)置組件id;Activity實(shí)現(xiàn)onClickListener接口,即實(shí)現(xiàn)onClick方法,完成各組件的功能。在onCreate中綁定控件與事件監(jiān)聽(tīng)器:findViewById(R.id.Button03).setOnClickListener(this);在onCreate()方法外重寫(xiě)Overridepublicvoid onCl
31、ick(View arg0) if(arg0.getId()=R.id.button)System.out.println(click Button.); 12理解TabHost, TabSpec, TabWidget等根本類的用法。TabHost組件可以在界面中存放多個(gè)選項(xiàng)卡,必須有TabWidget與FrameLayout組件TabHost組件中必備的兩個(gè)組件TabWidget: 該組件就是TabHost標(biāo)簽頁(yè)中上部 或者 下部的按鈕, 可以點(diǎn)擊按鈕切換選項(xiàng)卡;直接在tabhost中加不加,即使add了選項(xiàng)卡,也無(wú)法區(qū)分開(kāi)選項(xiàng)卡TabSpec: 代表了選項(xiàng)卡界面, 添加一個(gè)TabSpec即
32、可添加到TabHost中,每一頁(yè)是內(nèi)容+標(biāo)簽,內(nèi)容由FrameLayout顯示定義布局: 在*ML文件中使用TabHost組件, 并在其中定義一個(gè)FrameLayout選項(xiàng)卡內(nèi)容;b.繼承TabActivity: 顯示選項(xiàng)卡組件的Activity繼承TabActivity;c.獲取組件: 通過(guò)調(diào)用getTabHost()方法, 獲取TabHost對(duì)象;d.創(chuàng)立添加選項(xiàng)卡: 通過(guò)TabHost創(chuàng)立添加選項(xià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)用來(lái)new一個(gè)tab,同時(shí)標(biāo)記這個(gè)tab的tagsetContent()用來(lái)處理點(diǎn)擊這個(gè)tab后的動(dòng)作,可以是這個(gè)Activity下的一個(gè)組件,如setContent(R.id.tab1)布局文件,也可以是一個(gè)intent,比方:setContent(new Intent(this, SubTab.class)setIndicator()用來(lái)標(biāo)記這個(gè)tab的名字,可以是setInd
34、icator(Clock),也可以包含其他的屬性,如圖片:setIndicator(商場(chǎng),getResources().getDrawable(android.R.drawable.arrow_down_float)tabs.addTab(spec)將這個(gè)tab添加如TabHost理解AsyncTask在Android耗時(shí)操作中的使用方法。AysncTask是谷歌封裝的實(shí)現(xiàn)異步操作,用于執(zhí)行耗時(shí)任務(wù)并在UI線程中更新結(jié)果的抽象類。背后的實(shí)現(xiàn)原理就是異步消息機(jī)制Handler)AsyncTask是一個(gè)輕量級(jí)異步類,用戶可以直接繼承AsyncTask,在類中實(shí)現(xiàn)一步操作,并提供接口反應(yīng)當(dāng)前異步執(zhí)行
35、的程度可以通過(guò)接口實(shí)現(xiàn)UI進(jìn)度更新,最后反應(yīng)執(zhí)行的結(jié)果給UI主線程。使用方法:繼承AsyncTask并且制定傳入?yún)?shù)類型、描述過(guò)程類型以及返回值類型,這些類型均是泛型需要重寫(xiě)的4個(gè)方法:onPreE*ecute():這個(gè)方法是在異步加載進(jìn)展前執(zhí)行的,用于界面上的初始化操作,必須現(xiàn)實(shí)一個(gè)進(jìn)度條對(duì)話框。doInBackground(Params.):只有這個(gè)方法是在子線程中進(jìn)展的,所有下載或者加載等耗時(shí)的操作,都可以在這里執(zhí)行。任務(wù)一旦完成,就可以通過(guò)return語(yǔ)句將任務(wù)的執(zhí)行結(jié)果返回。如果AsyncTask的第三個(gè)泛型參數(shù)指定的是void,就可以不用返回。更新UI操作,需要調(diào)用publishP
36、rogress(傳遞的參數(shù)方法來(lái)完成。onProgressUpdate(接收的參數(shù)):這個(gè)方法是在doInBackground方法中執(zhí)行了publishProgress()方法的時(shí)候執(zhí)行,publishProgress()方法是向此方法傳遞一些用于描述過(guò)程的參數(shù),比方用Integer來(lái)描述下載的進(jìn)度等,實(shí)現(xiàn)對(duì)UI進(jìn)展操作。onPostE*ecute(Result):這個(gè)方法是在doInBackground()方法執(zhí)行完畢return之后執(zhí)行,根據(jù)return的result類型來(lái)判斷進(jìn)展一些UI操作。比方提醒任務(wù)結(jié)果,關(guān)掉進(jìn)度條對(duì)話框等以上的方法中,只有doInBackground()這個(gè)方法是
37、在子線程中執(zhí)行,其他都是在UI線程,所以可以直接對(duì)UI進(jìn)展更新。New DownloadTask().e*ecte();啟動(dòng)這個(gè)任務(wù)/ 這里定義的一個(gè)AsyncTask子類,輸入?yún)?shù)類型為空,過(guò)程指示參數(shù)為整型,異步返回類型為布爾28class DownLoad e*tends AsyncTask Asynctask的缺乏之處: 1.AsyncTask可能存在新開(kāi)大量線程消耗系統(tǒng)資源和導(dǎo)致應(yīng)用FC的風(fēng)險(xiǎn) 2.AsyncTask一旦執(zhí)行了 doInBackground,就算調(diào)用取消方法,也會(huì)將doInBackground里面的代碼執(zhí)行完畢,才會(huì)停頓。3.調(diào)用了AsyncTask#e*ecute(
38、)后,AsyncTask會(huì)把任務(wù)交給線程池,由線程池來(lái)管理創(chuàng)立運(yùn)行線程。線程池不經(jīng)維護(hù),當(dāng)大量異步發(fā)生時(shí),導(dǎo)致線程池滿了,會(huì)出異常。理解Android客戶端程序與后端Web效勞器應(yīng)用程序之間的通信流程。客戶端向效勞器發(fā)送一條 請(qǐng)求,效勞器接收到請(qǐng)求后會(huì)返回?cái)?shù)據(jù)給客戶端,然后客戶端對(duì)數(shù)據(jù)進(jìn)展解析。請(qǐng)求方式 URLConnection和 Client,但后者被棄用在6.0后。但請(qǐng)求數(shù)據(jù)是在子線程中,而數(shù)據(jù)更新是在UI主線程中必須在主線程中開(kāi)啟一個(gè)線程,并且使用Handler這個(gè)對(duì)象來(lái)實(shí)現(xiàn)數(shù)據(jù)的異步請(qǐng)求.然后當(dāng)請(qǐng)求響應(yīng)完成之后才會(huì)在界面中更新數(shù)據(jù)。手機(jī)客戶端向Web應(yīng)用效勞器發(fā)送請(qǐng)求信息首先引用所需
39、要的各種API,比方 ,io等定義訪問(wèn)的URL3創(chuàng)立URLConnection對(duì)象,該對(duì)象的主要作用是將Android手機(jī)端的數(shù)據(jù)提交給Web應(yīng)用效勞器設(shè)置數(shù)據(jù)編碼方式Android手機(jī)在將準(zhǔn)備好的數(shù)據(jù)發(fā)送到Web效勞器之前,需要對(duì)數(shù)據(jù)的編碼進(jìn)展規(guī)定,這樣效勞器在接收到這些數(shù)據(jù)后,就會(huì)根據(jù)發(fā)送過(guò)去的文字編碼處理和顯示。提交URLConnection對(duì)象和獲取效勞器 Response響應(yīng)數(shù)據(jù)完成前面的工作,就該將數(shù)據(jù)提交給Web應(yīng)用效勞器了,在應(yīng)用效勞接收Android手機(jī)提交的數(shù)據(jù)后,經(jīng)過(guò)處理,將要返回(響應(yīng))給Android手機(jī)的數(shù)據(jù)打包到一個(gè) Response對(duì)象中,發(fā)回給手機(jī)。手機(jī)客戶端
40、承受響應(yīng)數(shù)據(jù)獲取響應(yīng)效勞的數(shù)據(jù)從Web效勞器響應(yīng)到手機(jī)終端的數(shù)據(jù)一般打包在一個(gè)字節(jié)數(shù)組中,關(guān)鍵是這個(gè)字節(jié)數(shù)組中可能包含了各種不同的數(shù)據(jù)類型,為此,需要采取Java數(shù)據(jù)流和過(guò)濾流的方法從字節(jié)數(shù)據(jù)中取出各種類型的數(shù)據(jù)理解MessageQueue的工作原理。是消息隊(duì)列的意思,存放所有通過(guò)Handler發(fā)送的消息。這局部消息會(huì)一直存在消息對(duì)列中,等待被處理,每個(gè)線程只有一個(gè)MessageQueue對(duì)象MessageQueue是比擬低層的類,是持有Message在Looper中派發(fā)的一個(gè)鏈表,但Message不是直接添加到MessageQueue中的,而是通過(guò)與Looper相關(guān)聯(lián)的Handler來(lái)進(jìn)展的
41、。在當(dāng)前線程中可以通過(guò)調(diào)用Looper.myQueue()方法來(lái)獲取當(dāng)前線程的MessageQueueMessageQueue,主要包含2個(gè)操作:插入和讀取。讀取操作會(huì)伴隨著刪除操作,插入和讀取對(duì)應(yīng)的方法分別為enqueueMessage和ne*t,其中enqueueMessage的作用是往消息隊(duì)列中插入一條消息,而ne*t的作用是從消息隊(duì)列中取出一條消息并將其從消息隊(duì)列中移除。雖然MessageQueue叫消息隊(duì)列,但是它的內(nèi)部實(shí)現(xiàn)并不是用的隊(duì)列,實(shí)際上它是通過(guò)一個(gè)單鏈表的數(shù)據(jù)構(gòu)造來(lái)維護(hù)消息列表,單鏈表在插入和刪除上比擬有優(yōu)勢(shì)。Message: 是線程之間傳遞的消息,在內(nèi)部攜帶少量信息,用于
42、不同線程間交換數(shù)據(jù)。what,arg1,arg2,obj攜帶Object對(duì)象Handler:處理者的意思,主要用于發(fā)送和處理消息,Handler類的作用主要有兩種:1.在新啟動(dòng)的線程中發(fā)送消息。sendMessage().2.在主線程UI線程中獲取,處理消息。handleMessage()方法Looper是每個(gè)線程中MessageQueue的管家,調(diào)用Looper的loop方法,就會(huì)進(jìn)入一個(gè)無(wú)限循環(huán)中,然后每當(dāng)MessageQueue存在一條消息,就會(huì)將他取出,并傳遞到Handler的handleMessage()方法。每個(gè)線程也只會(huì)有一個(gè)Looper對(duì)象異步消息的處理機(jī)制:主線程創(chuàng)立Hand
43、ler對(duì)象,并重寫(xiě)handleMessage()方法。當(dāng)子線程需要進(jìn)展UI操作,就創(chuàng)立一個(gè)Message對(duì)象,并通過(guò)Handler把這條消息發(fā)送出去。之后,這條消息會(huì)被添加到MessageQueue中等待被處理。而Looper一直嘗試從MessageQueue中取出待處理的消息,如果有,就分發(fā)到Handler的handleMessage()方法處理。由于Handler對(duì)象是在主線程創(chuàng)立,所以可以更新UILooper是每個(gè)線程中MessageQueue的管家,在loop()方法被調(diào)用后就會(huì)處于無(wú)限循環(huán)中,每當(dāng)發(fā)現(xiàn)隊(duì)列中有一個(gè)消息,就會(huì)取出,放進(jìn)handleMessage()方法中處理理解Shar
44、edPreferences的使用方法。SharedPreferences是Android平臺(tái)上一個(gè)輕量級(jí)的存儲(chǔ)類,以鍵值對(duì)形式來(lái)保存應(yīng)用的一些常用配置。它是使用鍵值對(duì)的方式存儲(chǔ)數(shù)據(jù)。存入什么類型,讀取出來(lái)就是什么類型1得到SharedPreferences對(duì)象2、調(diào)用SharedPreferences對(duì)象的edit()方法來(lái)獲取一個(gè)SharedPreferences.Editor對(duì)象。3、向SharedPreferences.Editor對(duì)象中添加數(shù)據(jù)。4、調(diào)用mit方法將添加的數(shù)據(jù)提交。Conte*t.getSharedPreferences(文件名稱,操作模式)文件名稱不存在就會(huì)創(chuàng)立一個(gè),操作模式有兩種:MODE_PRIVATE:默認(rèn)操作模式,直接在把第二個(gè)參數(shù)寫(xiě)0就是默認(rèn)使用這種操作模式,這種模式表示只有當(dāng)前的應(yīng)用程序才可以對(duì)當(dāng)前這個(gè)SharedPreferences文件進(jìn)展讀寫(xiě)。MODE_MULTI_PRIVATE:用于多個(gè)進(jìn)程共同操作一個(gè)SharedPreferences文件。注:MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE這兩種模式已經(jīng)在android 4.2版本以后廢棄了。方法2:Activity.getPreferences(文件名,操作
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工具制造設(shè)備操作與調(diào)試考核試卷
- 買賣合同服裝購(gòu)買合同
- 體內(nèi)酸堿平衡與養(yǎng)生考核試卷
- 網(wǎng)絡(luò)通訊線路租用與技術(shù)支持合同
- 化學(xué)品環(huán)境影響評(píng)價(jià)考核試卷
- 成本分析系統(tǒng)考核試卷
- 充電設(shè)施投資收益分析考核試卷
- 小麥加工質(zhì)量保障措施考核試卷
- 電子郵件營(yíng)銷及客戶關(guān)系管理系統(tǒng)合同
- 電子商務(wù)相關(guān)行業(yè)投資規(guī)劃報(bào)告
- 學(xué)校教學(xué)常規(guī)管理學(xué)習(xí)活動(dòng)課件
- 2024-2030年中國(guó)大閘蟹養(yǎng)殖行業(yè)運(yùn)營(yíng)形勢(shì)分析及未來(lái)銷售格局研究報(bào)告
- 集成墻板購(gòu)銷合同范本(2024版)
- 2023九年級(jí)歷史下冊(cè) 第三單元 第一次世界大戰(zhàn)和戰(zhàn)后初期的世界第10課《凡爾賽條約》和《九國(guó)公約》教案 新人教版
- 骨髓穿刺課件
- 2024中國(guó)保險(xiǎn)發(fā)展報(bào)告-中南大風(fēng)險(xiǎn)管理研究中心.燕道數(shù)科
- 元素的用途完整版本
- 建筑設(shè)計(jì)工程設(shè)計(jì)方案
- 供熱行業(yè)環(huán)境保護(hù)管理辦法
- 七十歲換領(lǐng)證駕考三力測(cè)試答題
- 2023年部編版高中語(yǔ)文必修上冊(cè)古詩(shī)詞誦讀
評(píng)論
0/150
提交評(píng)論