

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第 1 頁(yè) 共 25 頁(yè)安卓學(xué)習(xí)心得體會(huì)an droid 學(xué)習(xí)心得-093380117 計(jì)算機(jī)應(yīng)用( 1)張峰1. 關(guān)于 activity1. 在一個(gè) activity 中使用多個(gè) view如果把 activity 看作 mvc 中的 control?它負(fù)責(zé)管理 ui 和接受事件(包括用戶(hù)的輸入),雖然說(shuō)一個(gè) activity 通常對(duì)應(yīng)一個(gè)屏幕,但事實(shí)上,我們是可以只用一個(gè) activity 管理多個(gè)不同的 view 來(lái)實(shí)現(xiàn)簡(jiǎn)單的邏 輯。首先,我們?cè)黾右粋€(gè)新的資源描述 layout/sec on d.xm。除了一個(gè)“ hell 中國(guó)”以外, 增加一個(gè)按鈕可以返回前一個(gè)界 面。 然后,在代碼中我
2、們要為 hellotwo 增加兩個(gè)方法, setviewonemand 和setviewtwomand 分別處理一下在不同界面時(shí),從資源里加載組件并 為組件綁定一個(gè)事件處理器最后,我們需要在on create 的時(shí)候,也就是啟動(dòng)后的 main 界面上設(shè)置一下按鈕事件處理器。2. 還是回到正道上,多個(gè) activity 之間的跳轉(zhuǎn)an droid 中提供一個(gè)叫 in te nt 的類(lèi)來(lái)實(shí)現(xiàn)屏幕之間的跳轉(zhuǎn),按文檔 的說(shuō)法,似乎他們也建議采用這種方法,intent 的用法比較復(fù)雜,現(xiàn)在 我先看看它最簡(jiǎn)單的用法。這里的跳轉(zhuǎn)功能用 intent 來(lái)操作,它的最簡(jiǎn)單用法就是用函數(shù) setclass設(shè)置跳轉(zhuǎn)
3、前后兩個(gè) activity 類(lèi)的實(shí)例,然后調(diào)用 activity 自己的 startactivity第 2 頁(yè) 共 25 頁(yè)(intent 即可。最后一句 finish()表示將當(dāng)前 activity 關(guān)掉(如果 不關(guān)掉會(huì)如何?你可以自己試一下看效果,事實(shí)上有時(shí)我們是不需要 關(guān)掉當(dāng)前 activity的)。然后,我們同樣弄一個(gè) activity 類(lèi) hellothreeb 代碼與前面的差不 多,只是將 setclas 啲兩個(gè)參數(shù)反一下,這樣就可以簡(jiǎn)單地實(shí)現(xiàn)在兩個(gè) activity 界面中來(lái)回切換的功能了。2 關(guān)于 intent 的使用intent 分為兩大類(lèi),顯性的(explicit )和隱性
4、的(implicit)。一般 來(lái)說(shuō),intent 要定位事件的目的地,無(wú)外乎需要以下幾個(gè)信息:1 種類(lèi)(category,比如我們常見(jiàn)的 launcher_categor 就是表示這 是一類(lèi)應(yīng)用程序。2類(lèi)型(type),在前面的例子中沒(méi)用過(guò),表示數(shù)據(jù)的類(lèi)型,這是 隱性intent 定位目標(biāo)的重要依據(jù)。3 組件 (ponent) ,前面的例子中用的是 setclass 不過(guò)也可以用 setponent來(lái)設(shè)置 intent 跳轉(zhuǎn)的前后兩個(gè)類(lèi)實(shí)例。4.附加數(shù)據(jù)(extras,在 con te nturi 之外還可以附加一些信息,它 是bundle 類(lèi)型的對(duì)象。其實(shí),如果是在一個(gè)應(yīng)用內(nèi)部,這種隱性的
5、in te nt 實(shí)在有點(diǎn)別 扭,個(gè)人覺(jué)得,這種松藕合的實(shí)現(xiàn)方法,只適用于那些較大的系統(tǒng)或 者多個(gè)不同的應(yīng)用之間的調(diào)用,可手機(jī)上又有什么“較大”的系統(tǒng) 呢?無(wú)非是可以與不同第 3 頁(yè) 共 25 頁(yè)來(lái)源的多個(gè)應(yīng)用之間方便地互操作而已,那么會(huì)是什么樣的場(chǎng)景呢?比如,給 qq 好友發(fā)送 gmail 郵件,用 googlemap 查找 qq 好友所在的位置?看上去挺不錯(cuò)的。關(guān)于這個(gè) contentprovider,其實(shí)還有話(huà)說(shuō),它主要是的那些看似數(shù) 據(jù)庫(kù)操作的方法我們都沒(méi)真正去實(shí)現(xiàn)呢。不過(guò)今天就到這里了,等下 回再去研究吧。3. 關(guān)于 listactivity準(zhǔn)備一個(gè) list 對(duì)象并借助 adapt
6、e 哦可以構(gòu)造出一個(gè)列表。重載 onlistitemclick 方法可以響應(yīng)選擇事件,利用第一個(gè)參數(shù)可以訪(fǎng)問(wèn)到這個(gè) listview實(shí)例以得到選中的條目信息。這里有一點(diǎn)要說(shuō)明的,就是如果 更簡(jiǎn)單的話(huà),其實(shí)連那個(gè) setco nte ntview 都可以不要了,an droid 也會(huì)自 動(dòng)幫我們構(gòu)造出一個(gè)全屏的列表。但是本例中我們需要一個(gè)textview 來(lái)顯示選中的條目,所以我們需要一個(gè) layout.ma inb 描述一下這個(gè)列表窗 口。這里需要注意的是那個(gè) listview 的 id,是系統(tǒng)自定義的android:lis,不是我們隨便取的,否則系統(tǒng)會(huì)說(shuō)找不到它想要的listview了。然后
7、,在這個(gè) listview 之外,我們又增加了一個(gè) textview,用來(lái)顯 示選中的條目。再來(lái)說(shuō)說(shuō)這里用到的 arrayadapte,r 它的構(gòu)造函數(shù)中第二個(gè)參數(shù)是一個(gè)資源 id,arrayadapte 的 api 文檔中說(shuō)是要求用一個(gè)包含 textview 的layout 文件,平臺(tái)用它來(lái)顯示每個(gè)選擇條目的樣式,這里的取值是第 4 頁(yè) 共 25 頁(yè)r.layout.list_row,所以, 我們還有一個(gè) list_row.xml 文件來(lái)描述這個(gè)布 局,相當(dāng)簡(jiǎn)單。從arrayadapte上溯至U baseadapter發(fā)現(xiàn)還有幾個(gè)同源的 adapter也 應(yīng)該可以使用, 象 simplead
8、apte 和 cursoradapte, 還是做個(gè)例子來(lái)實(shí)驗(yàn) 一下吧。然后,在 hellotw(請(qǐng)你繼續(xù)關(guān)注好:)ob 中的 on create 函數(shù)中,修 改代碼,有幾個(gè)不同:items 的元素是 hashmap 實(shí)例,這是一點(diǎn)變化, 然后構(gòu)造函數(shù)除了要求 items 以外,還要求提供一個(gè) string來(lái)說(shuō)明用 hash 表中的哪個(gè)字段顯示在列表中,而后是一個(gè)資源id 的數(shù)組。因?yàn)閱渭兊?cursoradaptei 是抽象類(lèi),所以我用的是它的子類(lèi)simplecursoradapter 很好理解,先用 contentresolver 查詢(xún)通訊簿得至 U 個(gè)游標(biāo),然后告訴 simplecurso
9、radapte 要用其中的 people.namd 乍為顯示 項(xiàng)來(lái)構(gòu)造出一個(gè) adapter 即卩可。4 關(guān)于 dialog注意到 android.app 包下除了 dialog(可用于制作復(fù)雜的對(duì)話(huà)框)以 外,還包括了幾個(gè)系統(tǒng)定義好的對(duì)話(huà)框類(lèi),如datepickerdialog、timepickerdialog 及 alertdialog其中 alertdialog 我上回用過(guò)一次,基本上就那樣子了,今天看看另 外兩個(gè)對(duì)話(huà)框的使用吧。很簡(jiǎn)單的,無(wú)非是需要一個(gè) on datesetliste ne 接口的實(shí)現(xiàn)而已,在第5頁(yè)共 25 頁(yè)它里面的 dateset 方法中就可以得到選擇的日期了。而t
10、imepickerdialog與 datepickerdialog 使用如出一轍。看看另一個(gè) progressdialog 勺用法吧,這個(gè)類(lèi)與 alertdialog 一樣包含 了多個(gè) static 的方法,所以使用起來(lái)是非常方便的。比如說(shuō),如果我們 需要用它來(lái)表示一個(gè)長(zhǎng)時(shí)間的操作。5.關(guān)于 service 和 notification大略地看了一下 android.app 下的 service 類(lèi),覺(jué)得它與 activity 非常 相似,只是要注意幾個(gè)地方:1 .生命周期,service 的從 oncreate()-onstart(int,bundle)-ondestroy。顯得更為簡(jiǎn)單。但
11、是它的 on start 是帶參數(shù)的,第一個(gè) id 可用來(lái)標(biāo)識(shí)這 個(gè)service 第二個(gè)參數(shù)顯示是用來(lái)傳遞數(shù)據(jù)的了。比較activity,傳遞數(shù)據(jù)的 bu ndle 是在 on create 就帶進(jìn)入的。2. service 的啟動(dòng)由 context.startservic 開(kāi)始,其實(shí) activity 或者 service都是 con text 的派生類(lèi)。 結(jié)束于 con text.stopservice 或者它自己的 stopself()。3. service 還有一個(gè)與 activity 不一樣的是它可以由另一個(gè) context 去 綁定一個(gè)已存在的 service 就是這個(gè)方法 co
12、ntext.bindservice,被綁定 的 service要求是已經(jīng) on create 了但可以沒(méi)有 on start。在 service 類(lèi)中有 個(gè)抽象方法getbinder(可以得到這個(gè) ibinder 對(duì)象。關(guān)于這方面的細(xì)節(jié), 以后再看,這里只做個(gè)記錄罷。4 與 service 有關(guān)的還有一個(gè)安全的問(wèn)題,可以在androidmanifest.xmI 中用 vuses-permission:#簽來(lái)聲明一個(gè) service 的訪(fǎng) 問(wèn)第 6 頁(yè) 共 25 頁(yè)權(quán)限,關(guān)于 an droid 的安全問(wèn)題也留待以后再解決吧。6. gridview 與 imageview簡(jiǎn)單一點(diǎn)吧,就瞧瞧那個(gè) g
13、rid 的效果,an droid 提供了一個(gè) gridview,不過(guò)從 apidemo 中看來(lái),它似乎與 pc 上的 grid 差別還是挺大 的,更像那個(gè) iconv iew 的感覺(jué)。不知道 an droid 中如何實(shí)現(xiàn)表格界面? 雖然在移動(dòng)終端上,表格一般不會(huì)有誰(shuí)使用,大家似乎更傾向于使用 listview,而 an droid 對(duì)于listview 則有更簡(jiǎn)單的實(shí)現(xiàn) listactivity。很簡(jiǎn)單,只要重載幾個(gè)方法就可以了,關(guān)鍵是那個(gè)getview 方法,它負(fù)責(zé)構(gòu)建出每個(gè)單元格中的對(duì)象實(shí)例。這里我們構(gòu)造的是一個(gè) imageview實(shí)例。然后就是同樣的將這個(gè) adapter 賦給 grid
14、view 即可, 大家可以看看 效果,注意在做這個(gè)例子前,先放幾個(gè)小圖片到 res/drawable 目錄下, buildproject一下就可以得到那個(gè) r.drawable.aT(這里的 a 是圖像文件 名,如 a.png)。在 getview 方法中我們使用了 imageview 類(lèi),這又是一個(gè) widget。 除了上面用到的幾個(gè)方法以外,還有以下幾個(gè)方法值得注意:與圖像來(lái)源有關(guān)的方法,我們只用了資源文件的方式。還是習(xí)慣性跑題了,其實(shí),我是想通過(guò)我對(duì)這個(gè)類(lèi)的無(wú)數(shù)次debugger 跟進(jìn), 說(shuō)說(shuō)它的多線(xiàn)程異步處理的解決策略的。 他的基本策略 如下:1. 當(dāng)你實(shí)例化一個(gè) asyncquery
15、handle 類(lèi)時(shí)(包括其子類(lèi) ),它會(huì) 單件構(gòu)造一個(gè)線(xiàn)程(后面會(huì)詳述 .),這個(gè)線(xiàn)程里面會(huì)構(gòu)建一個(gè)消息循 環(huán)。第 7 頁(yè) 共 25 頁(yè)2. 獲得該消息循環(huán)的指針,用它做參數(shù)實(shí)例化另一個(gè) han dler 類(lèi), 該類(lèi)為內(nèi)部類(lèi)。至此,就有了兩個(gè)線(xiàn)程,各自有一個(gè) han dler 來(lái)處理消 息。3.當(dāng)調(diào)用 onxxx 的時(shí)候,在 xxx 函數(shù)內(nèi)部會(huì)將請(qǐng)求圭寸裝成一個(gè)內(nèi)部 的參數(shù)類(lèi),將其作為消息的參數(shù),將此消息發(fā)送至另一個(gè)線(xiàn)程。4. 在該線(xiàn)程的 handler 中,接受該消息,并分析傳入的參數(shù),用初 始化時(shí)傳入的 contentresolve 進(jìn)行 xxx 操作,并返回 cursor 或其他返回 值
16、。5. 構(gòu)造一個(gè)消息,將上述返回值以及其他相關(guān)內(nèi)容綁定在該消息 上,發(fā)送回主線(xiàn)程。6. 主線(xiàn)程默認(rèn)的 asyncqueryhandle 類(lèi)的 handlemessag 方法(可自 定義,但由于都是內(nèi)部類(lèi),基本沒(méi)有意義 .)會(huì)分析該消息,并轉(zhuǎn)發(fā)給 對(duì)應(yīng)的onxxxplete 方法。7. 用戶(hù)重寫(xiě)的 onxxxplete 方法開(kāi)始工作。這就是它偷偷摸摸做過(guò)的事情,基本還是很好理解的。我唯一好 奇的是它的線(xiàn)程管理方式,我猜測(cè)他是用的單件模式。第一個(gè)asyn cqueryha ndle 的實(shí)例化會(huì)導(dǎo)致創(chuàng)建一個(gè)線(xiàn)程,從此該線(xiàn)程成為不死 老處男,所有的 contentresolve 相關(guān)的工作,都由該線(xiàn)程
17、統(tǒng)一完成。個(gè) 人覺(jué)得這種解決方式很贊。本來(lái)這個(gè)線(xiàn)程的生命周期就很難估量,并 且,當(dāng)你有一個(gè) contentprovider 的請(qǐng)求的時(shí)候,判斷你會(huì)做更多的類(lèi)似 操作并不過(guò)分。就算錯(cuò)了,花費(fèi)的也只是一個(gè)不死的線(xiàn)程(與進(jìn)程同 生死共存亡 .),換來(lái)的卻是簡(jiǎn)單的生命周期管理和無(wú)數(shù)次線(xiàn)程生死開(kāi) 銷(xiāo)的節(jié)約。同時(shí)另外一個(gè)很重要的問(wèn)題,他并會(huì)涉及到單件中數(shù)據(jù)同 步的問(wèn)題,每個(gè)類(lèi)都有各自的 han dler第 8 頁(yè) 共 25 頁(yè)類(lèi),彼此互不干擾,分發(fā)可以分 別進(jìn)行。當(dāng)多個(gè)數(shù)據(jù)請(qǐng)求的時(shí)候,在同一個(gè)co nten tresolver 上進(jìn)行的可能微乎其微,這就避免了堵塞。總而言之,這套解決辦法和an droid
18、 的整體設(shè)計(jì)算是天作之合了。所以建議,如果你有什么非 conten tprovider 操作,卻需要異步多 線(xiàn)程執(zhí)行的話(huà),模擬一套,是個(gè)不錯(cuò)的策略,當(dāng)然,具體情況具體分 析,生搬硬套是學(xué)不好馬列主義的。7. 顯示控件使用an droid 的界面顯示同樣也是基于控件的。通常是用view (包括viewgroup)控件配上 xml 的樣式來(lái)做的。具體細(xì)節(jié)不想說(shuō)了,可以參考 sles 里的 apidemos/view,禾口 view 的 doc,以及 implementing a u 這篇doc。其他還有很多,感覺(jué)算是 sdk 講述的最多的內(nèi)容。從控件的使用上,和網(wǎng)頁(yè)的設(shè)計(jì)類(lèi)似,盡量用pare nt
19、_width 之類(lèi)的抽象長(zhǎng)度,用 theme 來(lái)做風(fēng)格,抽取所有的字串等信息做本地化設(shè) 計(jì)。相關(guān)內(nèi)容參看 implementing a u 就好。一類(lèi)比較重要的是數(shù)據(jù)綁定控件。如果做過(guò)asp. net 會(huì)從中看到很多類(lèi)似的地方。一個(gè)支持?jǐn)?shù)據(jù)綁定的控件,比如listview。可以通過(guò)一個(gè) listadapter 綁定到一個(gè)數(shù)據(jù)源上。listadapter 是一個(gè)抽象類(lèi),主要的實(shí) 現(xiàn)類(lèi)包括 simpleadapte 和 simplecursoradapter 前者是綁定一個(gè)靜態(tài)的 array后者是綁定一個(gè)動(dòng)態(tài)的 cursor。cursor 前面說(shuō)過(guò),是一個(gè)指向數(shù) 據(jù)源的隨機(jī)迭代器,將 view 綁
20、定到 cursor 通常要設(shè)置這樣幾個(gè)參數(shù)。一個(gè)是每一行的樣第 9 頁(yè) 共 25 頁(yè)式,稱(chēng)作 row layout,其實(shí)就是一個(gè)普通的 layout 的 xml 文件。還有就是一個(gè)列和現(xiàn)實(shí)控件的對(duì)應(yīng)關(guān)系。那個(gè)控件顯示哪個(gè) 列的值,這是需要配置的。為了定制一個(gè)良好的數(shù)據(jù)顯示控件,最簡(jiǎn) 單你可以定制很 pp 的 row layout,復(fù)雜一點(diǎn)就是可以重載綁定控件 view,或者是適配器 listadapter如果是一個(gè)數(shù)據(jù)顯示密集的應(yīng)用,且 你對(duì) ui 有些追求,這個(gè)工作估計(jì)是必不可少的。一個(gè)主要用于顯示數(shù)據(jù)內(nèi)容的 activity,可以選擇派生自 listactivity。它提供了一個(gè)具有 li
21、stview 的 layout,還有 simple_list_item_1,simple_list_item_2, two_line_list_iten 等默認(rèn)的 row layout,還有一些比較 不錯(cuò)的 api,和可供響應(yīng)選擇 item 的事件。可以滿(mǎn)足你比較基礎(chǔ)的需 求。如果你覺(jué)得只有一個(gè) listview 的界面太突兀, 你可以為這個(gè) listactivity 指定一個(gè) layout,需要注意的是,你需要提供一個(gè) id 為 android:id/list 的 listview 控件,避免activity 在內(nèi)部偷偷尋找該控件的 時(shí)候失敗。除了這些要求,做好 ui 還有注意易用性和效率。
22、快捷鍵是一個(gè)比 較不錯(cuò)的選擇,在 activity 中調(diào)用 setdefaultkeymode(shortcut_default_keys 可以開(kāi)啟快捷鍵模式,然后你 可以將菜單綁定到指定快捷鍵上就 ok 了。個(gè)人覺(jué)得 tip 也是一個(gè)比較 重要的東西,但目前觀察看來(lái),這個(gè)東西只能夠自己提供了。界面的 動(dòng)態(tài)性有時(shí)候是不可避免的,比如說(shuō)菜單就是一個(gè)需要經(jīng)常根據(jù)光標(biāo) 位置提供不同的選項(xiàng)。這個(gè)東西 an droid 很人道的考慮到了,你可以參 看 nodelist 這個(gè) s它采取的應(yīng)該是一個(gè)靜態(tài)模擬動(dòng)態(tài)的方式,這樣有 助于提高速度。你也可以利用 view in flate,動(dòng)態(tài)從一個(gè) xml 創(chuàng)建一
23、個(gè)控 件。成本據(jù) doc 說(shuō)很大,不到萬(wàn)不得已不要使用。第 10 頁(yè) 共 25 頁(yè)8.i nte nt 消息傳遞在前面寫(xiě) an droid 的 con te ntprovider 時(shí)候,可以看到那是基于觀察 者模式的一個(gè)消息傳遞方法。每一個(gè)cursor、contentresolver(故為一個(gè)小的注冊(cè)中心,相關(guān)觀察者可以在這個(gè)中心注冊(cè),更新消息由注冊(cè)中 心分發(fā)給各個(gè)觀察者。而在 mfc 或 winform 中,都會(huì)形成一個(gè)消息網(wǎng), 讓消息在網(wǎng)中流動(dòng),被各節(jié)點(diǎn)使用、吃掉或者在出口死掉。相比之下,我個(gè)人覺(jué)得基于 intent 的 android 核心消息傳遞機(jī)制是有所不同的。它應(yīng)該會(huì)有一個(gè)全局性的
24、注冊(cè)中心,這個(gè)注冊(cè)中心是隱 性的,整個(gè) android 系統(tǒng)中就那么一個(gè)。所有的消息接收者,都被隱形 的注冊(cè)到這個(gè)中心。包括 activity, service 和 intentreceive。其實(shí)說(shuō)隱形 注冊(cè)是不確切的,所有注冊(cè)都還是我們手動(dòng)告訴注冊(cè)中心的,只是與 傳統(tǒng)的方式不一樣,我們通常不是通過(guò)代碼,而是通過(guò)配置文件來(lái) 做。在應(yīng)用的 manifest 中,我們會(huì)為一些 activity 或 service 添加上 intent-filter,或在配置文件中添加receiverv/receiver項(xiàng)。這其實(shí)就相 當(dāng)于向系統(tǒng)的注冊(cè)中心,注冊(cè)了相關(guān)的intent-filter 和 receiv
25、er(這個(gè)事情完全可以通過(guò)代碼來(lái)做,只是這樣就失去了修改的靈活性)。當(dāng)程序有一個(gè)消息希望發(fā)出去的時(shí)候,它需要將消息封裝成一個(gè)intent,并發(fā)送。這時(shí)候,應(yīng)該是有一個(gè)統(tǒng)一的中心(恩,有可能 an droid 底層實(shí)現(xiàn)的時(shí)候不是,但簡(jiǎn)單這樣看是沒(méi)問(wèn)題的)接受到這個(gè)消息,并對(duì)它進(jìn)行解析、判定消息類(lèi)型(這個(gè)步驟降低了耦合),然后檢查注冊(cè)了相匹配的 filter 或 receive,r 并創(chuàng)建或喚醒接收者,將消 息分第11頁(yè)共 25 頁(yè)發(fā)給它。這樣做有很多好處。雖然這種傳遞有的時(shí)候不如點(diǎn)對(duì)點(diǎn) 的傳遞快(這有些需要速度的地方,我們看到an droid 會(huì)通過(guò)直接通信來(lái)做),但有時(shí)候又因?yàn)樗唤?jīng)過(guò)一跳(姑
26、且這么叫吧),比復(fù)雜的流動(dòng)又要更快。更重要的是,它耦合性低,在手機(jī)平臺(tái)這種程序組件 多變的條件下使用十分適合。并且它可以很容易實(shí)現(xiàn)消息的精確或模 糊匹配,彈性很大。(我個(gè)人曾想在開(kāi)發(fā)一個(gè)C+二次平臺(tái)的時(shí)候引 入這樣的機(jī)制,但在 C+中,建立一套完整的數(shù)據(jù) marshaI 機(jī)制不容 易,相比之下,用 java 來(lái)做會(huì)簡(jiǎn)單很多)恩,廢話(huà)說(shuō)了很多,具體講講 an droid 中 in te nt 的使用。當(dāng)你有一 個(gè)消息需要傳遞,如果你明確知道你需要哪個(gè)activity 或者其他 class 來(lái)響應(yīng)的話(huà),你可以指定這個(gè)類(lèi)來(lái)接受該消息,這被稱(chēng)為顯性發(fā)送。你 需要將intent 的 class 屬性設(shè)置
27、成目標(biāo)。這種情況很常見(jiàn),比如 startactivity 的時(shí)候,會(huì)清楚當(dāng)前 activity 完了應(yīng)該是哪個(gè) activity,那就 明確的發(fā)送這個(gè)消息。但是,有的時(shí)候你并不確定你的消息是需要具體哪個(gè)類(lèi)來(lái)執(zhí)行, 而只是知道接收者該符合哪些條件。比如你只需要有一個(gè)接收者能顯 示用戶(hù)所選的數(shù)據(jù),而不想制定某個(gè)具體的方法,這時(shí)候你就需要用 到隱形發(fā)送(傳統(tǒng)上,我們可能會(huì)考慮用多態(tài),但顯然這種方式更為 靈活)。在 an droid 中,你可以為 in te nt 指定一個(gè) actio n,表示你這個(gè) 指令需要處理的事情。系統(tǒng)為我們定義了很多action 類(lèi)型,這些類(lèi)型使系統(tǒng)與我們通信的語(yǔ)言 (比如在
28、 activity 里面加一個(gè) main 的 filter, 該 activity就會(huì)做成該應(yīng)用的入口點(diǎn)),當(dāng)然你也可以用于你自己的應(yīng)用 之間的通信(同第12頁(yè)共 25 頁(yè)樣當(dāng)然, 也可以自定義 .) 。 強(qiáng)烈建議, 在自己程序接 收或發(fā)出一個(gè)系統(tǒng) action的時(shí)候,要名副其實(shí)。比如你響應(yīng)一個(gè)view動(dòng)作,做的確實(shí) edit 的勾當(dāng),你發(fā)送一個(gè) pick 消息,其實(shí)你想讓別人 做 edit的事,這樣都會(huì)造成混亂。當(dāng)然只有action 有時(shí)候是不夠的,在an droid 中我們還可以指定 catalog 信息和 type/data 信息,比如所有的顯示數(shù)據(jù)的 activity,可能都會(huì)響應(yīng) v
29、iew action 但很多與我們需要顯示的 數(shù)據(jù)類(lèi)型不一樣,可以加一個(gè) type 信息,明確的指出我們需要顯示的 數(shù)據(jù)類(lèi)型,甚至還可以加上一個(gè) catalog 信息,指明只有你只有按的是 “中鍵”并發(fā)出這樣的消息才響應(yīng)。從上面可以看出, an droid的 in te nt可以添加上 class, actio n, data/type,catalog 等消息, 注冊(cè)中心會(huì)根據(jù)這些信息幫你找到符合的接 收者。 其中 class是點(diǎn)對(duì)點(diǎn)的指示, 一旦指明, 其他信息都被忽略。 intent中還可以添加key/value的數(shù)據(jù),發(fā)送方和接收方需要保持統(tǒng)一的 key 信息和 value 類(lèi)型信息,這
30、種數(shù)據(jù)的 marshal 在 java 里做,是不費(fèi)什 么力氣的。an droid 的 in te nt 發(fā)送,可以分成單播和廣播兩種。廣播的接收者 是所有注冊(cè)了的符合條件的 intentreceive。在單播的情況下,即使有很 多符合條件的接收者,也只要有一個(gè)出來(lái)處理這個(gè)消息就好(恩,個(gè) 人看法,沒(méi)找到確切條款或抉擇的算法,本來(lái)想實(shí)驗(yàn)一下,沒(méi)來(lái)得 及.) ,這樣的情況很容易理解,當(dāng)你需要修改某個(gè)數(shù)據(jù)的時(shí)候,你肯 定不會(huì)希望有十個(gè)編輯器輪流讓你來(lái)處理。當(dāng)廣播不是這樣,一個(gè) receiver 沒(méi)有辦法阻止其他 receiver 進(jìn)行對(duì)廣播事件的處理。這種情況也 很容易理解,比如時(shí)鐘改變了,鬧鐘、
31、備第 13 頁(yè) 共 25 頁(yè)忘錄等很多程序都需要分別 進(jìn)行處理。在自己的程序的使用中,應(yīng)該分清楚區(qū)別,合理的使用。9.co nten tprovider 數(shù) 據(jù)模型數(shù)據(jù)庫(kù)操作從我目前掌握的知識(shí)來(lái)看,sqlite 比較輕量(沒(méi)有存儲(chǔ)過(guò)程之類(lèi)的 繁雜手段),用起來(lái)也比較簡(jiǎn)單。實(shí)例化一個(gè)sqlitedatabas 類(lèi)對(duì)象,通過(guò)它的 apis 可以搞定大部分的操作。從 sle 中看,an droid 中對(duì) db 的使 用有一種比較簡(jiǎn)單的模式,即派生一個(gè)conten tproviderdatabasehelp 類(lèi)來(lái)進(jìn)行 sqlitedatabas 對(duì)象實(shí)例的獲取工作。基本上,contentprovide
32、rdatabasehelpe扮演了一個(gè) singleton 的角色,提供單一 的實(shí)例化入口點(diǎn),并屏蔽了數(shù)據(jù)庫(kù)創(chuàng)建、打開(kāi)升級(jí)等細(xì)節(jié)。在 contentprovider 中只需要調(diào)用 contentproviderdatabasehelp 的 opendatabas 方法獲取sqlitedatabas 的實(shí)例就好,而不需要進(jìn)行數(shù)據(jù)庫(kù) 狀態(tài)的判斷。uri像進(jìn)行數(shù)據(jù)庫(kù)操作需要用 sql 一樣,對(duì) contentproivder 進(jìn)行增刪改 查等操作都是通過(guò)一種特定模式的 uri 來(lái)進(jìn)行的( ig:content: /provider/item/id ) ,uri 的能力與 url 類(lèi)似,具體細(xì)節(jié)可以查
33、看 sdk。 建立自己的 contentprovider,只需要派生 contentproivder 類(lèi)并實(shí)現(xiàn) insert, delete, update 等抽象函數(shù)即可。在這些接口中比較特殊的是 gettype(uri。根據(jù)傳入的 uri,該方法按照 mime格式返回一個(gè)字符串第 14 頁(yè) 共 25 頁(yè)( =!沒(méi)聽(tīng)過(guò)的詭異格式 .)唯一標(biāo)識(shí)該 uri 的類(lèi)型。所謂 uri 的類(lèi)型, 就是描述這個(gè) uri 所進(jìn)行的操作的種類(lèi),比如 content:/xx/a 與 content:/xx/a/1不是一個(gè)類(lèi)型(前者是多值操作,后者是單值),但 content:/xx/a/1 和content:/
34、xx/a/2 就會(huì)是一個(gè)類(lèi)型(只是 id 號(hào)不同 而已)。在 contentprovider 通常都會(huì)實(shí)例化一個(gè) contenturiprase 來(lái)輔助解析 和操作傳入的 uri。你需要事先(在 static 域內(nèi))為該 contenturiprase 建 立一個(gè) uri 的語(yǔ)法樹(shù),之后就可以簡(jiǎn)單調(diào)用 contenturiprase 類(lèi)的相關(guān)方 法進(jìn)行 uri類(lèi)型判斷(match 方法),獲取加載在 uri 中的參數(shù)等操作。 但我看來(lái),這只是在使用上簡(jiǎn)化了相關(guān)操作(不然就需要自己做人肉 解析了 .),但并沒(méi)有改變類(lèi)型判定的模式。你依然需要用 switchcase 對(duì) uri 的類(lèi)型進(jìn)行判斷,并
35、進(jìn)行相關(guān)后續(xù)的操作。從模式 來(lái)看,這樣無(wú)疑是具有強(qiáng)烈的壞味道,類(lèi)似的switchcase 代碼要出現(xiàn)n 此,每次一個(gè) contentprovider 做 uri 類(lèi)型的增減都會(huì)需要遍歷修改每 一個(gè)switch.case.,. 當(dāng)然,如果你使用模式(策略模式 .)進(jìn)行改造對(duì) 手機(jī)程序來(lái)說(shuō)無(wú)疑是崩潰似的(類(lèi)型膨脹,效率降低.),所以,只能是忍一忍了(恩,還好不會(huì)擴(kuò)散到別的類(lèi)中,維護(hù)性上不會(huì)有殺人性 的麻煩 .)。增刪改查con te ntprovider 和所有數(shù)據(jù)源一樣,向外提供增刪改查操作接口, 這些都是基于 uri 的指令。進(jìn)行 insert 操作的時(shí)候,你需要傳入一個(gè) uri 和conte
36、ntvalues。 uri 的作用基本就限于指明增減條目的類(lèi)型(從數(shù)據(jù) 庫(kù)層面第 15 頁(yè) 共 25 頁(yè)來(lái)看就是 table 名),contentvalues 是一個(gè) key/value 表的圭寸裝,提供方便的 api 進(jìn)行插入數(shù)據(jù)類(lèi)型和數(shù)據(jù)值的設(shè)置和獲取。在數(shù)據(jù)庫(kù)層面上來(lái)看,這應(yīng)該是 column name 與 value 的對(duì)應(yīng)。但為了屏蔽con te ntprovider 用戶(hù)涉及到具體數(shù)據(jù)庫(kù)的細(xì)節(jié),在 an droid 的示例中,用了一個(gè)小小的模式。它為每一個(gè)表建一個(gè)基于basecolumr 類(lèi)的派生類(lèi)(其實(shí)完全可以不派生自 basecolumn 特別當(dāng)你的表不基于默認(rèn)的 自動(dòng) id做
37、主鍵的時(shí)候),這個(gè)類(lèi)通常包括一個(gè)描述該表的contenturi 對(duì)象和形如 public static final title = title這樣的 column 到類(lèi)數(shù)據(jù)的對(duì)應(yīng)。 從改變上角度來(lái)看,你可以修改 column 的名字而不需要更改用戶(hù)上層 代碼,增加了靈活性。insert 方法如果成功會(huì)返回一個(gè) uri,該 uri 會(huì)在 原有的 uri 基礎(chǔ)上增加有一個(gè) row id。對(duì)于為什么使用 row id 而不是 key id 我想破了腦袋。到最后,我發(fā)現(xiàn)我傻了,因?yàn)閏ontentprovider 不一定需要使用數(shù)據(jù)庫(kù),使用數(shù)據(jù)庫(kù)對(duì)應(yīng)的表也可以沒(méi)有主鍵,只有 row id, 才能在任何底
38、層介質(zhì)下做索引標(biāo)識(shí)。但,基于 row id 在刪除和修改操作是會(huì)造成一定的混亂。刪除和 修改操作類(lèi)似。刪除操作需要傳入一個(gè)uri,個(gè) where 字串,一組where 的參數(shù)(做條件判定 ),而修改操作會(huì)多一個(gè) contentvalues 做 更新值。著兩個(gè)操作的 uri 都支持在末尾添加一個(gè) row id。于是混亂就 出現(xiàn)了。當(dāng)在 where 參數(shù)中指明了 key id,而在 uri 中提供了 row id,并 且 row id 和 keyid 所指函數(shù)不一致的時(shí)候,你聽(tīng)誰(shuí)的?示例代碼中的做 法是完全無(wú)視 row id(無(wú)語(yǔ)),如此野蠻的方式我估計(jì)也只能在示例 中出現(xiàn),在實(shí)際中該如何第 16
39、 頁(yè) 共 25 頁(yè)用,恩,我也不知道。幸運(yùn)的是,我看了下 上層對(duì) con te ntprovide 啲刪除操作,其實(shí)都不會(huì)直接進(jìn)行,而是通過(guò)調(diào) 用 cursor 的 delete 方法進(jìn)行,在這前提下,我想 cursor 會(huì)處理好這些東 西吧。最后一個(gè)操作是查詢(xún)操作,可以想見(jiàn),查詢(xún)的參數(shù)是最多的,包 括 uri 和一組條件參數(shù)。條件參數(shù)類(lèi)型和標(biāo)準(zhǔn)的 sql 類(lèi)似,包括 sort, projection 之類(lèi)的。從這些參數(shù)到 sql 語(yǔ)句的生成,可以尋求 querybuilder 類(lèi)的幫助,它提供了一組操作接口,簡(jiǎn)化了參數(shù)到sql 的生成工作,哪怕你不懂 sql 都完全沒(méi)有問(wèn)題(這話(huà)說(shuō)的我自己都
40、覺(jué)得有點(diǎn) 懸)。查詢(xún)返回一個(gè) cursor。cursor 是一個(gè)支持隨機(jī)讀寫(xiě)的指針,不 僅如此,它還提供了方便的刪除和修改的api,是上層對(duì)con te ntprovider 進(jìn)行操作一個(gè)重要對(duì)象,需要仔細(xì)掌握(cursor 還可以 綁定到 view 上,直接送顯,并與用戶(hù)進(jìn)行交互,真是程序越往上,封 裝越好,工作越機(jī)械沒(méi)有復(fù)雜性了 .)。數(shù)據(jù)模型在與界面打交道的 cursor、contentresolver 等數(shù)據(jù)操作層中,大量 采用觀察者模式建立數(shù)據(jù)層與顯示層的聯(lián)系。一個(gè)顯示層的視圖,可 以做成某一種觀察者注冊(cè)到 cursor 或 contentresolver 等數(shù)據(jù)中間層中, 在實(shí)現(xiàn)底
41、層contentprovider 中,我們需要特別注意在對(duì)數(shù)據(jù)進(jìn)行修改操 作(包括增刪改 .)后,調(diào)用相應(yīng)類(lèi)型的 notify 函數(shù),幫助表層對(duì)象進(jìn) 行刷新(還有一種刷新方式是從一個(gè)view 發(fā)起的)。可以看到 an droid的整體數(shù)據(jù)顯示框架有點(diǎn)像 mvc 的方式。cursor、contentresolve 相當(dāng) 于控第 17 頁(yè) 共 25 頁(yè)制層,數(shù)據(jù)層和顯示層的交互通過(guò)控制層來(lái)掌管,而且控制層很 穩(wěn)定不需要特別定制,通常工作只在定制數(shù)據(jù)層和顯示層空間,還是 比較方便和清晰的。10.學(xué)習(xí)感想 通過(guò)這學(xué)期對(duì)安卓的學(xué)習(xí),大概了解了以上一些知識(shí),對(duì)安卓有 了初步的了解,這幾個(gè)月給我的東西我想用
42、有形的和無(wú)形的兩部分概敘,形的當(dāng)然就是技術(shù)水平的長(zhǎng)進(jìn),雖然其中肯定有很多的不足,相 信慢慢會(huì)體會(huì)到。第二篇:安卓 課程學(xué)習(xí)心得心得體會(huì)學(xué)號(hào):姓名:班級(jí): 一開(kāi)始接觸 android 是從自己的手機(jī)開(kāi)始的,覺(jué)得它很酷,是我喜 歡的風(fēng)格,然后我就通過(guò)了一些網(wǎng)絡(luò)渠道去了解 an droid。在選課的時(shí)候發(fā)現(xiàn)有這個(gè)課程,于是我就報(bào)名了。剛開(kāi)始接觸an droid 開(kāi)發(fā)時(shí)感覺(jué)到它很有意思,在界面開(kāi)發(fā)上和 web 也可以形成了相通的架構(gòu),更加 方便,視覺(jué)上也是非常的酷。an droid 作為新興的手機(jī)操作系統(tǒng),適應(yīng) 潮流的發(fā)展,在一定程度上迎合了現(xiàn)代人們最求效率和最求完美的心 態(tài),再加上的它的先進(jìn)之處,所
43、以 android 的發(fā)展很快, android 的應(yīng)用 資源也越來(lái)越廣泛,現(xiàn)在的 android 正在快速形成一個(gè)只能手機(jī)王國(guó), 給人們提供日常娛樂(lè)和辦公的平臺(tái),無(wú)論在哪些方面, android 的表現(xiàn) 總是能夠讓人滿(mǎn)意, 它正在快速地占領(lǐng)手機(jī)終端,未來(lái)的智能手機(jī)領(lǐng) 域?qū)⑹?android 的天下,越來(lái)越多的人選用 android 平臺(tái)的手機(jī)。如果說(shuō)追求蘋(píng)果是因?yàn)樘O(píng)果的高端與美感,那么追求 android 則是因?yàn)樗?先進(jìn)第 18 頁(yè) 共 25 頁(yè)性開(kāi)源性,也正是因?yàn)?android 這些吸引人們矚目的特點(diǎn),才會(huì)有 越來(lái)越多的人對(duì) android 充滿(mǎn)激情, android 的發(fā)展也才能這
44、樣的迅猛, 所以在這里要先謝謝 goolge 以及那些充滿(mǎn)激情的開(kāi)發(fā)者們。首先在界 面上,我們同樣可以通過(guò)不同布局進(jìn)行設(shè)計(jì)非常酷的界面,這些界面 可以通過(guò) in elude 進(jìn)行引入,我們可以通過(guò)一些公用的方法寫(xiě)個(gè) baseactivity 這個(gè)基類(lèi),通過(guò)繼承方式比較不錯(cuò)的實(shí)現(xiàn)了activity 的界面,因?yàn)檫@樣你可以 header 頭部)和 footer(尾部)進(jìn)行處理一些觸發(fā)事 件或者特效等。布局模式以相對(duì)模式為主,線(xiàn)線(xiàn)布局模式可以在比較 簡(jiǎn)單的 inelude 進(jìn)行完成,最重要的一點(diǎn)就是:我們可以自己通過(guò)重寫(xiě) 方法或者通過(guò)實(shí)現(xiàn) view 或者 layout 等類(lèi)進(jìn)行擴(kuò)充項(xiàng)目需要的布局(或
45、者 控件) ,在學(xué)習(xí)界面中, android 為我們提供了很好的類(lèi)似反射機(jī)制,通 過(guò) layout 文件夾下的配置文件,可以快速的形成界面,在配置文件可以 設(shè)置屬性或者樣式都是很快捷方便。對(duì)比較特殊的界面也可以通過(guò)處 理嵌入到指定的界面,同樣可以通過(guò) java 代碼直接創(chuàng)建 view 進(jìn)行添 加,不過(guò)這種方式比較復(fù)雜。對(duì)一些點(diǎn)擊、選中、按鍵等處理的事 件,界面之間的 跳轉(zhuǎn) intent 管理,通過(guò) bundle 對(duì)數(shù)據(jù)在界面之間進(jìn)行 傳輸。其次在手機(jī)交互式通信服務(wù)中,學(xué)習(xí)了 android 手機(jī)之間進(jìn)行短 信發(fā)送、廣播、對(duì)廣播的監(jiān)聽(tīng)、服務(wù)等。這次的課程我們主要學(xué)習(xí)了航班系統(tǒng)的設(shè)計(jì), 首先我們要
46、建立航 班查詢(xún):旅客就可通過(guò)網(wǎng)絡(luò)訪(fǎng)問(wèn)該系統(tǒng)客戶(hù)端網(wǎng)址,可根據(jù)旅客提供的出發(fā)時(shí)間、出發(fā)地點(diǎn)和目的地、艙位要求等,查詢(xún)滿(mǎn)足旅客要求的航班。通過(guò)檢索可得到航班的相關(guān)信息,從而可以方便旅客訂票并掌 握所需第 19 頁(yè) 共 25 頁(yè)信息,同時(shí)可減少工作人員的工作量。第二,我們要建立旅客訂票:旅客將訂票的相關(guān)信息通過(guò)工作人 員輸入系統(tǒng)客戶(hù)端。客戶(hù)端將旅客的訂票信息通過(guò)網(wǎng)絡(luò)傳送給服務(wù) 端,服務(wù)端根據(jù)接收到的信息由航班安排系統(tǒng)為旅客安排座位并返回相應(yīng)的確認(rèn)信息 給該客戶(hù)端。訂票信息生成后,存入相應(yīng)的存儲(chǔ)區(qū)域,并對(duì)數(shù)據(jù)庫(kù)進(jìn) 行數(shù)據(jù)提交。客戶(hù)端打印取票單及帳單給旅客,旅客在登機(jī)前,經(jīng)信 息核審后,即可領(lǐng)取機(jī)票登機(jī)
47、。第三,航班信息管理:航空公司可將所有航班的信息存入數(shù)據(jù) 庫(kù),方便用戶(hù)對(duì)航班基本信息查詢(xún),相 關(guān)工作人員可根據(jù)公司要求, 經(jīng)系統(tǒng)身份認(rèn)證后登錄并對(duì)航班信息進(jìn)行修改等操作,從而使 航班信 息便于管理。第四:航班安排:從客戶(hù)端接收到旅客的訂票信息,該系統(tǒng)可在 短時(shí)間內(nèi)處理旅客航班問(wèn)題。將 訂票信息送往數(shù)據(jù)庫(kù)并更新,客戶(hù)端 的航班查詢(xún)信息也同步更新。節(jié)省時(shí)間的同時(shí),也能讓 旅客得到最新 的航班信息。第五,售票管理:旅客不僅可在各客戶(hù)端進(jìn)行機(jī)票預(yù)定,也可直 接在機(jī)場(chǎng)的售票處購(gòu)票,購(gòu)票信息由系統(tǒng)提交到數(shù)據(jù)庫(kù)進(jìn)行管理更 新。第六,退票管理:機(jī)票有效期內(nèi),旅客若需退票,可在退票處進(jìn) 行退票。退票信息,由工作
48、人員輸入系統(tǒng),系統(tǒng)對(duì)訂票信息或售票信 息進(jìn)行刪除更新。第七,票銷(xiāo)售情況核算:因?yàn)楹娇展緳C(jī)票銷(xiāo)售量大,而航空公 司為了公司的經(jīng)營(yíng),有需要在一定的時(shí) 間階段了解公司機(jī)票的銷(xiāo)售情 況。而龐大的數(shù)據(jù)量通過(guò)人工來(lái)完成,似乎不太現(xiàn)實(shí),而該系 統(tǒng)可幫 助航空公司進(jìn)行售票第 20 頁(yè) 共 25 頁(yè)情況的核算。這個(gè)課程緊跟住了現(xiàn)代科技的發(fā)展,讓我們?cè)诘谝粫r(shí)間和先進(jìn)的 科學(xué)技術(shù)做了一個(gè)親密的接觸,這樣的課程能夠點(diǎn)燃我們對(duì)某一個(gè)新 興領(lǐng)域的激情,這算是一個(gè)啟蒙,讓我們對(duì) android 先有了一個(gè)大概的 了解,這個(gè)課程不一定能讓我們很好的掌握 android 的理念或者開(kāi)發(fā), 但是能夠讓我們對(duì) android產(chǎn)生
49、濃厚的興趣,讓我們?nèi)计鹛剿?android 的欲望,我想這樣就已經(jīng)足夠了。第三篇:安卓學(xué)習(xí)安卓開(kāi)發(fā)學(xué)習(xí)準(zhǔn)備要點(diǎn)介紹要說(shuō)當(dāng)下 it 行業(yè)當(dāng)中最具創(chuàng)造力、前瞻性、延續(xù)性和實(shí)現(xiàn)能力, 想必有相當(dāng)?shù)娜藭?huì)把票投給 google 的安卓,安卓開(kāi)發(fā)學(xué)習(xí)也成為新潮 流。安卓開(kāi)發(fā)學(xué)習(xí)要做什么準(zhǔn)備?下面就由福州卓躍教育具體介紹。首先,最好先熟悉一門(mén)編程語(yǔ)言,現(xiàn)在大學(xué)里面和計(jì)算機(jī)相關(guān)的 專(zhuān)業(yè)甚至理工類(lèi)專(zhuān)業(yè)一般都會(huì)開(kāi)設(shè) c 語(yǔ)言課程,只是很多同學(xué)在大學(xué) 期間并沒(méi)有好好學(xué)習(xí),如果對(duì)它掌握的不太好或者很久沒(méi)用了,建議先從將其好好復(fù)習(xí)一下,將其基本的語(yǔ)法再好好回顧一下,最好能搭 建一個(gè)環(huán)境來(lái)運(yùn)行、調(diào)試它。如果沒(méi)有學(xué)過(guò),不妨
50、也提前學(xué)習(xí)一下, 可以參考清華大學(xué)出版社出版的譚浩強(qiáng)老師的 c 語(yǔ)言程序設(shè)計(jì),推 薦這本書(shū)的原因一是它已經(jīng)經(jīng)過(guò)了多年的考驗(yàn),應(yīng)該說(shuō)還是比較嚴(yán)謹(jǐn) 的;其次就是大部分的高校所開(kāi)設(shè)的c 語(yǔ)言使用的教材都是用它作為教材,因此無(wú)論是購(gòu)買(mǎi)還是借閱,都容易找到。其次,如果后續(xù)有志于游戲方面的開(kāi)發(fā),最好具備一定的數(shù)據(jù)結(jié) 構(gòu)和算第 21 頁(yè) 共 25 頁(yè)法基礎(chǔ)知識(shí)。雖然現(xiàn)代的高級(jí)編程語(yǔ)言中,其類(lèi)庫(kù)中已經(jīng)幫我 們實(shí)現(xiàn)了大部分的數(shù)據(jù)結(jié)構(gòu),一般情況下,我們直接使用即可。但如 果能對(duì)其原理有所了解,當(dāng)需要在這些數(shù)據(jù)結(jié)構(gòu)和算法中間的時(shí)候, 可以更加的清楚到底應(yīng)該選擇那個(gè)數(shù)據(jù)結(jié)構(gòu)或者算法。另外,在圖形 圖像處理上面,線(xiàn)性代數(shù)的作用也非常重要,如果能掌握一點(diǎn)這方面 的基礎(chǔ)知識(shí),無(wú)疑也會(huì)在后續(xù)的學(xué)習(xí)中如虎添翼。舉個(gè)例子,在 an droid 中,有一個(gè)用于圖形變換的類(lèi) matrix,用起來(lái)稍有點(diǎn)難。第三, 因
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 今天天氣怎么樣(教學(xué)設(shè)計(jì))-2023-2024學(xué)年蘇教版(2017)-科學(xué)二年級(jí)上冊(cè)
- 九年級(jí)化學(xué)上冊(cè) 第一單元 步入化學(xué)殿堂 到實(shí)驗(yàn)室去 化學(xué)基本實(shí)驗(yàn)技能訓(xùn)練(一)教學(xué)設(shè)計(jì) (新版)魯教版
- 2015人教版九年級(jí)歷史與社會(huì)下冊(cè):第五單元第三課第一框《蘇聯(lián)的改革與發(fā)展》教學(xué)設(shè)計(jì)(浙江椒江區(qū)洪家第二中學(xué))
- Unit 7 Lesson 8 Project and Review 教學(xué)設(shè)計(jì) 2024-2025學(xué)年仁愛(ài)科普版(2024)七年級(jí)英語(yǔ)下冊(cè)
- Module 4 (教學(xué)設(shè)計(jì))-2024-2025學(xué)年外研版(三起)英語(yǔ)四年級(jí)上冊(cè)
- 人教部編版二年級(jí)下冊(cè)課文7語(yǔ)文園地八教案設(shè)計(jì)
- 《習(xí)作:介紹一種事物》教學(xué)設(shè)計(jì)-2024-2025學(xué)年統(tǒng)編版語(yǔ)文五年級(jí)上冊(cè)
- 全國(guó)滇人版初中信息技術(shù)八年級(jí)上冊(cè)第二單元第15課《影片剪輯》教學(xué)設(shè)計(jì)
- 九年級(jí)語(yǔ)文上冊(cè) 第六單元 25劉姥姥進(jìn)大觀園教學(xué)設(shè)計(jì) 新人教版
- 人教版八上道德與法治4.3誠(chéng)實(shí)守信教學(xué)設(shè)計(jì)
- 建設(shè)單位工程項(xiàng)目管理辦法
- 海員的考試試題及答案
- 小學(xué)一年級(jí)數(shù)學(xué)20以?xún)?nèi)進(jìn)位、退位加減法口算
- 中藥藥理學(xué)知到課后答案智慧樹(shù)章節(jié)測(cè)試答案2025年春浙江中醫(yī)藥大學(xué)
- 課題申報(bào)參考:基于生成式人工智能的教育研究新范式
- 《戲劇影視經(jīng)典作品賞析》課件-《我在天堂等你》
- 壓力管道設(shè)計(jì)培訓(xùn)資料2
- 第11課《山地回憶》課件-七年級(jí)下冊(cè)語(yǔ)文(統(tǒng)編部編版)
- 針刺傷預(yù)防與處理(中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn))
- 2024年重慶市沙坪壩區(qū)中考英語(yǔ)適應(yīng)性試卷
- 2025年中考英語(yǔ)作文社會(huì)熱點(diǎn)分析及范文
評(píng)論
0/150
提交評(píng)論