Android詳細(xì)學(xué)習(xí)筆記第一季_第1頁
Android詳細(xì)學(xué)習(xí)筆記第一季_第2頁
Android詳細(xì)學(xué)習(xí)筆記第一季_第3頁
Android詳細(xì)學(xué)習(xí)筆記第一季_第4頁
Android詳細(xì)學(xué)習(xí)筆記第一季_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

一、Android學(xué)習(xí)第一一一環(huán)境搭建Android開發(fā)環(huán)境的搭建環(huán)境搭建需要①AndroidSDK②JDK③eclipse環(huán)境搭建開始:㈠將AndroidSDK與JDK解壓,最好路徑中不要出現(xiàn)漢字,然后配置環(huán)境變量,方便命令行操作㈡為eclipse(3.4.1)安裝開發(fā)Android插件AndroidADTHelp-->InstallNewSoftware輸入:/android/eclipse便會(huì)自動(dòng)檢測出所需要安裝的東西,點(diǎn)擊install即可。㈢重啟eclipse,進(jìn)行AndroidSDK的配置。Windows-->Preferences-->Android找到你解壓的AndroidSDK的路徑即可。㈣新建一個(gè)AndroidProject來驗(yàn)證平臺(tái)是否搭建成功。注:我上面步驟走下來之后發(fā)現(xiàn)我在運(yùn)行程序時(shí),沒有AndroidVirtualDevices(AVD)的選項(xiàng)。這時(shí)可以在Windows-->AndroidSDKManager中找到你所需要安裝版本,進(jìn)行安裝。搭建過程還是比較順利,加油二Android學(xué)習(xí)第二天識(shí)Activity昨天程序搭建成功以后,就可以開發(fā)跟運(yùn)行Android應(yīng)用程序了,因?yàn)锳ctivity是開發(fā)中不可或缺的組成部分,所以要對(duì)Activity有所認(rèn)識(shí)。以下兩點(diǎn)是需要注意的:(個(gè)人總結(jié))凡是覆寫得方法,在方法體中的第一行一定是super.XXX(),一定要先調(diào)用父類里的相應(yīng)方法做必要的事情,再根據(jù)自己的需求去寫其他的代碼。如果是從頭學(xué)習(xí)安卓開發(fā),不一定要開發(fā)最新的版本,可以在較低版本(2.3.3)下進(jìn)行開發(fā),然后在高版本(4.0)下進(jìn)行編譯與運(yùn)行,這樣可以提高代碼的適應(yīng)能力,可以兼容高級(jí)版本。下面對(duì)我今天的學(xué)習(xí)進(jìn)行個(gè)小結(jié):首先Android的四個(gè)重要部分①Activity一形象點(diǎn)就是一個(gè)應(yīng)用程序的門面,我們?cè)谑謾C(jī)上看到的圖形界面Intent—它就像一個(gè)搬用工,用于Activity之間傳遞數(shù)據(jù),就像請(qǐng)求Service——這個(gè)是不可見的,是為整個(gè)應(yīng)用程序提供服務(wù)支持的底層ContentProvider為應(yīng)用程序提供數(shù)據(jù)的接口上面的描述我自己感覺也比較抽象,今天專門研究了Activity,終于守得云開見月明:首先進(jìn)行以下學(xué)習(xí)之前需要對(duì)Android的工程項(xiàng)目目錄有一個(gè)總體的了解:-HelloAn.c±t-oid—-LEl"C-Hi5ex:=ufiple.Kel1o:=lhdj-oid+EHh=11ctAiiiiroi■!.jav:±+"?AtliIl-oid1.5白-色genEGefler=itedJ~avaFilas]wiba■zovn.ex:=uriple.Kel1o:=ltidj-o£■!由…llR-Jmvs.;■—-L^bassets-…參resB擊:-mvr:elLIe::==.■料弓lcctl.pn.g—=.1a>-onj_+!K_|m=iifl.xml—-L^3?v:=□_ue三:,..?國sirigs.xml:■-£71Atl?3±~oii^il:eltlIfest,xml[5]de£pei~ties自己總結(jié):src下是我們自己寫得程序;gen下是我們創(chuàng)建程序時(shí)系統(tǒng)自動(dòng)生成的,切忌勿修改assets是一個(gè)資源庫,與res的區(qū)別是不會(huì)自動(dòng)在R.java中自動(dòng)生成idres是一個(gè)資源庫,與assets不同的是,每增加一個(gè)資源(圖片等),會(huì)自動(dòng)在R.java中生成對(duì)應(yīng)的idlayout用于存放布局文件,用來控制Activity的顯示格局string.xml中存放的一個(gè)一個(gè)鍵值對(duì),Activity可以對(duì)其進(jìn)行提取AndroidManifest.xml是系統(tǒng)比較重要的一個(gè)文件,存放Activity的注冊(cè)信息,每生成一個(gè)Activity就應(yīng)該在這里注冊(cè)一個(gè)。以上是大概的敘述,不知道表述的清不清楚Activity學(xué)習(xí)筆記~~~Activity初步介紹(自己總結(jié))Activity是一個(gè)可見的,用于用戶跟應(yīng)用程序交互,可放置多個(gè)控件的一個(gè)容器。自己感覺這個(gè)Activity的概念就像是我們開發(fā)網(wǎng)站的一個(gè)頁面,也是一個(gè)容器,只不過載體不同,一個(gè)電腦上面看,一個(gè)手機(jī)上看而已。Activity注意事項(xiàng),自己總結(jié)一個(gè)Activity是一個(gè)java類,并且一定要繼承Activity類。當(dāng)一個(gè)Activity第一運(yùn)行時(shí),就會(huì)運(yùn)行onCreate()方法,所以要覆寫這個(gè)方法。每一個(gè)Activity都需要在AndroidManifest.xml中進(jìn)行配置。為Activity添加必要控件(部分控件)的方法:在布局文件main.xml中進(jìn)行添加,此時(shí)R.java會(huì)自動(dòng)為該控件生成一個(gè)唯一的id,這時(shí)在Activity中就可以通過findViewByld(R.id.XXX)進(jìn)行調(diào)用啦???然后你就可以做任何你想做的事情???對(duì)有面向?qū)ο笳Z言基礎(chǔ)的人來說,一看就明白,代碼就不用貼啦Activity與Intent形象點(diǎn)來說,Intent就是Activity之間的橋梁,當(dāng)然也可以是其他的橋梁。今天我只學(xué)到了兩個(gè)Activity之間通過Intent對(duì)象來傳遞數(shù)據(jù)。Intent是一個(gè)對(duì)象,并且包含一組信息①Componentname指定要傳遞到哪個(gè)ActivityAction指定另一個(gè)Activity要做什么Data——■傳送的數(shù)據(jù)CategortyExtras——鍵值對(duì),也是用來存儲(chǔ)數(shù)據(jù)進(jìn)行傳遞Flags這里需要注意的是,這互相傳遞的Activity不一定非要在同一個(gè)項(xiàng)目工程內(nèi)。?四種基本控件的使用TextView②EditText③Button④Menu具體的添加方法很簡單,這里就不做演示啦,明兒上圖上程序???這里需要注意的是Menu的添加方法與其他三個(gè)有所不同:其他三個(gè)控件都是在對(duì)應(yīng)的布局文件中進(jìn)行添加,而添加Menu需要在Activity中覆寫一個(gè)方法onCreateOptionMenu(Menumenu),這樣一個(gè)菜單就被創(chuàng)建,但是要實(shí)現(xiàn)功能,則需要覆寫另一個(gè)方法onOptionItemSelected(MenuItemitem)為這個(gè)菜單中每個(gè)item進(jìn)行功能的編寫。?Activity的生命周期Activity有七個(gè)有關(guān)生命周期的函數(shù),分別是:①onCreateonStart。nRestartonResumeonPauseonStoponDestory這里我只做個(gè)總結(jié),具體在什么時(shí)候調(diào)用什么網(wǎng)上的教程都比我說的清楚這里我覺得有兩點(diǎn)需要注意:

