2023年Android考試知識(shí)點(diǎn)考試_第1頁
2023年Android考試知識(shí)點(diǎn)考試_第2頁
2023年Android考試知識(shí)點(diǎn)考試_第3頁
2023年Android考試知識(shí)點(diǎn)考試_第4頁
2023年Android考試知識(shí)點(diǎn)考試_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

考試知識(shí)點(diǎn)(Android閉卷考試)理解Android常見的幾種布局。幾種布局的高和寬,制定LinearLayout,線性布局,布局中的控件在線性方向上依次排列。默認(rèn)控件水平方向排列。android:orientation=”horizontal”android:orientat(yī)ion=”vertical”

注意:當(dāng)是水平方向排列,控件寬度不能設(shè)立為android:layout_width="match_parent"否則控件會(huì)把水平方向沾滿,其他控件無法會(huì)控件覆蓋(無法放置)當(dāng)是垂直方向,內(nèi)部控件不能將android:layout_height="match_parent"指定為match_parentandroid:layout_weight="1",使用比例方式來指定控件的大?。襡lativeLayout,相對布局,是通過相對定位的方式讓布局中控件可以出現(xiàn)在布局的任何位置。內(nèi)部控件,三種屬性,屬性值是true或false

android:layout_centerHrizontal水平居中,屬性值是”@id/*“

android:layout_below在某元素的下方屬性值是數(shù)值

android:layout_marginLeft離某元素左邊沿的距離FrameLayout,幀布局,簡樸,應(yīng)用場景少,和碎片一起使用,沒有定位方式,所有控件默認(rèn)在布局的左上角,后面的會(huì)覆蓋前面的。每一個(gè)組件都代表一個(gè)畫面用該布局可以實(shí)現(xiàn)動(dòng)畫效果PercentFrame(Relat(yī)ive)Layout比例布局:布局中可以不用wrap_content,match_parent等方式來指定控件的大小,直接指定控件所占的比例,實(shí)現(xiàn)平分布局甚至任意比例分割布局。注意比例布局需要添加庫依賴support:percent:24..由于LinearLayout自身支持按比例指定控件大小,所以比例布只為RelativeLayout和RelativeLayout功能擴(kuò)展表格布局(Tablelayout)采用行列的形式管理UI組件,無需明確地聲明它的行列數(shù),而是通過添加TableRow、其他組件來控制表格的行數(shù)和列數(shù)GridLayout是Android4.0之后新增的布局管理器,因此正常情況下需要在Android4.0之后的版本中才干使用,假如希望在更早的版本中使用的話,需要導(dǎo)入相應(yīng)的支撐庫(v7包的gridlayout包)。GridLayout網(wǎng)格布局,和前面所講的TableLayout(表格布局)有點(diǎn)類似,但是他有很多前者沒有的東西,因此也更加好用:

?-可以自己設(shè)立布局中組件的排列方式

-可以自定義網(wǎng)格布局有多少行、列

?-可以直接設(shè)立組件位于某行某列

?-可以設(shè)立組件橫跨幾行或者幾列AbsoluteLayout它不提供任何布局控制,而是由開發(fā)人員自己通過X、Y坐標(biāo)來控制組件的位置。運(yùn)營Android應(yīng)用的手機(jī)往往千差萬別,屏幕大小、分別率、屏幕密度等都也許存在較大的差異,使用絕對布局的話很難做機(jī)型適配--已經(jīng)被廢棄理解Android應(yīng)用程序開發(fā)過程中,常見的四種設(shè)計(jì)模式及各自的使用場合。ListView-Adapter、Builder-Dialog、Factory-選項(xiàng)卡、Listener-事件監(jiān)聽。1適配器模式:簡介:將一個(gè)類的接口轉(zhuǎn)換成客戶希望的此外一個(gè)接口,從而使原本因接口不匹配而無法再一起工作的兩個(gè)類可以在一起工作。不同的數(shù)據(jù)提供者使用一個(gè)適配器來向一個(gè)相同的客戶提供服務(wù)。舉例:ListView或GridView的Adapter。2建造者模式:簡介:將一個(gè)復(fù)雜對象的構(gòu)建與它的表達(dá)分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的顯示,但其主線還是不變。舉例:AlertDialog.Builder.AlertDialog.Builder,使用該Builder來構(gòu)建復(fù)雜的AlertDialog對象工廠模式:定義一個(gè)用于創(chuàng)建對象的接口,讓子類決定將哪一個(gè)類實(shí)例化。外部不需要關(guān)心工廠是如何創(chuàng)建一個(gè)復(fù)雜產(chǎn)品的過程示例:BitmapFactory位圖工廠,專門用來將指定的圖片轉(zhuǎn)換為指定的位圖Bitmap。監(jiān)聽器模式事件源通過事件的封裝傳給監(jiān)聽器,當(dāng)事件源觸發(fā)事件后,監(jiān)聽器接受到事件對象可以回調(diào)事件的方法.Listener-事件監(jiān)聽觀測者模式:定義對象間是一(Subject)對多(Observer)的依賴關(guān)系,當(dāng)一個(gè)對象發(fā)生變化時(shí),其它依賴該對象的對象都會(huì)收到告知,并隨著變化。廣播機(jī)制就是觀測者模式ListView和BaseAdapter組合時(shí),當(dāng)BaseAdapter的item改變時(shí),我們經(jīng)常會(huì)調(diào)用notifyDataSetChanged(),告知Listview刷新Android中可支持網(wǎng)頁的縮放的視圖(View)及其功能在Android系統(tǒng)中,內(nèi)置了一款高性能的瀏覽器,其內(nèi)核就是WebKit,WebView網(wǎng)頁視圖,就是在這個(gè)基礎(chǔ)上封裝的一個(gè)控件,我們可以直接用這個(gè)控件在應(yīng)用程序內(nèi)去顯示W(wǎng)eb頁面,直接用HTML文獻(xiàn)做為布局文獻(xiàn),可以和JavaScript交互調(diào)用。顯示和渲染web頁面.直接顯示網(wǎng)頁設(shè)立在當(dāng)前應(yīng)用中打開網(wǎng)頁,假如不設(shè)立的話會(huì)使用手機(jī)瀏覽器打開網(wǎng)頁mWebView.setWebViewClient(newWebViewClient(){@OverridepublicbooleanshouldOverrideUrlLoading(WebViewview,WebResourceRequestrequest){view.loadUrl("");returntrue;}});mWebView.loadUrl("");和js交互設(shè)立支持JavascriptWebSettingssettings=webView.getSettings();settings.setJavaScriptEnabled(true);可以運(yùn)用html做界面布局理解View和ViewGroup的用途及兩者之間的關(guān)系。繼承結(jié)構(gòu): View是ViewGroup的父類類。View是所有UI組件的基類,而ViewGroup是容納這些組件的容器,其自身也是從View派生出來的.View中所有的子類成為widgets,viewgroup的子類成為layout。View和ViewGroup之間采用了組合設(shè)計(jì)模式,可以使得“部分-整體”同等對待。ViewGroup作為布局容器類的最上層,布局容器里面又可以有View和ViewGroup。

對于setContentView(R.layout.layout的xml文獻(xiàn))方法,Activity其實(shí)不是顯示視圖(直觀上感覺是它),事實(shí)上Activity調(diào)用了PhoneWindow的setContentView()方法,然后加載視圖,將視圖放到這個(gè)Window上,而Activity其實(shí)構(gòu)造的時(shí)候初始化的是Window(PhoneWindow),Activity其實(shí)是個(gè)控制單元,即可視的人機(jī)交互界面。Activity是一個(gè)工人,它來控制Window;Window是一面顯示屏,用來顯示信息;View就是要顯示在顯示屏上的信息,這些View都是層層重疊在一起(通過infalte()和addView())放到Window顯示屏上的。而LayoutInfalter就是用來生成View的一個(gè)工具,XML布局文獻(xiàn)就是用來生成View的原料。

(2).Activity、Window、View之間的關(guān)系:

?Activity是Window和View之間的橋梁,將View的內(nèi)容信息顯示在Window窗口上面。

理解Android網(wǎng)絡(luò)編程中,常見的數(shù)據(jù)傳輸格式。網(wǎng)絡(luò)傳輸中最常見的有xml和json,尚有protocolbuffers,gzip,ThriftXml通過Pull,SAX和Dom方式解析Json用JSONObject和GSON解析。ProtocolBuffers

一種數(shù)據(jù)描述語言,類似于XML可以將結(jié)構(gòu)化數(shù)據(jù)序列化——類似于XML,但更小,更快,更簡樸經(jīng)常用到j(luò)son、xml等格式的數(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一起使用BroadcastReceiver組件:廣播消息接受器,類似于事件編程中的監(jiān)聽器,但是不同的是普通的事件監(jiān)聽器監(jiān)聽的事件源是程序中的對象,而BroadcastReceiver監(jiān)聽的事件源是Android應(yīng)用程序中的其它組件。Service組件:通常位于后臺(tái)運(yùn)營,一般不需要與用戶交互,所以沒有圖形界面。Service組件運(yùn)營起來后會(huì)有獨(dú)立的生命周期,它通常用于為其他組件提供后臺(tái)服務(wù)或監(jiān)控其他組件的運(yùn)營狀態(tài)activity是一種可以包含用戶界面的組件,重要用于和用戶進(jìn)行交互表現(xiàn)形式是一個(gè)屏幕,功能是顯示界面,消息傳遞整個(gè)生命周期:onCreate()-onDestroy()可見的生命周期:onStart()-onStop()前臺(tái)的生命周期:onResume()-onPause()運(yùn)營,暫停(不在棧頂,但可見),停止(完全不可見,有也許因內(nèi)存不夠被回收),銷毀(從棧中移除覆蓋了activity生命周期的每一個(gè)環(huán)節(jié)onCreate():當(dāng)activity是被創(chuàng)建時(shí)候,會(huì)自動(dòng)運(yùn)營該方法。該方法做一些初始化動(dòng)作,比如加載布局,綁定期間等。onStart():活動(dòng)在有不可見變?yōu)榭梢姷臅r(shí)候調(diào)用。onResume():當(dāng)activity開始與用戶交互(獲得焦點(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)不再處在棧頂?shù)奈恢?但仍然可見,彈出一個(gè)對話框或者一個(gè)不能占滿屏幕的活動(dòng)都會(huì)導(dǎo)致前一個(gè)活動(dòng)處在暫停狀態(tài))通常會(huì)在這個(gè)方法中釋放掉一些占用cpu的資源onStop():當(dāng)這個(gè)activity完全看不見的時(shí)候,會(huì)調(diào)用onStop方法。以下三種情況都會(huì)使這個(gè)activity調(diào)用onStop()方法,第一種是一個(gè)新的activity被執(zhí)行,第二種是一個(gè)已經(jīng)存在的activity被切換到最前端,第三種是這個(gè)activity要被銷毀。?onRestart():把a(bǔ)ctivity從停止?fàn)顟B(tài)變?yōu)檫\(yùn)營狀態(tài),活動(dòng)被重新啟用。onDestroy():當(dāng)activity銷毀前會(huì)調(diào)用該方法,之后變?yōu)殇N毀狀態(tài)。理解何時(shí)需要在Activity中重寫方法onActivityResult?當(dāng)使用startActivityForResult()(在第一個(gè)活動(dòng)中)方法啟動(dòng)另一個(gè)Activity時(shí),需要在第一個(gè)活動(dòng)中重寫onActivityResult()方法,獲得被啟動(dòng)Activity返回的結(jié)果。Intentintent=newIntent(this,secondeActivity.class);

startActivityForResult(intent,int請求碼);重寫@Override?protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){?Stringresult=data.getExtras().getString("result");//得到新Activity關(guān)閉后返回的數(shù)據(jù)

Log.i(TAG,result);

}在第二個(gè)活動(dòng)中:點(diǎn)擊事件中//數(shù)據(jù)是使用Intent返回?Intentintent=newIntent();?//把返回?cái)?shù)據(jù)存入Intent?intent.putExtra("result","Mynameislinjiqin");?//設(shè)立返回?cái)?shù)據(jù)

OtherActivity.this.setResult(RESULT_OK,intent);?//關(guān)閉Activity

OtherActivity.this.finish();7.理解在Intent傳遞數(shù)據(jù)時(shí)使用的幾種數(shù)據(jù)類型。基本數(shù)據(jù)類型Serializable、將一個(gè)對象序列化后轉(zhuǎn)換成可以傳輸?shù)臓顟B(tài),序列化的方法是讓類自身繼承Serializable接口Personp=newPerson();p.setname();..Intentintent=newIntent(源活動(dòng),目的活動(dòng).class);intent.putExtra(“名字”,p);接受數(shù)據(jù):Personp2=getIntent().getSerializableExtra(“名字);Parcelable,同樣需要類繼承Parcelable接口,但需要在person類中重寫接口中兩個(gè)方法,必須有一個(gè)實(shí)現(xiàn)了Parcelable.Creat(yī)or接口的靜態(tài)常量成員字段。接受數(shù)據(jù)方法getIntent.getParcelableExtra(“名字);CharSequence、CharSequence接口,實(shí)現(xiàn)了這個(gè)接口的類有:CharBuffer、String、StringBuffer、StringBuilder這個(gè)四個(gè)類。所以解決String或者StringBuffer的類就不用重載。Bundle:一種存放字符串和Parcelable類型數(shù)據(jù)的map類型的容器類,通過存放數(shù)據(jù)鍵(key)獲取相應(yīng)的各種類型的值(value),并且必須通過鍵(key)獲取。Intentintent=newIntent();intent.setClass(activity1.this,activity2.class);//描述起點(diǎn)和目的Bundlebundle=newBundle();//創(chuàng)建Bundle對象bundle.putString("something","Activity1發(fā)來的數(shù)據(jù)");//裝入數(shù)據(jù)intent.putExtras(bundle);//把Bundle塞入Intent里面startActivity(intent);//開始切換Activity2接受數(shù)據(jù)Intentintent=this.getIntent();//獲取已有的intent對象Bundlebundle=intent.getExtras();//獲取intent里面的bundle對象string=bundle.getString("something");//獲?。聈ndle里面的字符串

理解Android中包含哪幾個(gè)標(biāo)準(zhǔn)的“選擇”部件(View)。RadioButton單選按鈕(同一組RadioButton放在一個(gè)RadioGroup中)CheckBox復(fù)選框Spinner下拉列表框Dat(yī)ePicker日期選擇組件TimePicker事件選擇組件NumberPicker數(shù)值選擇組件9.理解Android工程中哪些目錄中的文獻(xiàn)是由Eclipse自動(dòng)編譯生成。src、存放的是該項(xiàng)目的源代碼bin、編譯后自動(dòng)生成目錄。二進(jìn)制文獻(xiàn),涉及class、資源文獻(xiàn)、dex、apk等gen、自動(dòng)生成的文獻(xiàn)目錄。該目錄下的文獻(xiàn)所有都是ADT自動(dòng)生成的,一般并不需要去修改,事實(shí)上該目錄下只定義了一個(gè)R.java文獻(xiàn),該文獻(xiàn)相稱于項(xiàng)目的字典,為項(xiàng)目中用戶界面、字符串、圖片等資源都會(huì)在該類中創(chuàng)建其惟一的IDres存放應(yīng)用程序中經(jīng)常使用的資源文獻(xiàn)等。理解SQLite的一般用法。SQLite是一款輕量級關(guān)系型數(shù)據(jù)庫。安卓內(nèi)置SQLite。SQLiteOpenHelper:

SQLiteOpenHelper是是一個(gè)輔助類。這個(gè)類重要生成一個(gè)數(shù)據(jù)庫,并對數(shù)據(jù)庫的版本進(jìn)行管理。當(dāng)在程序當(dāng)中調(diào)用這個(gè)類的方法getWritableDat(yī)abase()或者getReadableDatabase()方法的時(shí)候,創(chuàng)建或打開一個(gè)現(xiàn)有的數(shù)據(jù)庫,并返回一個(gè)SQLiteDatabase對象用于對數(shù)據(jù)庫進(jìn)行讀寫操作。當(dāng)數(shù)據(jù)庫不可寫入(磁盤已滿),getReadabelDat(yī)abase()返回的對象將以只讀的方式打開數(shù)據(jù)庫,getReadableDatabase()出現(xiàn)異常。構(gòu)造方法:publicMyDat(yī)agbaseHelper(Contextcontext,Stringname,SQLiteDatabase.CursorFactoryfactory,intversion){this,數(shù)據(jù)庫名.db,null,版本1?super(context,name,factory,version);?}SQLiteOpenHelper是一個(gè)抽象類,我們通常需要繼承它,并且實(shí)現(xiàn)里面的2個(gè)抽象方法:

1.onCreate(SQLiteDat(yī)abasedb)db.execSQL(sql語句,建立表)

?在數(shù)據(jù)庫第一次生成(調(diào)用getdat..和getWriteabledat(yī)abase方法)的時(shí)候會(huì)調(diào)用這個(gè)方法,也就是說,只有在創(chuàng)建數(shù)據(jù)庫的時(shí)候才會(huì)調(diào)用,當(dāng)然也有一些其它的情況,一般我們在這個(gè)方法里邊生成數(shù)據(jù)庫表。?2.

onUpgrade(SQLiteDatabase,int,int)

當(dāng)數(shù)據(jù)庫需要升級(修改表,創(chuàng)建新表,數(shù)據(jù)備份,刪除表)的時(shí)候,Android系統(tǒng)會(huì)調(diào)用這個(gè)方法。比如增長一張表。這里要db.execSQL(sql語句)假如是建的表已經(jīng)存在,就要先刪除,或不建。3.

onOpen(SQLiteDatabase)非抽象:

當(dāng)打開數(shù)據(jù)庫時(shí)的回調(diào)函數(shù)。SQLiteDatabasesqlitedat(yī)abase=sqliteDBHelper.getWritableDat(yī)abase()插入操作ContentValuescv=newContentValues();cv.put(COLUMN_NAME,person.getName());cv.put(COLUMN_AGE,person.getAge());//當(dāng)cv參數(shù)為空或者沒有內(nèi)容的時(shí)候,insert會(huì)失敗,為了防止這種情況發(fā)生,//要在第二個(gè)參數(shù)設(shè)立一個(gè)列名,當(dāng)要插入的行為空行時(shí),將指定的列名值設(shè)立為nullsqliteDataBase.insert(TABLE_NAME,null,cv);更新:sqliteDataBase.update(TABLE_NAME,cv,COLUMN_ID+"=?",newString[]{String.valueOf(person.getId())});第三個(gè)和第4個(gè)參數(shù)不指定,默認(rèn)更新所有行刪除sqliteDataBase.delete(TABLE_(tái)NAME,COLUMN_ID+"=?",newString[]{String.valueOf(id)});,后面的兩個(gè)參數(shù)不指定的話默認(rèn)刪除所有行或者直接用sql來操作sqliteDataBase.execSQL(sql語句,newString[]{參數(shù)...});11.理解對的設(shè)立onClickListener所需要的幾個(gè)基本環(huán)節(jié)。

View.OnClickListener:單擊事件的監(jiān)聽器必須實(shí)現(xiàn)的接口基于監(jiān)聽的事件解決模型:獲取普通界面組件(事件源),也就是被監(jiān)聽的對象實(shí)現(xiàn)事件監(jiān)聽器類,該監(jiān)聽器類是一個(gè)特殊的Java類,必須實(shí)現(xiàn)一個(gè)OnClickListener接口調(diào)用事件源的setOnClickListener()方法注冊事件監(jiān)聽器常見的實(shí)現(xiàn)方法:a.匿名內(nèi)部類xml布局文獻(xiàn)中添加組件,設(shè)立組件id;在activity中獲取相應(yīng)id的組件,用setOnClickListener(newOnClickListener(){……})的方式綁定控件與事件監(jiān)聽器,在內(nèi)部類中重載onClick()方法,實(shí)現(xiàn)想要的功能。a的優(yōu)化方案:使用內(nèi)部類,尚有外部類,但很少用在Activity中定義一個(gè)內(nèi)部類繼承監(jiān)聽器接口,或new一個(gè)該監(jiān)聽器的對象setOnClickListener(對象實(shí)例)xml布局文獻(xiàn)中添加組件,設(shè)立組件id;在activity中編寫內(nèi)部類實(shí)現(xiàn)OnClickListener,實(shí)現(xiàn)onClick()方法。綁定按鈕與事件監(jiān)聽器:button.setOnClickListener(內(nèi)部類的對象);btnshow.setOnClickListener(newBtnClickListener());

//定義一個(gè)內(nèi)部類,實(shí)現(xiàn)View.OnClickListener接口,并重寫onClick()方法

?

classBtnClickListenerimplementsView.OnClickListener

?

{

@Override

publicvoidonClick(Viewv){

Toast.makeText(getApplicat(yī)ionContext(),"按鈕被點(diǎn)擊了",Toast.LENGTH_SHORT).show();

?

}

}

c.直接綁定到標(biāo)簽運(yùn)用布局文獻(xiàn)中的onClick屬性xml布局文獻(xiàn)中添加組件,設(shè)立onClick屬性;Java代碼中實(shí)現(xiàn)與onClick屬性值同名的方法名。d.Activiry作為事件監(jiān)聽器。整個(gè)Activity實(shí)現(xiàn)onClickListener接口,合用于控件量多的情況。xml布局文獻(xiàn)中添加組件,設(shè)立組件id;Activity實(shí)現(xiàn)onClickListener接口,即實(shí)現(xiàn)onClick方法,完畢各組件的功能。在onCreate()中綁定控件與事件監(jiān)聽器:findViewById(R.id.Button03).setOnClickListener(this);

在onCreate()方法外重寫@Override?publicvoidonClick(Viewarg0){ ?if(arg0.getId()==R.id.button)? {?? System.out.println("clickButton....."); ?} }

12.理解TabHost,TabSpec,TabWidget等基本類的用法。TabHostHYPERLINK""\t""組件可以在界面中存放多個(gè)選項(xiàng)卡,必須有TabWidget與FrameLayout組件TabHost組件中必備的兩個(gè)組件TabWidget

:該組件就是TabHost標(biāo)簽頁中上部或者下部的按鈕,可以點(diǎn)擊按鈕切換選項(xiàng)卡;直接在tabhost中加<TabWidgetandroid:id="@android:id/tabs"?android:layout_width="fill_parent"

android:layout_height="wrap_content"/>不加,即使add了選項(xiàng)卡,也無法區(qū)分開選項(xiàng)卡TabSpec

:代表了選項(xiàng)卡界面,添加一個(gè)TabSpec即可添加到TabHost中,每一頁是內(nèi)容+標(biāo)簽,內(nèi)容由FrameLayout顯示

定義布局

:在XML文獻(xiàn)中使用TabHost組件,并在其中定義一個(gè)FrameLayout選項(xiàng)卡內(nèi)容;b.

繼承TabActivity

:顯示選項(xiàng)卡組件的Activity繼承TabActivity;c.

獲取組件

:通過調(diào)用getTabHost()方法,獲取TabHost對象;d.

創(chuàng)建添加選項(xiàng)卡

:通過TabHost創(chuàng)建添加選項(xiàng)卡;TabHosttabs=(TabHost)findViewById(R.id.tabhost);

tabs.setup();

TabHost.TabSpecspec=tabs.newTabSpec("tag1");?

spec.setContent(R.id.tab1);?

spec.setIndicator("Clock");

tabs.a(chǎn)ddTab(spec);其中tabs.newTabSpec("tag1")用來new一個(gè)tab,同時(shí)標(biāo)記這個(gè)tab的tagsetContent()用來解決點(diǎn)擊這個(gè)tab后的動(dòng)作,可以是這個(gè)Activity下的一個(gè)組件,如setContent(R.id.tab1)布局文獻(xiàn),也可以是一個(gè)intent,比如:setContent(newIntent(this,SubTab.class))setIndicator()用來標(biāo)記這個(gè)tab的名字,可以是setIndicat(yī)or("Clock"),也可以包含其他的屬性,如圖片:setIndicat(yī)or(

"商場",getResources().getDrawable(android.R.drawable.arrow_down_float(yī)))tabs.a(chǎn)ddTab(spec)將這個(gè)tab添加如TabHost理解AsyncTask在Android耗時(shí)操作中的使用方法。AysncTask是谷歌封裝的實(shí)現(xiàn)異步操作,用于執(zhí)行耗時(shí)任務(wù)并在UI線程中更新結(jié)果的抽象類。背后的實(shí)現(xiàn)原理就是異步消息機(jī)制(Handler)AsyncTask是一個(gè)輕量級異步類,用戶可以直接繼承AsyncTask,在類中實(shí)現(xiàn)一步操作,并提供接口反饋當(dāng)前異步執(zhí)行的限度(可以通過接口實(shí)現(xiàn)UI進(jìn)度更新),最后反饋執(zhí)行的結(jié)果給UI主線程。使用方法:繼承AsyncTask并且制定傳入?yún)?shù)類型、描述過程類型以及返回值類型,這些類型均是泛型需要重寫的4個(gè)方法:onPreExecute():這個(gè)方法是在異步加載進(jìn)行前執(zhí)行的,用于界面上的初始化操作,必須現(xiàn)實(shí)一個(gè)進(jìn)度條對話框。doInBackground(Params...):只有這個(gè)方法是在子線程中進(jìn)行的,所有下載或者加載等耗時(shí)的操作,都可以在這里執(zhí)行。任務(wù)一旦完畢,就可以通過return語句將任務(wù)的執(zhí)行結(jié)果返回。假如AsyncTask的第三個(gè)泛型參數(shù)指定的是void,就可以不用返回。更新UI操作,需要調(diào)用publishProgress(傳遞的參數(shù))方法來完畢。onProgressUpdate(接受的參數(shù)):這個(gè)方法是在doInBackground方法中執(zhí)行了publishProgress()方法的時(shí)候執(zhí)行,publishProgress()方法是向此方法傳遞一些用于描述過程的參數(shù),比如用Integer來描述下載的進(jìn)度等,實(shí)現(xiàn)對UI進(jìn)行操作。onPostExecute(Result):這個(gè)方法是在doInBackground()方法執(zhí)行完畢return之后執(zhí)行,根據(jù)return的result類型來判斷進(jìn)行一些UI操作。比如提醒任務(wù)結(jié)果,關(guān)掉進(jìn)度條對話框等以上的方法中,只有doInBackground()這個(gè)方法是在子線程中執(zhí)行,其他都是在UI線程,所以可以直接對UI進(jìn)行更新。NewDownloadTask().execte();啟動(dòng)這個(gè)任務(wù)//這里定義的一個(gè)AsyncTask子類,輸入?yún)?shù)類型為空,過程指示參數(shù)為整型,異步返回類型為布爾28classDownLoadextendsAsyncTask<Void,Integer,Boolean>{Asynctask的局限性之處:1.AsyncTask也許存在新開大量線程消耗系統(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#execute()后,AsyncTask會(huì)把任務(wù)交給線程池,由線程池來管理創(chuàng)建運(yùn)營線程。線程池不經(jīng)維護(hù),當(dāng)大量異步發(fā)生時(shí),導(dǎo)致線程池滿了,會(huì)出異常。理解Android客戶端程序與后端Web服務(wù)器應(yīng)用程序之間的通信流程。客戶端向服務(wù)器發(fā)送一條HTTP請求,服務(wù)器接受到請求后會(huì)返回?cái)?shù)據(jù)給客戶端,然后客戶端對數(shù)據(jù)進(jìn)行解析。請求方式HttpURLConnection和HttpClient,但后者被棄用在6.0后。但請求數(shù)據(jù)是在子線程中,而數(shù)據(jù)更新是在UI主線程中必須在主線程中啟動(dòng)一個(gè)線程,并且使用Handler這個(gè)對象來實(shí)現(xiàn)數(shù)據(jù)的異步請求.然后當(dāng)請求響應(yīng)完畢之后才會(huì)在界面中更新數(shù)據(jù)。手機(jī)客戶端向Web應(yīng)用服務(wù)器發(fā)送請求信息一方面引用所需要的各種API,比如http,io等定義訪問網(wǎng)站的URL(3)創(chuàng)建HttpURLConnection對象,該對象的重要作用是將Android手機(jī)端的數(shù)據(jù)提交給Web應(yīng)用服務(wù)器設(shè)立數(shù)據(jù)編碼方式Android手機(jī)在將準(zhǔn)備好的數(shù)據(jù)發(fā)送到Web服務(wù)器之前,需要對數(shù)據(jù)的編碼進(jìn)行規(guī)定,這樣服務(wù)器在接受到這些數(shù)據(jù)后,就會(huì)根據(jù)發(fā)送過去的文字編碼解決和顯示。提交HttpURLConnection對象和獲取服務(wù)器HttpResponse響應(yīng)數(shù)據(jù)完畢前面的工作,就該將數(shù)據(jù)提交給Web應(yīng)用服務(wù)器了,在應(yīng)用服務(wù)接受Android手機(jī)提交的數(shù)據(jù)后,通過解決,將要返回(響應(yīng))給Android手機(jī)的數(shù)據(jù)打包到一個(gè)HttpResponse對象中,發(fā)回給手機(jī)。手機(jī)客戶端接受響應(yīng)數(shù)據(jù)獲取響應(yīng)服務(wù)的數(shù)據(jù)從Web服務(wù)器響應(yīng)到手機(jī)終端的數(shù)據(jù)一般打包在一個(gè)字節(jié)數(shù)組中,關(guān)鍵是這個(gè)字節(jié)數(shù)組中也許包含了各種不同的數(shù)據(jù)類型,為此,需要采用Java數(shù)據(jù)流和過濾流的方法從字節(jié)數(shù)據(jù)中取出各種類型的數(shù)據(jù)理解MessageQueue的工作原理。是消息隊(duì)列的意思,存放所有通過Handler發(fā)送的消息。這部分消息會(huì)一直存在消息對列中,等待被解決,每個(gè)線程只有一個(gè)MessageQueue對象MessageQueue是比較低層的類,是持有Message(在Looper中派發(fā))的一個(gè)鏈表,但Message不是直接添加到MessageQueue中的,而是通過與Looper相關(guān)聯(lián)的Handler來進(jìn)行的。在當(dāng)前線程中可以通過調(diào)用Looper.myQueue()方法來獲取當(dāng)前線程的MessageQueueMessageQueue,重要包含2個(gè)操作:插入和讀取。讀取操作會(huì)隨著著刪除操作,插入和讀取相應(yīng)的方法分別為enqueueMessage和next,其中enqueueMessage的作用是往消息隊(duì)列中插入一條消息,而next的作用是從消息隊(duì)列中取出一條消息并將其從消息隊(duì)列中移除。雖然MessageQueue叫消息隊(duì)列,但是它的內(nèi)部實(shí)現(xiàn)并不是用的隊(duì)列,事實(shí)上它是通過一個(gè)單鏈表的數(shù)據(jù)結(jié)構(gòu)來維護(hù)消息列表,單鏈表在插入和刪除上比較有優(yōu)勢。Message:是線程之間傳遞的消息,在內(nèi)部攜帶少量信息,用于不同線程間互換數(shù)據(jù)。what,arg1,arg2,obj攜帶Object對象Handler:解決者的意思,重要用于發(fā)送和解決消息,Handler類的作用重要有兩種:1.在新啟動(dòng)的線程中發(fā)送消息。sendMessage().2.在主線程(UI線程)中獲取,解決消息。handleMessage()方法Looper是每個(gè)線程中MessageQueue的管家,調(diào)用Looper的loop()方法,就會(huì)進(jìn)入一個(gè)無限循環(huán)中,然后每當(dāng)MessageQueue存在一條消息,就會(huì)將他取出,并傳遞到Handler的handleMessage()方法。每個(gè)線程也只會(huì)有一個(gè)Looper對象異步消息的解決機(jī)制:主線程創(chuàng)建Handler對象,并重寫handleMessage()方法。當(dāng)子線程需要進(jìn)行UI操作,就創(chuàng)建一個(gè)Message對象,并通過Handler把這條消息發(fā)送出去。之后,這條消息會(huì)被添加到MessageQueue中檔待被解決。而Looper一直嘗試從MessageQueue中取出待解決的消息,假如有,就分發(fā)到Handler的handleMessage()方法解決。由于Handler對象是在主線程創(chuàng)建,所以可以更新UILooper是每個(gè)線程中MessageQueue的管家,在loop()方法被調(diào)用后就會(huì)處在無限循環(huán)中,每當(dāng)發(fā)現(xiàn)隊(duì)列中有一個(gè)消息,就會(huì)取出,放進(jìn)handleMessage()方法中解決理解SharedPreferences的使用方法。SharedPreferences是Android平臺(tái)上一個(gè)輕量級的存儲(chǔ)類,以鍵值對形式來保存應(yīng)用的一些常用配置。它是使用鍵值對的方式存儲(chǔ)數(shù)據(jù)。存入什么類型,讀取出來就是什么類型1得到SharedPreferences對象2、調(diào)用SharedPreferences對象的edit()方法來獲取一個(gè)SharedPreferences.Editor?qū)ο蟆#?、向SharedPreferences.Editor?qū)ο笾刑砑訑?shù)據(jù)。4、調(diào)用commit方法將添加的數(shù)據(jù)提交。Context.getSharedPreferences(文獻(xiàn)名稱,操作模式)

?文獻(xiàn)名稱不存在就會(huì)創(chuàng)建一個(gè),操作模式有兩種:

?MODE_PRIVATE:默認(rèn)操作模式,直接在把第二個(gè)參數(shù)寫0就是默認(rèn)使用這種操作模式,這種模式表達(dá)只有當(dāng)前的應(yīng)用程序才可以對當(dāng)前這個(gè)SharedPreferences文獻(xiàn)進(jìn)行讀寫。

?MODE_MULTI_PRIVATE:用于多個(gè)進(jìn)程共同操作一個(gè)SharedPreferences文獻(xiàn)。注:MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE這兩種模式已經(jīng)在android4.2版本以后廢棄了。

?方法2:

Activity.getPreferences(文獻(xiàn)名,操作模式)

使用這個(gè)方法會(huì)自動(dòng)將當(dāng)前活動(dòng)的類名作為SharedPreferences的文獻(xiàn)

溫馨提示

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

最新文檔

評論

0/150

提交評論