一、當(dāng)一個(gè)程序啟動(dòng)了后三個(gè)進(jìn)程(onPause,onStop,onDestory),就有可能在系統(tǒng)資源不足時(shí)被kill掉。因?yàn)槭謾C(jī)畢竟不是電腦,內(nèi)存有限,所以安卓系統(tǒng)會(huì)有自己內(nèi)部的算法來節(jié)省自己的資源。二、onDestory在兩種情況下可能被調(diào)用,1是在代碼中調(diào)用了finish()方法,2是當(dāng)系統(tǒng)資源不足的時(shí)候。與Activity生命周期有必要聯(lián)系的還有一個(gè)TaskTask說白了就是一個(gè)存放Activity的堆棧,所以具有堆棧的特點(diǎn)——后進(jìn)先出。咱們?cè)谑謾C(jī)中看到的永遠(yuǎn)是處于堆棧最頂層的Activity,需要注意的是,Task中的堆棧沒有排序的功能。窗口形態(tài)的Activity—這個(gè)將是我們?cè)谝院箝_發(fā)中使用比較廣泛的一種Activity,就類似于彈出框,但是并不會(huì)完全遮擋住下層的Activityo使用窗口形態(tài)的Activity非常簡單,只需要在AndroidManifest.xml的對(duì)應(yīng)Activity注冊(cè)代碼中加一個(gè)屬性:android:theme="@Android:style/Theme.Dialog"/>即可嘍???明天將要開始的是Activity布局的學(xué)習(xí)。其實(shí)安卓對(duì)于有java基礎(chǔ)的人還是比較容易上手的,加油三Android學(xué)習(xí)第三天三Android學(xué)習(xí)第三天Activity的布局步介紹今天總結(jié)下Activity相關(guān)布局的一些知識(shí):Activity:簡單跟常用的布局分為兩種:Activity:簡單跟常用的布局分為兩種:①LinearLayout--線性布局②TableLayout--表格布局③RelativeLayout--相對(duì)布局(今后將會(huì)頻繁的使用到這個(gè)布局)下面來簡單總結(jié)下前兩種(線性/表格)布局當(dāng)中常用到的一些屬性:android:id為指定的控件制定相應(yīng)的idandroid:text指定控件中顯示的文本內(nèi)容,這里盡量使用@strings.**android:gravity指定控件中內(nèi)容的顯示位置,如居中等屬性android:textsize指定控件中字體的大小,單位pt(磅)等android:background指定控件的背景色,注意這里使用的是RGB命名法,如“#aa0000”android:layout_width指定控件的寬度android:layout_height指定控件的高度android:padding指定控件的內(nèi)邊距,注意這里也可以分上下左右分別設(shè)置android:sigleLinetrue/false,設(shè)置為true,則將控件中的內(nèi)容在同一行當(dāng)中進(jìn)行顯示android:weight指定每個(gè)控件所占的屏幕比例,如果一個(gè)屏幕有兩個(gè)控件,其中一個(gè)控件的該值設(shè)置為5,另一個(gè)設(shè)置為2,則第一個(gè)控件將占據(jù)整個(gè)屏幕的5/7,另一個(gè)控件則是2/7當(dāng)然,我們可以使用布局嵌套的方式來實(shí)現(xiàn)更加復(fù)雜,更加漂亮的布局樣式,比方說LinearLayout中可以再次嵌套任意多的其他布局,TableLayout也是一樣,這里就不舉例子了,網(wǎng)上一搜一堆的其實(shí)熟悉網(wǎng)頁編寫,jsp、css之類的對(duì)嵌套不會(huì)陌生,跟網(wǎng)頁編程有異曲同工之妙下面來簡單總結(jié)下前兩種(相對(duì))布局當(dāng)中常用到的一些屬性:相對(duì)布局會(huì)依賴于其他控件的位置,相對(duì)前兩種布局操作會(huì)比較復(fù)雜。我們把相對(duì)布局中常用的控件分成了幾個(gè)組,便于記憶第一組:兩個(gè)控件上下左右的對(duì)齊屬性:(通過ID來指定對(duì)方控件)android:layout_below將該控件置于指定控件之下android:layout_above將該控件置于指定控件之上android:layout_toLeftO—將該控件的右邊緣和指定控件的左邊緣對(duì)齊android:layout_toRightOf將該控件的左邊緣和指定控件的右邊緣對(duì)齊第二組:兩個(gè)控件上下左右的對(duì)齊屬性:(通過ID來指定對(duì)方控件)android:layout_alignBottom將該控件的下邊緣與指定id的下邊緣對(duì)齊android:layout_alignLeft將該控件的左邊緣與指定id的左邊緣對(duì)齊android:layout_alignRight將該控件的右邊緣與指定id的右邊緣對(duì)齊android:layout_alignTop將該控件的上邊緣與指定id的上邊緣對(duì)齊第三組:與父控件對(duì)齊的屬性:(true/false兩個(gè)屬性值)android:layout_alignParentLeft將該控件的左邊緣與其父控件的左邊緣對(duì)齊android:layout_alignParentRight將該控件的右邊緣與其父控件的右邊緣對(duì)齊android:layout_alignParentBottom將該控件的下邊緣與其父控件的下邊緣對(duì)齊android:layout_alignParentTo將該控件的上邊緣與其父控件的上邊緣對(duì)齊第四組:居中屬性android:layout_centerInParent指定控件水平垂直都居中(14)android:layout_centerHorizontal指定控件水平居中(15)android:layout_centerVertical指定控件垂直居中這里大家應(yīng)該會(huì)很疑惑,第一組跟第二組對(duì)齊看似相同,下面舉兩個(gè)例子:android:layout_toLeftOf控件一的左邊緣與控件二的右邊緣對(duì)齊android:layout_alignLeft控件二控件-控件一的左邊緣與控件二的左邊緣對(duì)齊看出來了吧,這兩組屬性有本質(zhì)的區(qū)別。在以后的使用中,大家根據(jù)需要選擇即可這些都是口頭上之說,如果大家要更深刻的了解這些屬性的作用,就自己動(dòng)手試一試,這里就不舉例子了,只為大家做個(gè)總結(jié),一遍以后查閱???明兒見嘍?、Android學(xué)習(xí)第四一一JAVA基礎(chǔ)回顧這才學(xué)習(xí)Android的第四天,在程序中已經(jīng)遇到了JAVA中以前不常用的一些知識(shí)點(diǎn),趕緊回顧復(fù)習(xí)一下,打下基礎(chǔ)這里就做個(gè)簡單的小結(jié):一、匿名內(nèi)部類?匿名內(nèi)部類說白了就是個(gè)沒有被命名的JAVA類在以下條件下使用匿名內(nèi)部類比較適合:只用到該類的一個(gè)實(shí)例時(shí)類在定義后被馬上用到類非常?。⊿UN推薦是在4行代碼以下)給類命名并不會(huì)導(dǎo)致你的代碼更容易被理解在使用匿名內(nèi)部類時(shí),需要注意:匿名內(nèi)部類不能有構(gòu)造方法匿名內(nèi)部類不能定義任何靜態(tài)成員、方法和類匿名內(nèi)部類不能是public、protected>private>static只能創(chuàng)建匿名內(nèi)部類的一個(gè)實(shí)例一個(gè)匿名內(nèi)部類一定是在new之后,用其隱含實(shí)現(xiàn)一個(gè)接口或?qū)崿F(xiàn)一個(gè)類匿名內(nèi)部類為局部內(nèi)部類,所以局部內(nèi)部類的限制對(duì)其都生效具體的例子大家可以從網(wǎng)上看下,我這里只是大概的總結(jié)一下需要注意的東西。二、線程?線程說白了就是一個(gè)程序中不同的執(zhí)行路徑。線程跟進(jìn)程的比較:

①每個(gè)進(jìn)程都有獨(dú)立的代碼跟數(shù)據(jù)空間(進(jìn)程的上下文),進(jìn)程間得切換會(huì)有較大的開銷線程可以看做是輕量級(jí)的進(jìn)程,同一個(gè)線程共享代碼跟數(shù)據(jù)空間,每個(gè)線程有獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC),線程切換的開銷小多進(jìn)程:在操作系統(tǒng)中能同時(shí)運(yùn)行多個(gè)任務(wù)(程序)多線程:在同一應(yīng)用程序中有多個(gè)順序流同時(shí)執(zhí)行new一個(gè)新線程類出來一般會(huì)使用下面兩種方法的其中一個(gè):一:繼承Thread類來創(chuàng)建一個(gè)新的線程,并重寫run方法二:實(shí)現(xiàn)Runnable方法這里需要注意的是:線程啟動(dòng):Thread.start()方法調(diào)用:run()這兩種方式的區(qū)別:其實(shí)真正要啟動(dòng)一個(gè)新的線程,需要執(zhí)行start()方法;run()方法并沒有啟動(dòng)一個(gè)新的線程,只是在當(dāng)前線程下,暫停去執(zhí)行run方法中的方法體,然后再繼續(xù)執(zhí)行接下來的程序。這兩種方式的區(qū)別在今后也會(huì)詳加介紹五.Android學(xué)習(xí)第四天補(bǔ)充Android的常用控件五.Android學(xué)習(xí)第四天補(bǔ)充Android的常用控件一、RadioGroup和RadioButton單選按鈕二、Checkbox復(fù)選框

三、Toast提示框,會(huì)自動(dòng)消失四、ProgressBar進(jìn)度條工具五、ListView以列表形式將控件顯示出來下面就對(duì)這些內(nèi)容做個(gè)詳細(xì)的解釋:首先我們要注意在布局文件中對(duì)控件進(jìn)行聲明不是必須的,這個(gè)在以后應(yīng)用中需要?jiǎng)討B(tài)生成一些控件的時(shí)候,我們就可以在Activity中進(jìn)行控件聲明,這些以后項(xiàng)目中遇到我們?cè)俳榻B。我們先來看RadioGroup與RadioButton的使用方法先來看看RadioGroup與RadioButton在main.xml中的聲明,如下圖中代碼:1E-sdiivitynun.■"strings.innL<?Kmlversion=^l.0nencoding=r,?>-<LirjarLayout<?Kmlversion=^l.0nencoding=r,?>-<LirjarLayoutxmlns:android=nhttp://s-chandroid:layout_width=rrflJI_pdrentlrandroid:1ayout_height=l__p^jrent?android:orisntation=vertr>android:id=d/r^diosroupMandroid:1ayoutwidth="svrdp_content?randroid:1ayout_he1ght=Frwr^paontcnt#android:orientalion=prvertisaJ”?^ndr'/<spJr/res/anc/roid^j

11

12

13

14

IS

lb

17101320■<RadioPut7t.onandroid:android:1ayout_width=content"android:Layout,height.-ent什android:test=rr(?s1&rl<RadioButtonandroid:id=*t?+id/ferns1&r,an^iroici:1ayout_width=content"android:Layout._hsigl'Lt=,T^raL-_content[android:tent=,T&strinc*/></RadioGroup>如下圖中代碼是為RadioGroup添加監(jiān)聽器:〃下來堊打區(qū)些撞件蜥是盆聽亮f&起一個(gè)匿窘⑶畛,為能U網(wǎng)定盅聽器r-adioGcoup.setOnCheckedChangeListe-ner(ii^urOnCh.'pcke<iChangeLi3tensf(>((5Qverridepiibl±<-v-r>Id(R^di*Gi?oupgr*upfink己扣厘己呂:{//I-uLn■Auto-^genaratedmet-hodstubj_f(in^le.^ecrd()==chacJc&cild)[System,cut.print1n(wmale-checked..-、..;U^DSet^ttJHE//Toast\elstIf(£amala.Id()==-cJiftckedld)tSystemroutrprintln('"femal-acheeked,r);"1我們?cè)賮砜碈heckbox的使用方法先來看看Checkbox在main.xml中的聲明,如下圖中代碼:<CheckBoxandroid:1(1=,rcT/swlin*arjdr^id:lay*ut_width=Twr3p_c^nte^trrandr&id:layoutheight=■content"android:tw(?strin-g/swln)"<CheckBoxandraid:id=”『彳_±<f/^ur511android:layout_width=TpzrspcontentFl|ancdroxd;layouthaxglilL-,rivi-apGOntaftt,Fandroid:teKt=Wstrin-gfrun*<CheckE-on□id:i4=門由占H"androld:layout_wi_dth=^p/rapconieut,rendfj1ayout_hsight=■S—p口。#七mjr亡”android:teHr■三%srringfread”如下圖中代碼是為Checkbox添加監(jiān)聽器:〃機(jī)gEG收莒與曲5添加i!5煲剽swim.s-etOnCheeke-dtChangeLi5t-eneuC-ompoLindBntt-on.OnCheck-e'dCh&ngeListener(){00vtrridfepublicvoidonCfiecfceiiChangedtCompouiidHiittoniiuttonVieu?^bg1-eahist{1£h^-ck^d){Syst-eaa.our,println(rswim"he^kei;}else{Systsn.^wc.prin^ln(r,Ewimunchecked『ProgressBar的使用如下代碼為水平進(jìn)度條的聲明方法:<ProgressBarandroid:id="(?+土d/firstrrstyle=rr?andj7Ciid:attr/progressrStyleiforizontdIrrandroid:Layout_-width=111OOdlprrandroid:Layout_hsight=rrivrap_contentrr|android:visibility=Jrgone/>下圖為默認(rèn)進(jìn)度條的聲明方法:<ProgrsssEatfandroid:id=rrt?-Mc//secoric/rrstyle=rrd:<attr/progrossB3T^tyl白rrandroid:1ayout._width=rrivr^p_contentrrandroid:l^yout._hsight=rrDZjrapcontentrrandroid:visibility=rtqone"/>可以一眼看出,style屬性的設(shè)置決定了進(jìn)度條的樣式。如下代碼即為實(shí)現(xiàn)這兩個(gè)進(jìn)度條的Activity類ProgressBarTgress;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.ProgressBar;publicclassProgressBarTestextendsActivity(//聲明變量privateProgressBarfirst=null;privateProgressBarsecond=null;privateButtonbutton=null;privateinti=0;@OverridepublicvoidonCreate(BundlesavedInstanceState)(//這兩句一般都要有super.onCreate(savedInstanceState);setContentView(R.layout.main);//通過findViewById獲得控件對(duì)象first=(ProgressBar)findViewById(R.id.first);second=(ProgressBar)findViewById(R.id.second);button=(Button)findViewById(R.id.button);//為button設(shè)置監(jiān)聽器button.setOnClickListener(newButtonListener());}//監(jiān)聽器內(nèi)部類@OverridepublicvoidonClick(Viewv)(//TODOAuto-generatedmethodstubif(i==0)(//設(shè)置進(jìn)度條為可見,如果寫0的話,不好看,View.VISIBLE就能讓人一看就知道是設(shè)置為可見first.setVisibility(View.VISIBLE);second.setVisibility(View.VISIBLE);}elseif(i<first.getMax())(//設(shè)置進(jìn)度條的最大值first.setMax(200);//設(shè)置進(jìn)度條的位置first.setProgress(i);//設(shè)置第二進(jìn)度條的位置first.setSecondaryProgress(i+10);//因?yàn)槟J(rèn)的進(jìn)度條是無法顯示進(jìn)行的狀態(tài)的,所以second不用設(shè)置}else(first.setVisibility(View.GONE);second.setVisibility(View.GONE);}i=i+10;}}}如下圖為運(yùn)行后的結(jié)果:璃向進(jìn)度奈與默認(rèn)進(jìn)度奈ProgressBarTest但是在開發(fā)應(yīng)用程序的時(shí)候,比如下載這些功能是不能寫在Activity中的,有可能導(dǎo)致整個(gè)Activity長時(shí)間無響應(yīng)或者報(bào)錯(cuò),用戶體驗(yàn)較差,所以Handler就應(yīng)運(yùn)而生啦?以后將會(huì)學(xué)習(xí)到在使用ListView的例子中,需要注意這里繼承的是Activity的子類ListActivity。六、Android學(xué)習(xí)第五天Handler的使用注意:有很多功能是不能寫在Activity中的,例如說下載或者處理大量的數(shù)據(jù)等,如果這類操作寫在Activity中,就有可能導(dǎo)致整個(gè)Activity無響應(yīng)甚至報(bào)錯(cuò),這樣用戶體驗(yàn)就會(huì)比較差。所以此類功能應(yīng)該獨(dú)立于Activity,且互不干擾,所以Handler就應(yīng)運(yùn)而生了。Handler提供了一個(gè)異步的消息處理的方案,將具體復(fù)雜的操作都放在一個(gè)線程中取處理。創(chuàng)建一個(gè)Handler對(duì)象的基本步驟如下:(一)點(diǎn)擊一個(gè)按鈕,調(diào)用Handler的post方法,將要執(zhí)行的線程對(duì)象添加到隊(duì)列當(dāng)中去。將要執(zhí)行的操作寫在線程對(duì)象的run()方法當(dāng)中。(三)如果想要循環(huán)執(zhí)行,則可以在run方法內(nèi)部執(zhí)行Handler的postDelayed或者post方法,將線程反復(fù)加入到隊(duì)列當(dāng)中。下面是使用Handler的一個(gè)簡單的例子:packagemickey.handler;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;publicclassHandlerTestextendsActivity(//聲明兩個(gè)按鈕控件privateButtonbegin=null;privateButtonend=null;@OverridepublicvoidonCreate(BundlesavedInstanceState)(super.onCreate(savedInstanceState);setContentView(R.layout.main);//根據(jù)控件的ID得到代表控件的對(duì)象,并為這兩個(gè)按鈕設(shè)置相應(yīng)的監(jiān)聽器begin=(Button)findViewById(R.id.begin);begin.setOnClickListener(newStartButtonListener());end=(Button)findViewById(R.id.end);end.setOnClickListener(newEndButtonListener());//為start按鈕設(shè)置的監(jiān)聽器classStartButtonListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewv)(//無延遲,直接加入消息隊(duì)列中,此時(shí)消息隊(duì)列中只有此一個(gè)線程//調(diào)用handler的post方法,將要執(zhí)行的線程對(duì)象添加到隊(duì)列當(dāng)中去handler.post(updateThread);}}//為end按鈕設(shè)置的監(jiān)聽器classEndButtonListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewv)(handler.removeCallbacks(updateThread);}}//創(chuàng)建一個(gè)Handler對(duì)象Handlerhandler=newHandler();//一個(gè)線程類,將要執(zhí)行的操作寫在線程對(duì)象的run方法當(dāng)中RunnableupdateThread=newRunnable()(@Overridepublicvoidrun()(System.out.println("run");//在run方法內(nèi)發(fā)執(zhí)行postDelayed或者post方法,延遲三秒,將線程加入隊(duì)列handler.postDelayed(updateThread,3000);}};}但是我們看到了,上面的例子中我們只是調(diào)用了線程的run()方法,并沒用調(diào)用Thread的start()方法來重啟一個(gè)線程,因此,上面這個(gè)例子中,實(shí)際上我們并沒有重啟一個(gè)新的線程,從始至終Handler都是和Activity在同一線程中的。所以如果我們?cè)谑褂肏andler時(shí),要重啟一個(gè)線程,使用Handler.post(Threadthread)只是調(diào)用了該線程的run方法,我們只有使用java中重啟線程的方法來重啟一個(gè)新的線程,即調(diào)用Thread.start()方法,這兒不再多說七,Android學(xué)習(xí)第六天一SQLite與文件下載SQLiteSQLite是Android內(nèi)嵌的一個(gè)非常小的關(guān)系型數(shù)據(jù)庫??偨Y(jié):當(dāng)我們操作在學(xué)習(xí)SQLite當(dāng)中,遇到兩個(gè)問題:如果我們?cè)诖罱ˋndroid環(huán)境成功后,在命令行中輸入adb后沒有反應(yīng),可以按一下操作來做:第一步:將platform-tools的目錄加入path環(huán)境變量的配置中;第二步:將platform-tools下的adb.exe以及兩個(gè)dll文件拷貝到tools目錄下第三步:重啟命令行,輸入adb,搞定(二)結(jié)果按照如上配置path變量后,輸入adbshell命令后,提示Devicenotfound.報(bào)這個(gè)錯(cuò)的原因,原來是因?yàn)闆]有連接到手機(jī)所以報(bào)錯(cuò),在開發(fā)Android中,是因?yàn)锳ndroid虛擬機(jī)沒有運(yùn)行而報(bào)錯(cuò),我們只要在eclipse中將Android虛擬機(jī)運(yùn)行起來即可訪問。根據(jù)mars老師說,SQLite在開發(fā)過程中會(huì)出現(xiàn)一些比較古怪的問題,所以建議不要再SQLite中存儲(chǔ)過多的數(shù)據(jù),不要太過于依賴SQLite。.程序調(diào)試(一)可以適量的加入一些System.out語句,用來檢測程序的運(yùn)行情況(二)使用日志輸入(Log)——推薦使用這種規(guī)范的做法.文件下載要實(shí)現(xiàn)下載文件的功能,一般步驟為:(一)創(chuàng)建一個(gè)HttpURLConnection對(duì)象URLurl=newURL("http://......");HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();(二)獲得InputStream對(duì)象urlConn.getInputStream();(三)訪問網(wǎng)絡(luò)的權(quán)限android:permission.INTERNET訪問手機(jī)SDCARD的步驟:(一)得到當(dāng)前設(shè)備SD卡的目錄Environment.getExternalStorageDirectory();(二)訪問SD卡的權(quán)限android.permission.WRITE_EXTERNAL_STORAGE遇到的問題:當(dāng)寫好下載程序,卻怎么也下載不成功,原來是忘記了最最重要的一步:切忌最后要在Manifest.xml中添加以下兩行代碼,賦予權(quán)限:<!--下面這兩句在下載中必不可少,第一個(gè)是賦予了下載的權(quán)限,第二個(gè)是賦予了寫入SD卡的權(quán)限--><uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>八,Android學(xué)習(xí)第七一一XML文件解析方法XML文件:extensiblemarkuplanguage定義:用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語言,可以用來標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對(duì)自己的標(biāo)記語言進(jìn)行定義的源語言。解析XML的方式:SAX——SimpleAPIforXML,既是一種接口,也是一個(gè)軟件包采用的是事件驅(qū)動(dòng),也就是它解析XML文檔并需要解析完整個(gè)文檔,在解析過程中,它會(huì)判斷解析出的當(dāng)前字符是否符合XML中的某部分,如果符合則觸發(fā)事件,如果不符合則觸發(fā)相應(yīng)的回調(diào)函數(shù)。此回調(diào)函數(shù)封裝在ContentHandler接口中。。因?yàn)镃ontentHandler被實(shí)現(xiàn)后會(huì)被強(qiáng)制實(shí)現(xiàn)很多無用方法,故不用此接口,我們繼承DefaultHandler類,因?yàn)槠鋵?shí)現(xiàn)了ContentHandler中一部分我們需要的方法,省去了一些我們無用的方法哦。所以選擇用這個(gè)。缺點(diǎn)是,如果要使用它去添加或者刪除一些內(nèi)容會(huì)比較費(fèi)勁的。DOMDocumentObjectModel此種解析方式是把已知的XML文檔全部載入到內(nèi)存中,并將其存儲(chǔ)為dom樹,根據(jù)dom結(jié)點(diǎn)與子結(jié)點(diǎn)之間的關(guān)系來解析文件,如果文件過大的話,解析會(huì)很耗時(shí)而且很耗資源。這里主要說明下SAX解析XML文件的過程:(一)創(chuàng)建事件處理程序(二)創(chuàng)建SAX解析器(三)將事件處理程序分配給解析器(四)對(duì)文檔進(jìn)行解析,將每個(gè)事件發(fā)送給處理程序九、Android學(xué)習(xí)第/——廣播機(jī)制與WIFI網(wǎng)絡(luò)操作今天熟悉了Android中的廣播機(jī)制與WIFI網(wǎng)絡(luò)的一些基本操作,總結(jié)如下:Android的廣播機(jī)制我們知道廣播機(jī)制中,發(fā)送方不會(huì)關(guān)心接收方時(shí)候接收到數(shù)據(jù)或者如何去處理數(shù)據(jù)。這里總結(jié)下Android中BroadcastReceiver的注冊(cè)方法:(一)在應(yīng)用程序中進(jìn)行注冊(cè)(二)在Manifest.xml中進(jìn)行注冊(cè)如果在Manifest.xml中進(jìn)行注冊(cè),那么該應(yīng)用程序無論是開還是關(guān),該應(yīng)用都會(huì)收到廣播事件。例如:監(jiān)聽電池耗電量等。顯而易見,這種注冊(cè)方法并不是我們想要的。如果在應(yīng)用程序中進(jìn)行注冊(cè),就會(huì)在Activity可見時(shí)進(jìn)行注冊(cè),不可見時(shí)就會(huì)取消注冊(cè)。在Activity中進(jìn)行注冊(cè)的代碼如下:注冊(cè):registerReceiver(BroadcastReceiverreceiver,IntentFilterfilter);取消注冊(cè):unregisterReceiver(BroadcastReceiverreceiver);如果一個(gè)BroadcastReceiver用于更新UI,那么通常會(huì)使用在代碼中注冊(cè)的方法。WIFI基本操作WIFI應(yīng)該說是Android中比較重要的一塊了,用Android系統(tǒng)手機(jī)的童鞋們,應(yīng)該每天都在接觸WIFI。今天熟悉了如何對(duì)WIFI網(wǎng)卡進(jìn)行基本的操作,包括打開,關(guān)閉,檢測網(wǎng)卡狀態(tài)等等。WIFI網(wǎng)卡的狀態(tài)是有一系列整型常量來表示的,如下:TOC\o"1-5"\h\z(一)WIFI_STATE_DISABLEDWIFI網(wǎng)卡不可用1(二)WIFI_STATE_DISABLINGWIFI網(wǎng)卡正在關(guān)閉0(三)WIFI_STATE_ENABLEDWIFI網(wǎng)卡可用狀態(tài)——3(四)WIFI_STATE_ENABLINGWIFI網(wǎng)卡正在打開2(五)WIFI_STATE_UNKNOWN未知網(wǎng)卡狀態(tài)——4大家注意到了,每個(gè)狀態(tài)后我寫了一個(gè)數(shù)字,我們知道這些都是整型常量,所以后面的數(shù)字就是這些常量對(duì)應(yīng)的值,如果大家在程序中,輸出當(dāng)前當(dāng)卡的狀態(tài),就會(huì)看到這些數(shù)值,對(duì)應(yīng)著某種網(wǎng)卡的狀態(tài)。操作AndroidWIFI網(wǎng)卡狀態(tài)中,比較重要的是操作WIFI網(wǎng)卡需要的權(quán)限,這個(gè)有很多。我們?cè)贏ndroidAPI中可以找到Manifest.permission類,就可以看到各種權(quán)限了。這里貼出WIFI的一個(gè)例子,WIFI的這個(gè)例子只能在真機(jī)上面測試,因?yàn)槟M器沒有WIFI這樣的功能。這里比較重要的有三個(gè)文件:WIFITestActivity.javamain.xmlManifest.xml下面來看看這三個(gè)文件中的具體代碼:main.xml<?xmlversion="1.0"encoding="utf-8”?><LinearLayoutxmlns:android="/apk/res/android”android:layout_width="fill_parent”android:layout_height="fill_parent”android:orientation="vertical"><TextViewandroid:layout_width="fill_parent”android:layout_height="wrap_content”android:text="WIFI”/><Buttonandroid:id="@+id/open”android:layout_width="fill_parent”android:layout_height="wrap_content”android:text="打開wifi/><Buttonandroid:id="@+id/close”android:layout_width="fill_parent”android:layout_height="wrap_content”android:text="關(guān)閉wifi"/><Buttonandroid:id="@+id/check"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="檢查wifi狀態(tài)”/></LinearLayout>WIFITestActivity.javapackagemickey.wifi;importandroid.app.Activity;importandroid.content.Context;.wifi.WifiManager;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.Toast;publicclassWIFITestActivityextendsActivity(//三個(gè)控件對(duì)象privateButtonopen=null;privateButtonclose=null;privateButtoncheck=null;//我們知道要對(duì)網(wǎng)卡進(jìn)行操作,就需要WifiManager這個(gè)類privateWifiManagerwifiManager=null;@OverridepublicvoidonCreate(BundlesavedInstanceState)(super.onCreate(savedInstanceState);setContentView(R.layout.main);//得到控件對(duì)象的實(shí)例,并且為他們?cè)O(shè)置相應(yīng)的監(jiān)聽器open=(Button)findViewById(R.id.open);open.setOnClickListener(newOpenWifiListener());close=(Button)findViewById(R.id.close);close.setOnClickListener(newCloseWifiListener());check=(Button)findViewById(R.id.check);check.setOnClickListener(newCheckWifiListener());}//為打開網(wǎng)卡按鈕設(shè)置監(jiān)聽器classOpenWifiListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewarg0)(//內(nèi)部類如果直接使用this的話代表的是它自己,所以要用WIFITestActivity.this//得到WIFIManager對(duì)象wifiManager=(WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);//setWifiEnabled(true)打開wifi網(wǎng)卡wifiManager.setWifiEnabled(true);//得到當(dāng)前網(wǎng)卡的狀態(tài),這兒輸出的是一個(gè)整型常量System.out.println("當(dāng)前網(wǎng)卡的狀態(tài)為:"+wifiManager.getWifiState());//彈出一個(gè)Toast提示用戶當(dāng)前wifi網(wǎng)卡的狀態(tài)是什么,記得調(diào)用show方法Toast.makeText(WIFITestActivity.this,”當(dāng)前wifi網(wǎng)卡的狀態(tài)為"+wifiManager.getWifiState(),Toast.LENGTH_SHORT).show();}}//為關(guān)閉網(wǎng)卡按鈕設(shè)置監(jiān)聽器classCloseWifiListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewarg0)(//得到WIFIManager對(duì)象wifiManager=(WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);//設(shè)置網(wǎng)卡不可用wifiManager.setWifiEnabled(false);System.out.println("當(dāng)前網(wǎng)卡的狀態(tài)為:"+wifiManager.getWifiState());Toast.makeText(WIFITestActivity.this,”當(dāng)前wifi網(wǎng)卡的狀態(tài)為"+wifiManager.getWifiState(),Toast.LENGTH_SHORT).show();}}//為檢查網(wǎng)卡狀態(tài)按鈕設(shè)置監(jiān)聽器classCheckWifiListenerimplementsOnClickListener(@OverridepublicvoidonClick(Viewarg0)(//得到WIFIManager對(duì)象wifiManager=(WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);System.out.println("當(dāng)前網(wǎng)卡的狀態(tài)為:"+wifiManager.getWifiState());Toast.makeText(WIFITestActivity.this,”當(dāng)前wifi網(wǎng)卡的狀態(tài)為"+wifiManager.getWifiState(),Toast.LENGTH_SHORT).show();}}}Manifest.xml<?xmlversion="1.0"encoding="utf-8”?><manifestxmlns:android="/apk/res/android"package="mickey.wifi”android:versionCode="1"android:versionName="1.0”><uses-sdkandroid:minSdkVersion="10”/><applicationandroid:icon="@drawable/ic_launcher”android:label="@string/app_name"><activityandroid:label="@string/app_name”android:name=".WIFITestActivity"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity></application><!--這四個(gè)權(quán)限一定要有,否則系統(tǒng)不會(huì)賦予用戶操作網(wǎng)絡(luò)及網(wǎng)卡的權(quán)限--><uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/></manifest>然后童鞋們,把基于Android系統(tǒng)的手機(jī)用USB數(shù)據(jù)線連接到電腦,記得把USB調(diào)試打開,然后運(yùn)行你的程序,就會(huì)自動(dòng)在手機(jī)上運(yùn)行這個(gè)程序啦?十、Android學(xué)習(xí)第九小結(jié)通過這段時(shí)間的學(xué)習(xí),今晚上來做個(gè)小小的總結(jié)???最早之前我們就了解到,Android四個(gè)重要的部分:一、Activity——門面,就是我們看到的用戶界面二、Intent——在整個(gè)應(yīng)用程序間傳送數(shù)據(jù)三、Service——不可見,為整個(gè)應(yīng)用程序提供一個(gè)服務(wù)支持四、ContentProvider為應(yīng)用程序提供數(shù)據(jù)的接口至此,這四個(gè)重要的部分我們都已經(jīng)有了初步的認(rèn)識(shí)。但是并不是每一個(gè)Android應(yīng)用程序都需要這四個(gè)部分,這不是必需的。某些時(shí)候,我們只需要這四種中的幾種組合成我們的應(yīng)用。Activity至此,Activity我們已經(jīng)很清楚了,需要注意的是Activity的使用,需要在Manifest.xml中進(jìn)行注冊(cè)。IntentAndroid中提供了Intent機(jī)制來協(xié)助應(yīng)用間的交互與通訊,Intent負(fù)責(zé)對(duì)應(yīng)用中一次操作的動(dòng)作、數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述,Android則根據(jù)這些Intent的描述,負(fù)責(zé)找到相應(yīng)的組件,將Intent傳遞給調(diào)用的組件,并完成對(duì)組件的調(diào)用。Intent不僅可用于應(yīng)用程序之間,也可用于應(yīng)用程序內(nèi)部的Activity/Service之間的交互。因此,Intent在這里起的是一個(gè)媒體中介的作用,專門提供組件互相調(diào)用的相關(guān)信息,實(shí)現(xiàn)調(diào)用者與被調(diào)用者之間的解耦。理解Intent的關(guān)鍵之一是理解Intent的兩種基本用法:1、顯式的Intent即在構(gòu)造Intent對(duì)象的時(shí)候就指定接受者2、隱式的Intent一在構(gòu)造Intent對(duì)象時(shí),并不知道也并不關(guān)心接受者是誰,有利于降低發(fā)送者與接受者之間的耦合。以下是Intent幾種常用的用法:IntentintentOne=newIntent(IntentActivity.this,ResultActivity.class);IntentActivity.this.startActivity(intentOne);IntentintentTwo=newIntent(IntentActivity.this,ResultActivity.class);//把數(shù)據(jù)放到Bundle中,進(jìn)行傳遞Bundlebundle=newBundle();bundle.putString("name”,"chenzheng");//intent.putExtra可以用來放鍵值對(duì)intentTwo.putExtras(bundle);IntentActivity.this.startActivity(intentTwo);—//對(duì)于數(shù)據(jù)接收BundleresultBundle=getIntent().getExtras();Stringname=resultBundle.getString("name");IntentresultIntent=getIntent();BundleresultBundleTwo=newBundle();resultBundleTwo.putString("name","ThisisfromShowMsg");resultIntent.putExtras(resultBundleTwo);setResult(RESULT_OK,resultIntent);ServiceService是一個(gè)應(yīng)用程序組件Service沒有圖形化界面Service通常用來處理一些耗時(shí)比較長的操作,例如下載,播放MP3文件等操作??梢允褂肧ervice更新ContentProvider,發(fā)送Intent以及啟動(dòng)系統(tǒng)通知等等。我們要注意,Service不是一個(gè)單獨(dú)的進(jìn)程,也不是一個(gè)線程。這里別忘記寫完一個(gè)Service要去Manifest.xml中進(jìn)行注冊(cè)。ContentProvider應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件中、SQL數(shù)據(jù)庫中、甚至是任何有效的設(shè)備中。當(dāng)你想將你的數(shù)據(jù)與其他應(yīng)用共享時(shí),ContentProvider就將變的很有用了。一個(gè)ContentProvider類實(shí)現(xiàn)了一組標(biāo)準(zhǔn)的方法,從而能夠?qū)⑵渌膽?yīng)用保存或者讀取此ContentProvider處理的各種數(shù)據(jù)類型。Toast俺一直對(duì)這個(gè)Toast很有興趣,所以從網(wǎng)上找了個(gè)例子自己練習(xí)了下,與大家分享:下面的例子一共有五種Toast的用法第一種:默認(rèn)樣式//默認(rèn)的Toast樣式Toast.makeText(ToastActivity.this,”默認(rèn)Toast樣式”,Toast.LENGTH_SHORT).show();運(yùn)行結(jié)果如下:瑩■±53Tna^tTest113DToast買例戳認(rèn)樣式月定義M示位萱樣式帶圖片樣式完全旨定義樣式其他線程祥式我認(rèn)To第甘學(xué)式第二種:自定義顯示位置//自定義位置的ToastToasttoast=Toast.makeText(ToastActivity.this,"自定義位置的Toast",Toast.LENGTH_LONG);//自定義Toast的顯示位置toast.setGravity

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論