欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      android 開(kāi)發(fā)心得

      時(shí)間:2019-05-12 18:16:55下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫(xiě)寫(xiě)幫文庫(kù)小編為你整理了多篇相關(guān)的《android 開(kāi)發(fā)心得》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫(xiě)寫(xiě)幫文庫(kù)還可以找到更多《android 開(kāi)發(fā)心得》。

      第一篇:android 開(kāi)發(fā)心得

      即 使你的應(yīng)用程序是快速且響應(yīng)靈敏的,但一些設(shè)計(jì)仍然會(huì)給用戶(hù)造成問(wèn)題——與其它應(yīng)用程序或?qū)υ?huà)框未事先計(jì)劃的交互,意外的數(shù)據(jù)丟失,意料之外的阻塞等等。避免這些問(wèn)題,有助于理解應(yīng)用程序運(yùn)行的上下文和系統(tǒng)的交互過(guò)程,而這些又正影響著你的應(yīng)用程序。簡(jiǎn)而言之,你應(yīng)該竭盡全力去開(kāi)發(fā)一個(gè)與系統(tǒng)和其它應(yīng)用程 序流暢交互的應(yīng)用程序。

      一 個(gè)常見(jiàn)的流暢問(wèn)題是,一個(gè)應(yīng)用程序的后臺(tái)處理——例如,一個(gè) Service或者

      BroadcastReceiver——彈出一個(gè)對(duì)話(huà)框來(lái)響應(yīng)一些事件。這可能看起來(lái)沒(méi)啥大礙,尤其是你在模擬器上單獨(dú)地構(gòu)建和測(cè)試你 的應(yīng)用程序的時(shí)候。然而,當(dāng)你的應(yīng)用程序運(yùn)行在真機(jī)上時(shí),有可能你的應(yīng)用程序在沒(méi)有獲得用戶(hù)焦點(diǎn)時(shí)后臺(tái)處理顯示了一個(gè)對(duì)話(huà)框。因此,可能會(huì)出現(xiàn)在活躍的應(yīng) 用程序后方顯示了你的應(yīng)用程序的對(duì)話(huà)框,或者從當(dāng)前應(yīng)用程序奪取焦點(diǎn)顯示了一個(gè)對(duì)話(huà)框,而不管當(dāng)前用戶(hù)正在做什么(例如,正在打電話(huà))。那種行為,對(duì)應(yīng)用 程序或用戶(hù)來(lái)說(shuō),就不應(yīng)該出現(xiàn)。

      為了避免這些問(wèn)題,你的應(yīng)用程序應(yīng)該使用合適的系統(tǒng)資源來(lái)通知用戶(hù)——Notification類(lèi)。使用Notification,你的應(yīng)用程序可以在狀態(tài)欄顯示一個(gè) icon來(lái)通知用戶(hù)已經(jīng)發(fā)生的事情,而不是奪取焦點(diǎn)和打斷用戶(hù)。

      另 一個(gè)流暢問(wèn)題的例子是未能正確實(shí)現(xiàn)Activity的 onPause()和其它生命周期方法而造成意外丟失了狀態(tài)或用戶(hù)數(shù)據(jù)。又或者,如果你的應(yīng)用程序想暴露數(shù)據(jù)給其它應(yīng)用程序使用,你應(yīng)該通過(guò) ContentProvider來(lái)暴露,而不是(舉例)通過(guò)一個(gè)可讀的原始文件或數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)。

      這 些例子的共同點(diǎn)是它們都應(yīng)該與系統(tǒng)和其它應(yīng)用程序協(xié)作好。Android系統(tǒng)設(shè)計(jì)時(shí),就把應(yīng)用程序看作是一堆松散耦合的組件,而不是一堆黑盒代碼。作為開(kāi) 發(fā)者來(lái)說(shuō),允許我們把整個(gè)系統(tǒng)看作是更大的組件集合。這有益于我們可以與其它應(yīng)用程序進(jìn)行清晰無(wú)縫的集成,因此,作為回報(bào),我們應(yīng)該更好的設(shè)計(jì)我們的代 碼。

      下面將討論常見(jiàn)的流暢問(wèn)題以及如何避免它們:

      一 定要記住Android是一個(gè)移動(dòng)平臺(tái)??梢燥@而易見(jiàn)地說(shuō),其它Activity(例如,“Incoming Phone Call”應(yīng)用程序)可能會(huì)在任何時(shí)候彈出來(lái)遮蓋你的Activity,記住這個(gè)事實(shí)很重要。因?yàn)檫@個(gè)過(guò)程將觸發(fā) onSaveInstanceState()和 onPause()方法,并可能導(dǎo)致你的應(yīng)用程序

      被殺死。

      如 果用戶(hù)在你的應(yīng)用程序中正在編輯數(shù)據(jù)時(shí),其它 Activity出現(xiàn)了,這時(shí),你的應(yīng)用程序被殺死時(shí)可能丟失那些數(shù)據(jù)。當(dāng)然了,除非你事先保存了正在進(jìn)行的工作?!癆ndroid方式”是這樣做的:能 接收和編輯用戶(hù)輸入的 Android應(yīng)用程序應(yīng)該重寫(xiě) onSaveInstanceState()方法,并以恰當(dāng)?shù)姆绞奖4嫠鼈兊臓顟B(tài)。當(dāng)用戶(hù)重新訪問(wèn)應(yīng)用程序時(shí),她能得到她的數(shù)據(jù)。進(jìn)行這種處理方式最經(jīng)典的例子是 mail應(yīng)用程序。如果用戶(hù)正在輸入 email,這時(shí)其它 Activity啟動(dòng)了,mail應(yīng)用程序應(yīng)該把正在編輯的email以草稿的方式保存起來(lái)。

      如果你不想穿著內(nèi)衣在大街上溜達(dá)的話(huà),你的數(shù)據(jù)也不應(yīng)該這樣。盡管可能存在暴露應(yīng)用程序的某種形式給其它應(yīng)用程序,但這通常不是最好的主意。暴露原始數(shù)據(jù),要求其它應(yīng)用程序能夠理解你的數(shù)據(jù)的格式;如果你變更了格式,那么,你將破壞那些沒(méi)有進(jìn)行同步更新的應(yīng)用程序。

      “Android 方式”是創(chuàng)建一個(gè) ContentProvider,以一種清晰的、深思熟慮的和可維護(hù)的API方式暴露你的數(shù)據(jù)給其它應(yīng)用程序。使用 ContentProvider,就好像是插入Java接口來(lái)分離和組裝兩片高耦合的代碼。這意味著你可以修改數(shù)據(jù)的內(nèi)部格式,而不用修改由 ContentProvider暴露的接口,這樣,也不會(huì)影響其它應(yīng)用程序。

      如果用戶(hù)正在運(yùn)行一個(gè)應(yīng)用程序(例如,Phone程序),斷定對(duì)用戶(hù)操作的目的才是安全的。這也就是為什么必須避免創(chuàng)建Activity,而是直接在當(dāng)前的 Activity中響應(yīng)用戶(hù)的輸入。那 就是說(shuō),不要在 BroadcastReceiver或在后臺(tái)運(yùn)行的 Service中調(diào)用 callActivity()。這么做會(huì)中斷當(dāng)前運(yùn)行的應(yīng)用程序,并導(dǎo)致用戶(hù)惱怒。也許更糟糕的是,你的 Activity可能成為“按鍵強(qiáng)盜”,竊取了用戶(hù)要提供給前一個(gè) Activity的輸入。視乎你的應(yīng)用程序所做的事情,這可能是個(gè)壞消息。

      不 選擇在后臺(tái)直接創(chuàng)建 Activity UI,取而代之的是,應(yīng)該使用NotificationManager來(lái)設(shè)置 Notification。它們會(huì)出現(xiàn)在狀態(tài)欄,并且用戶(hù)可以在他空閑的時(shí)候點(diǎn)擊它們,來(lái)查看你的應(yīng)用程序向他顯示了什么。(注意,如果你的 Activity已經(jīng)在前臺(tái)了,以上將不適用:這時(shí),對(duì)于用戶(hù)的輸入,用戶(hù)期望的是看到下一個(gè) Activity來(lái)響應(yīng))

      如果你的應(yīng)用程序需要執(zhí)行一些昂貴或耗時(shí)的計(jì)算的話(huà),你應(yīng)該盡可能地將它挪到線程里。這將阻止向用戶(hù)顯示可怕的“Application Not Responding”對(duì)話(huà)框,如果不這樣做,最終的結(jié)果會(huì)導(dǎo)致你的應(yīng)用程序完全終止。

      一 般情況下,Activity中的所有代碼,包括它的 View,都運(yùn)行在相同的線程里。在這個(gè)線程里,還需要處理UI事件。例如,當(dāng)用戶(hù)按下一個(gè)按鍵,一個(gè) key-down事件就會(huì)添加到 Activity的主線程隊(duì)列里。事件處理系統(tǒng)需要很快讓這個(gè)事件出列并得到處理;如果沒(méi)有,系統(tǒng)數(shù)秒后會(huì)認(rèn)為應(yīng)用程序已經(jīng)掛起并為用戶(hù)提供殺死應(yīng)用程序 的機(jī)會(huì)。

      如果有耗時(shí)的代碼,內(nèi)聯(lián)在Activity上運(yùn)行也就是運(yùn)行在事件處理線程里,這在很大程度上阻塞了事件處理。這會(huì)延遲輸入處理,并導(dǎo)致ANR對(duì)話(huà)框。為了避免這個(gè),把你的計(jì)算移到線程里。

      任 何值得使用的應(yīng)用程序都可能有幾個(gè)不同的屏幕。當(dāng)設(shè)計(jì)UI屏幕時(shí),請(qǐng)一定要使用多個(gè)Activity對(duì)象實(shí)例。依賴(lài)于你的開(kāi)發(fā)背景,你可能理解 Activity類(lèi)似于 Java Applet,它是你應(yīng)用程序的入口點(diǎn)。然而,那并不精確:Applet子類(lèi)是一個(gè) Java Applet的單一入口點(diǎn),而一個(gè)Activity應(yīng)該看作是你的應(yīng)用程序多個(gè)潛在入口點(diǎn)之一。你的“main”Activity和其它之間的唯一不同點(diǎn) 是“main”Activity正巧是在AndroidManifest.xml文件中唯一對(duì)“android.intent.action.MAIN”動(dòng)作感興趣的Activity。因此,當(dāng)設(shè)計(jì)你的應(yīng)用程序的時(shí)候,把你的應(yīng)用程序看作是Activity對(duì)象的 集合。從長(zhǎng)遠(yuǎn)來(lái)看,這會(huì)使得你的代碼更加方便維護(hù)。

      當(dāng) 談到 UI觀感時(shí),巧妙地交融非常重要。用戶(hù)在使用與自己期望相反的 UI的應(yīng)用程序時(shí),會(huì)產(chǎn)生不愉快的感覺(jué)。當(dāng)設(shè)計(jì)你的 UI時(shí),你應(yīng)該盡量避免太多自己的主題。相反的,使用同一個(gè)主題。你可以重寫(xiě)或擴(kuò)展你需要的主題部分,但至少在與其它應(yīng)用程序相同的 UI基礎(chǔ)上開(kāi)始。

      不 同的 Android設(shè)備可能支持不同的屏幕分辨率。甚至一些可以自己變更分辨率,例如,切換到風(fēng)景模式。確保你的布局和圖片能足夠靈活地在不同的設(shè)備屏幕上正 常顯示。幸運(yùn)的是,這很容易做到。簡(jiǎn)而言之,你需要做的是為主要分辨率提供不同版本的作品,然后為不同的尺寸設(shè)計(jì)你的布局。(例如,避免使用硬編碼位置而 使用相對(duì)布局。)如果那樣做的話(huà),系統(tǒng)會(huì)處理剩下的部分,而且你的應(yīng)用程序在任何設(shè)備上都看起來(lái)很棒。

      Android設(shè)備會(huì)有多種網(wǎng)絡(luò)連接選項(xiàng)。所有的都提供數(shù)據(jù)訪問(wèn),但之間肯定有更快的。其中,速度最慢的是GPRS,GSM網(wǎng)絡(luò)的非 3G數(shù)據(jù)服務(wù)。即使具備 3G能力的設(shè)備在非3G的網(wǎng)絡(luò)上也會(huì)花費(fèi)很多的時(shí)間,所以,網(wǎng)絡(luò)很慢仍然是一個(gè)長(zhǎng)期存在的事實(shí)。

      這 就是為什么你應(yīng)該按照最小化的網(wǎng)絡(luò)訪問(wèn)和帶寬來(lái)編寫(xiě)你的代碼。你不能假設(shè)網(wǎng)絡(luò)是快速的,所以,你應(yīng)該總是計(jì)劃它是慢的。如果你的用戶(hù)碰巧在一個(gè)快速的網(wǎng)絡(luò) 上,那很好——他們的用戶(hù)體驗(yàn)會(huì)提升。你要避免相反的情形:在不同的地點(diǎn)和不同時(shí)間,應(yīng)用程序有時(shí)可用,有時(shí)慢得令人抓狂,這樣的程序可能不會(huì)受歡迎。

      還 有一個(gè)潛在的地方是,如果你正在使用模擬器,那么你很容易受它迷糊,因?yàn)槟M器使用電腦的網(wǎng)絡(luò)連接。這比手機(jī)網(wǎng)絡(luò)快很多,所以,你需要修改模擬器設(shè)定來(lái)模 擬較低的網(wǎng)絡(luò)速度。你可以在 Eclipse中做到這點(diǎn),在啟動(dòng)選項(xiàng)的模擬器設(shè)置頁(yè)里設(shè)置或者在啟動(dòng)模擬器時(shí)通過(guò)命令行選項(xiàng)設(shè)置。

      Android 可以支持多種外觀形狀。也就是說(shuō),一些Android設(shè)備擁有全“QWERTY”鍵盤(pán),而其它可能會(huì)有40鍵、12鍵或其它鍵盤(pán)設(shè)置。同樣的,一些設(shè)備可 能有觸摸屏,但一些也會(huì)沒(méi)有。當(dāng)創(chuàng)建你的應(yīng)用程序的時(shí)候,記住這一點(diǎn)。不要假定特定的鍵盤(pán)布局——除非你真的想限定你的應(yīng)用程序只運(yùn)行在某些設(shè)備上。

      如 果移動(dòng)設(shè)備經(jīng)常插在墻上,那么,它也就不是很“移動(dòng)”。移動(dòng)設(shè)備是電池供電的,如果我們能讓每次充電的電池使用得更持久一些,那么每個(gè)人都會(huì)更加開(kāi)心—— 尤其是用戶(hù)。

      其中兩大耗電硬件是處理器和無(wú)線;這也就是我們?yōu)槭裁匆獙?xiě)盡可能少做工作、盡可能少去使用網(wǎng)絡(luò)的應(yīng)用程序的重要原因。

      如 何讓你的應(yīng)用程序最小化的占用處理器,歸根結(jié)底還是要寫(xiě)高效代碼。為了減少無(wú)線的電量消耗,確保對(duì)錯(cuò)誤條件進(jìn)行正確的處理,并只獲取你要的東西。例如,如 果某一個(gè)網(wǎng)絡(luò)操作失敗了,不要不斷地進(jìn)行重試。如果失敗了一次,有可能是用戶(hù)不受歡迎,因此,如果你再以正確的方式操作,有可能還會(huì)失敗;所有你做的都是 在浪費(fèi)電池。

      用戶(hù)是相當(dāng)聰明的:如果你的程序高耗電,他們是一定會(huì)發(fā)現(xiàn)的。到那個(gè)時(shí)點(diǎn),你唯一可以確定的是,你的程序?qū)⒑芸毂恍遁d掉。

      第二篇:Android開(kāi)發(fā)分享講稿(修改)

      講清楚,do better Android開(kāi)發(fā)入門(mén)分享

      今天要給大家分享的是Android開(kāi)發(fā)入門(mén),小青青_Lo是我的微博昵稱(chēng),如果覺(jué)得我講得好,求互粉(*^__^*)嘻嘻~~

      講解大綱

      這個(gè)是今天講解的大綱,首先通過(guò)著名Hello world程序?qū)ndroid開(kāi)發(fā)有一個(gè)感性的認(rèn)識(shí),之后上升到理性認(rèn)識(shí),了解android開(kāi)發(fā)的重要組成部分和基本開(kāi)發(fā)流程。Android開(kāi)發(fā)主要包括App組件,App資源和App的配置文件。App組件主要負(fù)責(zé)和用戶(hù)交互,處理用戶(hù)請(qǐng)求;而App Res主要負(fù)責(zé)用戶(hù)界面的視圖;App Manifest文件主要用來(lái)聲明App運(yùn)行所需環(huán)境,比如App包含哪些功能模塊,API最低最高版本要求,比如Android操作系統(tǒng)版本要求運(yùn)行設(shè)備的性能要求,比如屏幕分辨率,內(nèi)存空間大小等,用戶(hù)是否有權(quán)限訪問(wèn)一些系統(tǒng)應(yīng)用程序和系統(tǒng)數(shù)據(jù),比如通訊錄,GPS位置信息,本地通知服務(wù)等。

      在講解Android開(kāi)發(fā)的重要組成部分的過(guò)程中會(huì)涉及一些簡(jiǎn)單的實(shí)例現(xiàn)場(chǎng)演示來(lái)講述Android開(kāi)發(fā)的基本流程。

      歡迎提問(wèn)

      因?yàn)槲冶旧硎且粋€(gè)Android開(kāi)發(fā)的新手,在加上本身寫(xiě)代碼寫(xiě)得少,所以難免會(huì)有一些錯(cuò)誤和講得不清楚得地方,歡迎大家提出疑問(wèn),提問(wèn)有獎(jiǎng)。如果我答不出來(lái),記下來(lái)分享后查資料給大家回答。

      先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better

      為什么要學(xué)習(xí)Android開(kāi)發(fā)?(此段可以精簡(jiǎn)下)

      Android操作系統(tǒng)目前占移動(dòng)操作系統(tǒng)78%的市場(chǎng)份額,這個(gè)充分說(shuō)明了android開(kāi)發(fā)市場(chǎng)大需求廣?,F(xiàn)在大家都知道移動(dòng)互聯(lián)網(wǎng)是大勢(shì)所趨,每天坐公交地鐵,一眼望去大家都在忙于刷手機(jī)ipad就已經(jīng)充分說(shuō)明這點(diǎn),隨著移動(dòng)互聯(lián)網(wǎng)的興起,App開(kāi)發(fā)自然是大勢(shì)所趨。Android操作系統(tǒng)之所以發(fā)展如此迅速,和其開(kāi)源有著密不可分的關(guān)系,開(kāi)源意味著便于擴(kuò)展和學(xué)習(xí),以及使用。

      之后我們簡(jiǎn)單介紹下Android系統(tǒng)架構(gòu),一共分為四層,最下層的是linux內(nèi)核,負(fù)責(zé)內(nèi)存管理,進(jìn)程調(diào)度,網(wǎng)絡(luò)協(xié)議以及各種設(shè)備驅(qū)動(dòng)等,再上面是各種系統(tǒng)運(yùn)行庫(kù),其主要是應(yīng)用框架層和linux內(nèi)核的重要紐帶,而我們下載的android SDK處于應(yīng)用框架層,主要負(fù)責(zé)給android應(yīng)用開(kāi)發(fā)提供各種基礎(chǔ)服務(wù),我們平時(shí)使用的微博,微信等app應(yīng)用程序就處于應(yīng)用層。簡(jiǎn)要介紹了android系統(tǒng),我們現(xiàn)在開(kāi)始anroid開(kāi)發(fā)之旅。部署Android開(kāi)發(fā)環(huán)境

      Android開(kāi)發(fā)第一步就是部署android開(kāi)發(fā)環(huán)境,部署android開(kāi)發(fā)環(huán)境有兩種方式:方法一是JDK+android studio, 方法二是JDK+SDK+Eclipse。我們現(xiàn)在比較下這兩種的特性,首先從部署便捷性來(lái)看AndroidStudio要比安裝SDK步驟少,更方便簡(jiǎn)單。之前小超分享框架的時(shí)候說(shuō)應(yīng)用性和性能一般成反比,Android Studio的IDE好用,這同樣意味著其性能比SDK的要低,所以其編譯運(yùn)行速度Eclipse顯然比Android Studio快,內(nèi)存消耗低。運(yùn)行Android Studio一般將我可憐本本拖垮。如果從開(kāi)發(fā)效率來(lái)看,方法一顯然要高于方法先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better 二,從代碼架構(gòu)來(lái)看,AS的Java/resoure/Manifest三個(gè)文件夾就一一映射了Android開(kāi)發(fā)的三個(gè)重要組成部分,而Eclipse的代碼架構(gòu)相比之下稍顯混亂。而且Android Studio的UI可視化也比Eclipse的更為強(qiáng)大好用。對(duì)于運(yùn)行機(jī)器要求,顯然Android Studio比JDK的要求高。

      綜上所述,AS作為google的官方開(kāi)發(fā)工具,再者從大家最關(guān)心的開(kāi)發(fā)效率來(lái)看,AS是Android開(kāi)發(fā)的IDE最佳之選

      AS是基于IDEA的,好好看看AS好在哪!

      http://java.dzone.com/articles/why-idea-better-eclipse

      首先創(chuàng)建工程(1)建立一個(gè)工程

      File?New?Android Application Project

      運(yùn)行程序,選中app,右鍵點(diǎn)擊菜單選擇run as?Android Application.注意此時(shí)需要將Android手機(jī)通過(guò)usb接口連接到電腦上,而且選擇允許調(diào)試,即可在手機(jī)上安裝運(yùn)行的app,從而看到運(yùn)行效果。

      先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better

      (2)分析代碼架構(gòu)(src/res/Manifest File)

      src: java code, 主要負(fù)責(zé)實(shí)現(xiàn)App的組件(Activity,Broadcast,ContentProvider,Service etc)和數(shù)據(jù)存儲(chǔ)(文件存儲(chǔ),db存儲(chǔ),shared Preference),完成用戶(hù)界面內(nèi)的相關(guān)交互。

      res: layout,values,drawable etc, 主要負(fù)責(zé)UI布局,都是xml格式的文件。Manifest File:主要是配置App的運(yùn)行環(huán)境。Api的版本需求,App的訪問(wèn)權(quán)限,App所包含的組件,設(shè)備特征的相關(guān)權(quán)限等(3)建立并運(yùn)行一個(gè)activity 先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better PS:首先注意到此處有一個(gè)黃色感嘆號(hào),說(shuō)明此程序有警告,如果是一把紅叉叉,就是程序包含錯(cuò)誤,需要修復(fù)。此處有警告,是因?yàn)槭褂昧说桶姹镜念?lèi)ActionBarActivity,所以類(lèi)名上面有橫線,在此處我們修改為Activity類(lèi),然后按快捷鍵ctrl+shift+O,自動(dòng)import該類(lèi)的命名空間。此時(shí)發(fā)現(xiàn)import android.app.Activity;并且黃色的感嘆號(hào)消失了。

      Android開(kāi)發(fā)重要組成部分

      接下來(lái)我們進(jìn)一步了解Android開(kāi)發(fā),Android開(kāi)發(fā)的重要組成部分。Android組件主要包括活動(dòng),廣播,服務(wù)和內(nèi)容提供器。這四大組件是組成App的基礎(chǔ)功能模塊,而intent和intent-filters是用來(lái)銜接各個(gè)功能模塊組件,負(fù)責(zé)組件之間的交互和通信。

      如果是組件是負(fù)責(zé)邏輯控制,那么App Res主要負(fù)責(zé)用戶(hù)界面視圖,在此會(huì)介紹構(gòu)成視圖的資源類(lèi)型,以及各個(gè)資源的組成方式;之后還會(huì)介紹如何在代碼中訪問(wèn)資源。由于運(yùn)行app的設(shè)備分辨率不同,語(yǔ)言不同,操作系統(tǒng)版本不同等原因,需要考慮到資源如何對(duì)各種不同設(shè)備的硬軟件兼容。

      最后我們簡(jiǎn)單介紹下配置文件的作用。Manifest文件主要是用來(lái)聲明App運(yùn)行環(huán)境要求,支持什么版本的api,app包含哪些組件,需要哪些用戶(hù)權(quán)限等。Activity的定義

      首先我們來(lái)看四大組件中最常見(jiàn)的Activity, 在SDK的官方文檔是這樣定義Activity的,其主要是提供一個(gè)可以讓用戶(hù)進(jìn)行交互完成某些請(qǐng)求的用戶(hù)界面。比如說(shuō)用戶(hù)在撥打電話(huà),拍照,發(fā)送郵件,看地圖的時(shí)候都需要一個(gè)用戶(hù)界面,通過(guò)這個(gè)界面用戶(hù)可以和app進(jìn)行對(duì)話(huà),發(fā)出請(qǐng)求,app響應(yīng)請(qǐng)求。同樣在刷先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better 微博的時(shí)候我們也可以處處看到Activity,微博feed流,點(diǎn)擊消息進(jìn)入消息箱。簡(jiǎn)而言之,Acivity是承載某個(gè)功能的UI和交互的一個(gè)容器,在app中看到的是一個(gè)用戶(hù)交互界面。Activity狀態(tài)和生命周期

      Activity一共有三種狀態(tài),當(dāng)Activity處于前端的時(shí)候,也就是獲取用戶(hù)焦點(diǎn)的時(shí)候,其狀態(tài)為Resumed,此時(shí)處于前端生命周期,而當(dāng)其失去用戶(hù)焦點(diǎn),但是還是部分可見(jiàn)的時(shí)候,其狀態(tài)為paused,此時(shí)不屬于前端生命周期,而屬于可見(jiàn)生命周期范圍內(nèi),而當(dāng)其失去用戶(hù)焦點(diǎn),又不可見(jiàn)的時(shí)候,此時(shí)就是stoped。從創(chuàng)建到stop整個(gè)過(guò)程為完整生命周期。

      我們可以看一個(gè)例子。

      主界面獲取用戶(hù)焦點(diǎn)

      主界面不可見(jiàn)失去

      先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better

      對(duì)于組件的用法主要分為三步:(1)實(shí)現(xiàn)組件類(lèi)

      (2)在Manifest或者代碼中注冊(cè)組件(3)在活動(dòng)中啟動(dòng)或者觸發(fā)組件

      如何使用Activity(見(jiàn)demo)

      (1)創(chuàng)建UI—second.xml(2)創(chuàng)建SecondActivity(3)啟動(dòng)一個(gè)activity

      前面我講到要從主界面而跳轉(zhuǎn)到第二個(gè)界面,也就是從第一個(gè)活動(dòng)跳轉(zhuǎn)到第二個(gè)活動(dòng),這個(gè)時(shí)候需要intent來(lái)銜接各個(gè)組件,完成組件之間的交互。

      先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better 首先我們來(lái)看下官方sdk上對(duì)intent的定義,intent是指向其他app發(fā)出動(dòng)作請(qǐng)求,四大組件中的活動(dòng),服務(wù)和廣播都是由intent來(lái)啟動(dòng)(此處沒(méi)有講清楚呀?。┮惨虼薸ntent有廣泛的應(yīng)用,比如

      – 從微博feed流跳轉(zhuǎn)到消息箱 – 啟動(dòng)本地通知服務(wù),鬧鐘備忘錄服務(wù) – 發(fā)微博曬照片跳轉(zhuǎn)照相機(jī)程序

      – 密碼變更的時(shí)候,發(fā)送強(qiáng)制下線的廣播…

      Intent的類(lèi)型

      Intent包含兩種類(lèi)型,顯式intent和隱式intent,顯式intent是指通過(guò)組件類(lèi)名來(lái)啟動(dòng)組件。然后隱式的intent是通過(guò)聲明組件要執(zhí)行的動(dòng)作,android系統(tǒng)根據(jù)要執(zhí)行的動(dòng)作找到相應(yīng)的組件啟動(dòng)之。

      什么也不多說(shuō),我們看看代碼。從代碼中也可以看出顯示intent和隱式intent的區(qū)別。一個(gè)是從主界面跳轉(zhuǎn)到第二個(gè)頁(yè)面,一個(gè)是先在Manifest聲明跳轉(zhuǎn)的動(dòng)作,系統(tǒng)找到符合條件的活動(dòng)進(jìn)行啟動(dòng)。隱式intent活動(dòng)啟動(dòng)的原理

      我們通過(guò)一個(gè)圖來(lái)看看隱式intent啟動(dòng)活動(dòng)的原理,如圖所示:

      [1] Activity A 通過(guò)一個(gè)Action的描述創(chuàng)建Intent,并將其傳給startActivity.[2] 安卓系統(tǒng)搜索所有activity的intent filters,看是否這個(gè)intent中的action [3] 如果ActivityB 符合,則將啟動(dòng)Activity B

      運(yùn)行一個(gè)intent 先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better 如果要build一個(gè)intent,要么采用顯式的intent通過(guò)組件類(lèi)名進(jìn)行啟動(dòng)。要么描述組件要執(zhí)行的動(dòng)作或者種類(lèi)信息,系統(tǒng)找到滿(mǎn)足條件的組件進(jìn)行相關(guān)的啟動(dòng),可能執(zhí)行某些動(dòng)作的時(shí)候還需要攜帶一些數(shù)據(jù)。

      Intent的用法

      Intent可以用來(lái)啟動(dòng)一個(gè)活動(dòng),也可以用于啟動(dòng)一個(gè)服務(wù),或者將其余服務(wù)進(jìn)行相關(guān)的綁定,或者發(fā)送廣播,或者在這個(gè)過(guò)程中傳遞或者返回?cái)?shù)據(jù)。具體會(huì)在后續(xù)進(jìn)行相關(guān)的講述。

      Pendingintent的定義和應(yīng)用

      PendingIntent是指在intent對(duì)象外包了一層。Pendingintent最初的目的是用于授權(quán)外部程序可以使用內(nèi)部的intent,就好像這個(gè)intent是內(nèi)部調(diào)用,然后在內(nèi)部進(jìn)程內(nèi)執(zhí)行的。

      其主要應(yīng)用場(chǎng)景有:

      一個(gè)是用于聲明本地通知服務(wù)時(shí)所需的intent代碼 另一個(gè)是用于聲明定時(shí)任務(wù)觸發(fā)的intent 最后是聲明與控件交互的intent

      Broadcast的定義和應(yīng)用

      廣播接收器是指可以用來(lái)接收系統(tǒng)范圍內(nèi)的廣播通知的組件。廣播的應(yīng)用有:

      先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better 一些是來(lái)自系統(tǒng)的廣播,比如說(shuō)提示app電量過(guò)低,提示網(wǎng)絡(luò)中斷,不能再正常刷微信微博,開(kāi)機(jī)時(shí)通知某些app自動(dòng)啟動(dòng)。

      有一些是應(yīng)用程序廣播或者本地廣播,所謂本地廣播是指程序內(nèi)部的廣播。比如當(dāng)通知所有的活動(dòng)強(qiáng)制下線等。

      Broadcast的運(yùn)行流程

      Broadcast的運(yùn)行流程包括發(fā)送廣播,注冊(cè)廣播接收器和接收廣播。發(fā)送廣播主要是通過(guò)intent來(lái)進(jìn)行廣播的發(fā)送,注冊(cè)廣播接收器有兩種方法,一種是在manifest中靜態(tài)注冊(cè)的方法,在manifest中聲明接收器的類(lèi)名以及相關(guān)動(dòng)作。一種是在代碼中動(dòng)態(tài)注冊(cè)的方法,在代碼中創(chuàng)建intent-filter,并創(chuàng)建廣播接收器對(duì)象,用這兩個(gè)參數(shù)注冊(cè)廣播接收器;最后接收廣播,就需要實(shí)現(xiàn)廣播接收器的類(lèi),其中最重要是重載onReceive函數(shù),里面是處理當(dāng)接收到廣播的時(shí)候如何處理。

      ContentProvider的定義和應(yīng)用

      ContentProvider主要是提供訪問(wèn)外部數(shù)據(jù)的標(biāo)準(zhǔn)接口。

      ContentProvider主要適應(yīng)于當(dāng)需要將一些復(fù)雜的數(shù)據(jù)或文件提供外部程序使用時(shí),出于安全的考慮,提供contentprovider作為外部程序訪問(wèn)內(nèi)部數(shù)據(jù)的接口。當(dāng)只是在內(nèi)部完成一些數(shù)據(jù)的讀寫(xiě),此時(shí)是不需要provider的。

      ContentProvider的運(yùn)行過(guò)程:

      先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better

      1.App0 給其他app提供了一些數(shù)據(jù)。

      2.App1和App2都想訪問(wèn)App0內(nèi)部的數(shù)據(jù),但App1因?yàn)闆](méi)權(quán)限而無(wú)權(quán)訪問(wèn),App2在manifest中聲明了其訪問(wèn)權(quán)限。

      3.為了App0內(nèi)部數(shù)據(jù)安全,App0給外部程序提供了訪問(wèn)內(nèi)部數(shù)據(jù)的標(biāo)準(zhǔn)接口即ContentProvider。

      4.App2通過(guò)getContentResolver轉(zhuǎn)化content URI中的provider authority和path,并與已知的providers匹配,從而找到所需要的provider,從而成功訪問(wèn)App0的內(nèi)部數(shù)據(jù)。ContentProvider的用法:

      首先設(shè)計(jì)相關(guān)的數(shù)據(jù)結(jié)構(gòu)——文件或者結(jié)構(gòu)化數(shù)據(jù)。

      之后就是設(shè)計(jì)內(nèi)容的URI,實(shí)現(xiàn)provider的類(lèi),之后就是定義provider的屬性,并且在manifest文件中注冊(cè)相關(guān)的provider。

      最后使用getContentResolver來(lái)找到正確的provider,我們可以通過(guò)一個(gè)通訊錄的例子來(lái)進(jìn)行相關(guān)的了解。

      Service的定義和應(yīng)用

      服務(wù)主要指在后臺(tái)長(zhǎng)期運(yùn)行的程序。

      先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better 服務(wù)的應(yīng)用有本地通知服務(wù),定時(shí)任務(wù)服務(wù)和后臺(tái)應(yīng)用程序等。

      Service的生命周期以及服務(wù)的相關(guān)用法

      服務(wù)的生命周期分為完整生命周期和活躍生命周期,完整生命周期是指從服務(wù)創(chuàng)建到服務(wù)銷(xiāo)毀。如果某個(gè)服務(wù)在某個(gè)活動(dòng)啟動(dòng),即使是活動(dòng)被銷(xiāo)毀了,這個(gè)服務(wù)也依然存在,比如push服務(wù),即使沒(méi)有停留在app前端,push服務(wù)也是在后臺(tái)運(yùn)行的。

      而活躍生命周期是指從服務(wù)綁定到服務(wù)解綁的整個(gè)過(guò)程。

      Service的相關(guān)用法:

      實(shí)現(xiàn)服務(wù)類(lèi),在manifest中注冊(cè)服務(wù)組件,并且在活動(dòng)中啟動(dòng)或者綁定某項(xiàng)服務(wù)。

      你會(huì)發(fā)現(xiàn)所有的組件的使用,基本都是實(shí)現(xiàn)具體組件類(lèi),然后再manifest中注冊(cè)或者在代碼中注冊(cè),之后在活動(dòng)中通過(guò)intent啟動(dòng)相關(guān)的組件。

      資源Resources Res用于構(gòu)建我們看到的用戶(hù)界面視圖,我們將從以下三個(gè)方面來(lái)講述:資源類(lèi)型,設(shè)備兼容性,以及如何在代碼中使用Resource,我們對(duì)照右圖,可以看出資源有布局,有字符串,有調(diào)色板等,除了資源的種類(lèi),資源還會(huì)考慮設(shè)備的兼容性,比如說(shuō)根據(jù)屏幕分辨率——分為hdpi的調(diào)色版,ldpi的調(diào)色板等,根據(jù)系統(tǒng)語(yǔ)言,字符串的分為英語(yǔ),中文,日語(yǔ)的等,而由于不同設(shè)備上安裝的是不同版本的android操作系統(tǒng),自然資源要適配各種不同版本的api,比如先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better values-v11,values-v14等

      為了更好的用戶(hù)交互,有時(shí)候我們要獲取資源,比如實(shí)現(xiàn)點(diǎn)擊登錄按鈕跳轉(zhuǎn)到微博主頁(yè),我們必須獲取登錄按鈕,針對(duì)這個(gè)按鈕先點(diǎn)擊事件。那如何獲取到登錄按鈕呢?也就是如何獲取到按鈕資源呢?在Android開(kāi)發(fā)中會(huì)生成一份R文件,為每一個(gè)資源都分配了一個(gè)id,我們可以根據(jù)這個(gè)id進(jìn)行訪問(wèn)。那如何獲取到這個(gè)id呢,主要是根據(jù)我們?cè)谫Y源xml文件中定義的id,比如R.id.btn_login,類(lèi)似于html中我們用到的id,也可以是類(lèi)型+資源名來(lái)獲取到這個(gè)id,比如R.string.hello_world。

      布局的樹(shù)形結(jié)構(gòu)

      一個(gè)用戶(hù)界面整體是一個(gè)樹(shù)形結(jié)構(gòu),有一個(gè)根的layout,之后layout可以相互嵌套。在android中資源分為兩類(lèi):viewGroup和view,而viewGroup繼承與view,viewGroup主要指布局,而view主要指控件,如按鈕,文本,列表框等 Layout 講到布局,必須提到布局的幾種類(lèi)型,最常用的是線性布局,其次是相對(duì)布局,之后是絕對(duì)布局和幀布局,線性布局分為垂直和水平,默認(rèn)是水平的方式。相對(duì)布局主要是相對(duì)屏幕或者某個(gè)控件,某個(gè)內(nèi)嵌布局的相對(duì)位置。Manifest的相關(guān)作用

      Manifest主要是用來(lái)聲明App的運(yùn)行環(huán)境,比如運(yùn)行設(shè)備的硬軟件特征,對(duì)屏幕分辨率,內(nèi)存空間大小的要求,對(duì)Android操作系統(tǒng)版本的要求,App包含哪些組件,需要哪些用戶(hù)權(quán)限等。這些都需要在Manifest中進(jìn)行相關(guān)的聲明

      先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better

      小小測(cè)試---初步理解認(rèn)識(shí)UI和交互

      最后是做些小小測(cè)試,檢驗(yàn)下大家今天的收獲成果,比如在Android開(kāi)發(fā)最重要的就是UI和交互,通過(guò)之前的幾個(gè)小實(shí)驗(yàn),現(xiàn)在大家思考下,這些稍微復(fù)雜一點(diǎn)的界面UI如何實(shí)現(xiàn)呢?如何構(gòu)造布局,選擇何種控件?

      可以看到左邊的這個(gè),有一個(gè)標(biāo)題欄,下面是聊天界面,最下面是輸入框和發(fā)送按鈕,可以做一個(gè)垂直線性的布局。上面的標(biāo)題欄可以做一個(gè)橫向線性的布局,中間的是一個(gè)listview的列表框,下面也可以做一個(gè)橫向的線性布局(手繪一下基本的一個(gè)構(gòu)造)

      中間是一個(gè)通訊錄的頁(yè)面,這個(gè)通訊錄的好友頁(yè)面較之我們之前要復(fù)雜的多 也可以做一個(gè)垂直的線性布局,上面是一個(gè)標(biāo)題欄,下面是一個(gè)listview,標(biāo)題欄做一個(gè)橫向的線性布局。而listview對(duì)其每一個(gè)list又定義一個(gè)橫向的線性布局,一個(gè)ImageView圖像控件和一個(gè)文本控件 右邊的就相對(duì)要簡(jiǎn)單。標(biāo)題欄加一個(gè)圖像對(duì)象

      看完UI之后,我們來(lái)分析下交互,左邊的是輸入文本框的內(nèi)容,在點(diǎn)擊按鈕的時(shí)候獲取文本框的內(nèi)容添加到消息對(duì)象中,listview的消息列表中添加這條發(fā)送的消息。

      中間就是我們剛剛獲取了通訊錄的用戶(hù)名和電話(huà)號(hào)碼的基礎(chǔ)上之后,我們還需要獲取聯(lián)系人的頭像。將這些元素在自定義列表布局中進(jìn)行顯示。

      右邊是添加一個(gè)感知器對(duì)象,感知手機(jī)晃動(dòng)加速度,當(dāng)加速度達(dá)到一定程度,隨機(jī)彈出一個(gè)餐廳的名字。

      先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better 這三個(gè)界面可以做三個(gè)活動(dòng),在活動(dòng)中顯示UI,并且在活動(dòng)中完成按鈕以及列表框的觸發(fā)事件。最后通過(guò)intent在各個(gè)界面之間進(jìn)行跳轉(zhuǎn)。

      最后我們分析下微博的構(gòu)造來(lái)理解四大組件。

      微博有哪些主要的功能模塊,這些功能模塊之間如何交互。

      從最下面的導(dǎo)航欄可以看出主要有微博主頁(yè),消息箱,微博發(fā)布器,發(fā)現(xiàn)和我的profile五大功能模塊。他們之間可以通過(guò)點(diǎn)擊按鈕實(shí)現(xiàn)跳轉(zhuǎn)到相應(yīng)的活動(dòng)頁(yè)面,如果再進(jìn)入更加深入一級(jí)別,就通過(guò)點(diǎn)擊返回鍵,返回到上一界面。

      首先所有的活動(dòng)都會(huì)接收系統(tǒng)狀態(tài)參數(shù)的一些廣播,比如電量,比如網(wǎng)絡(luò)狀態(tài),而且所有的活動(dòng)都會(huì)接收push SDK的push通知服務(wù)等,所有活動(dòng)也會(huì)接收當(dāng)密碼變更強(qiáng)制下線的廣播。比如通訊錄訪問(wèn)手機(jī)聯(lián)系人的時(shí)候會(huì)用到通訊錄數(shù)據(jù)。我們主要分析下微博feed流和消息箱,這些一般都是分為幾個(gè)模塊,feed流和消息箱都是相應(yīng)的listview,并且對(duì)list定制布局。

      后記

      本次分享旨在讓大家對(duì)android開(kāi)發(fā)有一個(gè)初步的認(rèn)識(shí),了解android開(kāi)發(fā)的重要組成部分和基本開(kāi)發(fā)流程,當(dāng)接到android開(kāi)發(fā)的需求的時(shí)候,有一個(gè)開(kāi)發(fā)的方向感和清晰的開(kāi)發(fā)思路。希望大家能動(dòng)一動(dòng)手,一起見(jiàn)證奇跡app誕生時(shí)刻。

      先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      講清楚,do better

      先做加法講清楚,之后做減法,言簡(jiǎn)意賅,嚴(yán)格控制時(shí)間

      第三篇:Android 嵌入式開(kāi)發(fā)心得體會(huì)

      Android 嵌入式開(kāi)發(fā)心得體會(huì)

      剛開(kāi)始接觸Android感覺(jué)到它很有意思,在界面開(kāi)發(fā)上和web也可以形成了相通的架構(gòu),更加方便,視覺(jué)上也是非常的酷,在前期我通過(guò)的大量的Android SDK開(kāi)發(fā)范例大全中的例子以及Android提供的APIDEMOS進(jìn)行學(xué)習(xí),盡管例子之間的連接比較零散,不過(guò)通過(guò)這些例子的學(xué)習(xí)我可以學(xué)習(xí)到了很多和以前java上相通的思想,因?yàn)锳ndroid在現(xiàn)在也是全新的技術(shù)和框架,在其中我也學(xué)到了如何用單例模式、工廠模式等常用的設(shè)計(jì)模式進(jìn)行學(xué)習(xí),通過(guò)API進(jìn)行開(kāi)發(fā)客戶(hù)端,對(duì)Request發(fā)送,Response處理中通過(guò)比較方便的JSON對(duì)象傳輸,以及對(duì)XML、JSON、圖片、業(yè)務(wù)等下載處理,對(duì)API接口調(diào)用等問(wèn)題處理,學(xué)習(xí)Android心得體會(huì)。首先在界面上,我們同樣可以通過(guò)不同布局進(jìn)行設(shè)計(jì)非??岬慕缑?,這些界面可以通過(guò)include進(jìn)行引入,和jsp、html也有相通的地方,同樣在android上可以用到自定義的樣式這和css也有比較相通的地方,我們可以通過(guò)一些公用的方法寫(xiě)個(gè)BaseActivity這個(gè)基類(lèi),通過(guò)繼承方式比較不錯(cuò)的實(shí)現(xiàn)了Activity的界面,因?yàn)檫@樣你可以Header(頭部)和Footer(尾部)進(jìn)行處理一些觸發(fā)事件或者特效等,布局模式以相對(duì)模式為主,線線布局模式可以在比較簡(jiǎn)單的include進(jìn)行完成,最重要的一點(diǎn)就是:我們可以自己通過(guò)重寫(xiě)方法或者通過(guò)實(shí)現(xiàn)View或者Layout等類(lèi)進(jìn)行擴(kuò)充項(xiàng)目需要的布局(或者控件),在學(xué)習(xí)界面中,我發(fā)現(xiàn)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ù)等,在Service類(lèi)中沒(méi)有context,可以通過(guò)Handler來(lái)每秒反復(fù)運(yùn)行,自動(dòng)送出系統(tǒng)廣播信息,同時(shí)在這里我們也知道可以設(shè)計(jì)一個(gè)常用的變量類(lèi),設(shè)計(jì)一個(gè)當(dāng)前的CurrentActivity這個(gè)變量進(jìn)行控制,進(jìn)行處理。

      總而言之,Android設(shè)計(jì)還是比較自由開(kāi)闊的,只要有想法,自己動(dòng)手便能實(shí)現(xiàn)。

      第四篇:Android項(xiàng)目開(kāi)發(fā)總結(jié)

      項(xiàng)目開(kāi)發(fā)總結(jié)報(bào)告

      1引言

      1.1編寫(xiě)目的

      總結(jié)開(kāi)發(fā)經(jīng)驗(yàn)與學(xué)習(xí)中的不足

      1.2背景

      以方便用戶(hù)記錄日常學(xué)習(xí)心得,生活體會(huì)為目的,進(jìn)行主題為“隨心筆記”的應(yīng)用開(kāi)發(fā)

      2實(shí)際開(kāi)發(fā)結(jié)果

      2.1產(chǎn)品

      2.2主要功能和性能

      能夠查看筆記的目錄,記錄筆記完成時(shí)間。能夠改變主題顏色,目錄排版方式,擁有簡(jiǎn)潔的主題。對(duì)于涂鴉功能,插入圖片,密碼鎖等功能未能實(shí)現(xiàn)。

      3開(kāi)發(fā)工作評(píng)價(jià)

      3.1對(duì)產(chǎn)品質(zhì)量的評(píng)價(jià)

      本應(yīng)用擁有簡(jiǎn)單實(shí)用的功能,能夠滿(mǎn)足一般用戶(hù)的需要

      3.3對(duì)技術(shù)方法的評(píng)價(jià)

      開(kāi)發(fā)中使用了軟件工程中的增量開(kāi)發(fā)模型,黑盒測(cè)試等技術(shù),使開(kāi)發(fā)逐步向前發(fā)展

      3.4出錯(cuò)原因的分析

      對(duì)于部分Android版本支持性不好,不能正常使用安裝等

      4經(jīng)驗(yàn)與教訓(xùn)

      通過(guò)這次開(kāi)發(fā),我們體驗(yàn)了開(kāi)發(fā)不易,需要很多人員的合作。開(kāi)發(fā)過(guò)程中,必須明確整體目標(biāo),不能東一榔頭,西一棒槌。另外由于學(xué)習(xí)時(shí)間短,對(duì)很多東西都不太了解,還好通過(guò)CSDN等一些網(wǎng)站能夠找到有益的幫助,感謝那些博客,論壇。

      第五篇:Android藍(lán)牙開(kāi)發(fā)小結(jié)

      學(xué)習(xí)之前先了解兩個(gè)基本概念:

      一、RFCOMM協(xié)議:

      一個(gè)基于歐洲電信標(biāo)準(zhǔn)協(xié)會(huì)ETSI07.10規(guī)程的串行線性仿真協(xié)議。此協(xié)議提供RS232控制和狀態(tài)信號(hào),如基帶上的損壞,CTS以及數(shù)據(jù)信號(hào)等,為上層業(yè)務(wù)(如傳統(tǒng)的串行線纜應(yīng)用)提供了傳送能力。

      RFCOMM是一個(gè)簡(jiǎn)單傳輸協(xié)議,其目的是針對(duì)如何在兩個(gè)不同設(shè)備上的應(yīng)用之間保證一條完整的通信路徑,并在它們之間保持一通信段。

      RFCOMM是為了兼容傳統(tǒng)的串口應(yīng)用,同時(shí)取代有線的通信方式,藍(lán)牙協(xié)議棧需要提供與有線串口一致的通信接口而開(kāi)發(fā)出的協(xié)議。RFCOMM協(xié)議提供對(duì)基于L2CAP協(xié)議的串口仿真,基于ETSI07.10。可支持在兩個(gè)BT設(shè)備之間同時(shí)保持高達(dá)60路的通信連接。

      RFCOMM只針對(duì)直接互連設(shè)備之間的連接,或者是設(shè)備與網(wǎng)絡(luò)接入設(shè)備之間的互連。通信兩端設(shè)備必須兼容于RFCOMM協(xié)議,有兩類(lèi)設(shè)備:DTE(Data Terminal Endpoint,通信終端,如PC,PRINTER)和DCE(Data Circuit Endpoint,通信段的一部分,如Modem)。此兩類(lèi)設(shè)備不作區(qū)分。

      二、MAC硬件地址

      MAC(Medium/MediaAccess Control, 介質(zhì)訪問(wèn)控制)MAC地址是燒錄在NetworkInterfaceCard(網(wǎng)卡,NIC)里的.MAC地址,也叫硬件地址,是由48比特長(zhǎng)(6字節(jié)),16進(jìn)制的數(shù)字組成.0-23位叫做組織唯一標(biāo)志符(organizationally unique,是識(shí)別LAN(局域網(wǎng))節(jié)點(diǎn)的標(biāo)識(shí).24-47位是由廠家自己分配。其中第40位是組播地址標(biāo)志位。網(wǎng)卡的物理地址通常是由網(wǎng)卡生產(chǎn)廠家燒入網(wǎng)卡的EPROM(一種閃存芯片,通??梢酝ㄟ^(guò)程序擦寫(xiě)),它存儲(chǔ)的是傳輸數(shù)據(jù)時(shí)真正賴(lài)以標(biāo)識(shí)發(fā)出數(shù)據(jù)的電腦和接收數(shù)據(jù)的主機(jī)的地址。

      Android平臺(tái)提供的藍(lán)牙API去實(shí)現(xiàn)藍(lán)牙設(shè)備之間的通信,藍(lán)牙設(shè)備之間的通信主要包括了四個(gè)步驟:設(shè)置藍(lán)牙設(shè)備、尋找局域網(wǎng)內(nèi)可能或者匹配的設(shè)備、連接設(shè)備和設(shè)備之間的數(shù)據(jù)傳輸。以下是建立藍(lán)牙連接的所需要的一些基本類(lèi):

      BluetoothAdapter類(lèi):代表了一個(gè)本地的藍(lán)牙適配器。它是所有藍(lán)牙交互的的入口點(diǎn)。利用它你可以發(fā)現(xiàn)其他藍(lán)牙設(shè)備,查詢(xún)綁定了的設(shè)備,使用已知的MAC地址實(shí)例化一個(gè)藍(lán)牙設(shè)備和建立一個(gè)BluetoothServerSocket(作為服務(wù)器端)來(lái)監(jiān)聽(tīng)來(lái)自其他設(shè)備的連接。

      BluetoothDevice類(lèi):代表了一個(gè)遠(yuǎn)端的藍(lán)牙設(shè)備,使用它請(qǐng)求遠(yuǎn)端藍(lán)牙設(shè)備連接或者獲取遠(yuǎn)端藍(lán)牙設(shè)備的名稱(chēng)、地址、種類(lèi)和綁定狀態(tài)。(其信息是封裝在bluetoothsocket中)。

      Bluetoothsocket類(lèi):代表了一個(gè)藍(lán)牙套接字的接口(類(lèi)似于tcp中的套接字),它是應(yīng)用程序通過(guò)輸入、輸出流與其他藍(lán)牙設(shè)備通信的連接點(diǎn)。

      Blueboothserversocket類(lèi):代表打開(kāi)服務(wù)連接來(lái)監(jiān)聽(tīng)可能到來(lái)的連接請(qǐng)求(屬于server端),為了連接兩個(gè)藍(lán)牙設(shè)備必須有一個(gè)設(shè)備作為服務(wù)器打開(kāi)一個(gè)服務(wù)套接字。當(dāng)遠(yuǎn)端設(shè)備發(fā)起連接連接請(qǐng)求的時(shí)候,并且已經(jīng)連接到了的時(shí)候,Blueboothserversocket類(lèi)將會(huì)返回一個(gè)bluetoothsocket。

      Bluetoothclass類(lèi):描述了一個(gè)藍(lán)牙設(shè)備的一般特點(diǎn)和能力。它的只讀屬性集定義了設(shè)備的主、次設(shè)備類(lèi)和一些相關(guān)服務(wù)。然而,它并沒(méi)有準(zhǔn)確地描述所有該設(shè)備所支持的藍(lán)牙文件和服務(wù),而是作為對(duì)設(shè)備種類(lèi)來(lái)說(shuō)的一個(gè)小小暗示。下面說(shuō)說(shuō)具體的編程實(shí)現(xiàn) 1.啟動(dòng)藍(lán)牙功能:

      首先通過(guò)調(diào)用靜態(tài)方法getDefaultAdapter()獲取藍(lán)牙適配器BluetoothAdapter,以后你就可以使用該對(duì)象了。如果返回為空,the story is over。例如:

      BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();if(mBluetoothAdapter == null){ // Device does not support Bluetooth } 其次,調(diào)用isEnabled()來(lái)查詢(xún)當(dāng)前藍(lán)牙設(shè)備的狀態(tài),如果返回為false,則表示藍(lán)牙設(shè)備沒(méi)有開(kāi)啟,接下來(lái)你需要封裝一個(gè)ACTION_REQUEST_ENABLE請(qǐng)求到intent里面,調(diào)用startActivityForResult()方法使能藍(lán)牙設(shè)備,例如:

      if(!mBluetoothAdapter.isEnabled()){ Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);}

      2.查找設(shè)備:

      使用BluetoothAdapter類(lèi)里的方法,你可以查找遠(yuǎn)端設(shè)備(大概十米以?xún)?nèi))或者查詢(xún)?cè)谀闶謾C(jī)上已經(jīng)匹配(或者說(shuō)綁定)的其他手機(jī)了。當(dāng)然需要確定對(duì)方藍(lán)牙設(shè)備已經(jīng)開(kāi)啟或者已經(jīng)開(kāi)啟了“被發(fā)現(xiàn)使能”功能(對(duì)方設(shè)備是可以被發(fā)現(xiàn)的是你能夠發(fā)起連接的前提條件)。如果該設(shè)備是可以被發(fā)現(xiàn)的,會(huì)反饋回來(lái)一些對(duì)方的設(shè)備信息,比如名字、MAC地址等,利用這些信息,你的設(shè)備就可以選擇去向?qū)Ψ匠跏蓟粋€(gè)連接。

      如果你是第一次與該設(shè)備連接,那么一個(gè)配對(duì)的請(qǐng)求就會(huì)自動(dòng)的顯示給用戶(hù)。當(dāng)設(shè)備配對(duì)好之后,他的一些基本信息(主要是名字和MAC)被保存下來(lái)并可以使用藍(lán)牙的API來(lái)讀取。使用已知的MAC地址就可以對(duì)遠(yuǎn)端的藍(lán)牙設(shè)備發(fā)起連接請(qǐng)求。

      匹配好的設(shè)備和連接上的設(shè)備的不同點(diǎn):匹配好只是說(shuō)明對(duì)方設(shè)備發(fā)現(xiàn)了你的存在,并擁有一個(gè)共同的識(shí)別碼,并且可以連接。連接上:表示當(dāng)前設(shè)備共享一個(gè)RFCOMM信道并且兩者之間可以交換數(shù)據(jù)。也就是是說(shuō)藍(lán)牙設(shè)備在建立RFCOMM信道之前,必須是已經(jīng)配對(duì)好了的。

      3.查詢(xún)匹配好的設(shè)備:

      在建立連接之前你必須先查詢(xún)配對(duì)好了的藍(lán)牙設(shè)備集(你周?chē)乃{(lán)牙設(shè)備可能不止一個(gè)),以便你選取哪一個(gè)設(shè)備進(jìn)行通信,例如你可以你可以查詢(xún)所有配對(duì)的藍(lán)牙設(shè)備,并使用一個(gè)數(shù)組適配器將其打印顯示出來(lái):

      Set pairedDevices = mBluetoothAdapter.getBondedDevices();// If there are paired devices if(pairedDevices.size()> 0){ //Loop through paired devices for(BluetoothDevice device : pairedDevices){ // Add the name and address to an array adapter to show in a ListView mArrayAdapter.add(device.getName()+ “n” + device.getAddress());} 建立一個(gè)藍(lán)牙連接只需要MAC地址就已經(jīng)足夠了。

      4.掃描設(shè)備:

      掃描設(shè)備,只需要簡(jiǎn)單的調(diào)用startDiscovery()方法,這個(gè)掃描的過(guò)程大概持續(xù)是12秒,應(yīng)用程序?yàn)榱薃CTION_FOUND動(dòng)作需要注冊(cè)一個(gè)BroadcastReceiver來(lái)接受設(shè)備掃描到的信息。對(duì)于每一個(gè)設(shè)備,系統(tǒng)都會(huì)廣播ACTION_FOUND動(dòng)作。例如: // Create a BroadcastReceiver for ACTION_FOUND private final BroadcastReceiver mReceiver = new BroadcastReceiver(){ public void onReceive(Context context, Intent intent){ String action = intent.getAction();// When discovery finds a device if(BluetoothDevice.ACTION_FOUND.equals(action)){ // Get the BluetoothDevice object from the Intent BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);// Add the name and address to an array adapter to show in a ListView mArrayAdapter.add(device.getName()+ “n” + device.getAddress());} } };// Register the BroadcastReceiver IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);registerReceiver(mReceiver, filter);// Don't forget to unregister during onDestroy 注意:掃描的過(guò)程是一個(gè)很耗費(fèi)資源的過(guò)程,一旦你找到你需要的設(shè)備之后,在發(fā)起連接請(qǐng)求之前,確保你的程序調(diào)用cancelDiscovery()方法停止掃描。顯然,如果你已經(jīng)連接上一個(gè)設(shè)備,啟動(dòng)掃描會(huì)減少你的通信帶寬。

      5.使能被發(fā)現(xiàn):Enabling discoverability 如果你想使你的設(shè)備能夠被其他設(shè)備發(fā)現(xiàn),將ACTION_REQUEST_DISCOVERABLE動(dòng)作封裝在intent中并調(diào)用startActivityForResult(Intent, int)方法就可以了。他將在不使你應(yīng)用程序退出的情況下使你的設(shè)備能夠被發(fā)現(xiàn)。缺省情況下的使能時(shí)間是120秒,當(dāng)然你可以可以通過(guò)添加EXTRA_DISCOVERABLE_DURATION字段來(lái)改變使能時(shí)間(最大不超過(guò)300秒,這是出于對(duì)你設(shè)備上的信息安全考慮)。例如: Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);startActivity(discoverableIntent);運(yùn)行該段代碼之后,系統(tǒng)會(huì)彈出一個(gè)對(duì)話(huà)框來(lái)提示你啟動(dòng)設(shè)備使能被發(fā)現(xiàn)(此過(guò)程中如果你的藍(lán)牙功能沒(méi)有開(kāi)啟,系統(tǒng)會(huì)幫你開(kāi)啟),并且如果你準(zhǔn)備對(duì)該遠(yuǎn)端設(shè)備發(fā)現(xiàn)一個(gè)連接,你不需要開(kāi)啟使能設(shè)備被發(fā)現(xiàn)功能,因?yàn)樵摴δ苤皇窃谀愕膽?yīng)用程序作為服務(wù)器端的時(shí)候才需要。

      6.連接設(shè)備:

      在應(yīng)用程序中,想建立兩個(gè)藍(lán)牙設(shè)備之間的連接,必須實(shí)現(xiàn)客戶(hù)端和服務(wù)器端的代碼(因?yàn)槿魏我粋€(gè)設(shè)備都必須可以作為服務(wù)端或者客戶(hù)端)。一個(gè)開(kāi)啟服務(wù)來(lái)監(jiān)聽(tīng),一個(gè)發(fā)起連接請(qǐng)求(使用服務(wù)器端設(shè)備的MAC地址)。當(dāng)他們都擁有一個(gè)藍(lán)牙套接字在同一RFECOMM信道上的時(shí)候,可以認(rèn)為他們之間已經(jīng)連接上了。服務(wù)端和客戶(hù)端通過(guò)不同的方式或其他們的藍(lán)牙套接字。當(dāng)一個(gè)連接監(jiān)聽(tīng)到的時(shí)候,服務(wù)端獲取到藍(lán)牙套接字。當(dāng)客戶(hù)可打開(kāi)一個(gè)FRCOMM信道給服務(wù)器端的時(shí)候,客戶(hù)端獲取到藍(lán)牙套接字。

      注意:在此過(guò)程中,如果兩個(gè)藍(lán)牙設(shè)備還沒(méi)有配對(duì)好的,android系統(tǒng)會(huì)通過(guò)一個(gè)通知或者對(duì)話(huà)框的形式來(lái)通知用戶(hù)。RFCOMM連接請(qǐng)求會(huì)在用戶(hù)選擇之前阻塞。如下圖:

      7.服務(wù)端的連接:

      當(dāng)你想要連接兩臺(tái)設(shè)備時(shí),一個(gè)必須作為服務(wù)端(通過(guò)持有一個(gè)打開(kāi)的BluetoothServerSocket),目的是監(jiān)聽(tīng)外來(lái)連接請(qǐng)求,當(dāng)監(jiān)聽(tīng)到以后提供一個(gè)連接上的BluetoothSocket給客戶(hù)端,當(dāng)客戶(hù)端從BluetoothServerSocket得到BluetoothSocket以后就可以銷(xiāo)毀BluetoothServerSocket,除非你還想監(jiān)聽(tīng)更多的連接請(qǐng)求。

      建立服務(wù)套接字和監(jiān)聽(tīng)連接的基本步驟:

      首先通過(guò)調(diào)用listenUsingRfcommWithServiceRecord(String, UUID)方法來(lái)獲取BluetoothServerSocket對(duì)象,參數(shù)String代表了該服務(wù)的名稱(chēng),UUID代表了和客戶(hù)端連接的一個(gè)標(biāo)識(shí)(128位格式的字符串ID,相當(dāng)于PIN碼),UUID必須雙方匹配才可以建立連接。其次調(diào)用accept()方法來(lái)監(jiān)聽(tīng)可能到來(lái)的連接請(qǐng)求,當(dāng)監(jiān)聽(tīng)到以后,返回一個(gè)連接上的藍(lán)牙套接字BluetoothSocket。最后,在監(jiān)聽(tīng)到一個(gè)連接以后,需要調(diào)用close()方法來(lái)關(guān)閉監(jiān)聽(tīng)程序。(一般藍(lán)牙設(shè)備之間是點(diǎn)對(duì)點(diǎn)的傳輸)

      注意:accept()方法不應(yīng)該放在主Acitvity里面,因?yàn)樗且环N阻塞調(diào)用(在沒(méi)有監(jiān)聽(tīng)到連接請(qǐng)求之前程序就一直停在那里)。解決方法是新建一個(gè)線程來(lái)管理。例如: private class AcceptThread extends Thread { private final BluetoothServerSocket mmServerSocket;public AcceptThread(){ // Use a temporary object that is later assigned to mmServerSocket, // because mmServerSocket is final BluetoothServerSocket tmp = null;try { // MY_UUID is the app's UUID string, also used by theclient code tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);} catch(IOException e){ } mmServerSocket = tmp;} public void run(){ BluetoothSocket socket = null;// Keep listening until exception occurs or a socket is returned while(true){ try { socket = mmServerSocket.accept();} catch(IOException e){ break;} // If a connection was accepted if(socket!= null){ // Do work to manage the connection(in a separate thread)manageConnectedSocket(socket);mmServerSocket.close();break;} } } /** Will cancel the listening socket, and cause the thread to finish */ public void cancel(){ try { mmServerSocket.close();} catch(IOException e){ } } }

      8.客戶(hù)端的連接:

      為了初始化一個(gè)與遠(yuǎn)端設(shè)備的連接,需要先獲取代表該設(shè)備的一個(gè)BluetoothDevice對(duì)象。通過(guò)BluetoothDevice對(duì)象來(lái)獲取BluetoothSocket并初始化連接,具體步驟:

      使用BluetoothDevice對(duì)象里的方法createRfcommSocketToServiceRecord(UUID)來(lái)獲取BluetoothSocket。UUID就是匹配碼。然后,調(diào)用connect()方法來(lái)。如果遠(yuǎn)端設(shè)備接收了該連接,他們將在通信過(guò)程中共享RFFCOMM信道,并且connect()方法返回。例如: private class ConnectThread extends Thread { private final BluetoothSocket mmSocket;private final BluetoothDevice mmDevice;public ConnectThread(BluetoothDevice device){ // Use a temporary object that is later assigned to mmSocket, // because mmSocket is final BluetoothSocket tmp = null;mmDevice = device;// Get a BluetoothSocket to connect with the given BluetoothDevice try { // MY_UUID is the app's UUID string, also used by the server code tmp = device.createRfcommSocketToServiceRecord(MY_UUID);} catch(IOException e){ } mmSocket = tmp;}

      public void run(){ // Cancel discovery because it will slow down the connection mAdapter.cancelDiscovery();try { // Connect the device through the socket.This will block // until it succeeds or throws an exception mmSocket.connect();} catch(IOException connectException){ // Unable to connect;close the socket and get out try { mmSocket.close();} catch(IOException closeException){ } return;} // Do work to manage the connection(in a separate thread)manageConnectedSocket(mmSocket);}

      注意:conncet()方法也是阻塞調(diào)用,一般建立一個(gè)獨(dú)立的線程中來(lái)調(diào)用該方法。在設(shè)備discover過(guò)程中不應(yīng)該發(fā)起連接connect(),這樣會(huì)明顯減慢速度以至于連接失敗。且數(shù)據(jù)傳輸完成只有調(diào)用close()方法來(lái)關(guān)閉連接,這樣可以節(jié)省系統(tǒng)內(nèi)部資源。

      9.管理連接(主要涉及數(shù)據(jù)的傳輸):

      當(dāng)設(shè)備連接上以后,每個(gè)設(shè)備都擁有各自的BluetoothSocket?,F(xiàn)在你就可以實(shí)現(xiàn)設(shè)備之間數(shù)據(jù)的共享了。

      1> 首先通過(guò)調(diào)用getInputStream()和getOutputStream()方法來(lái)獲取輸入輸出流。然后通過(guò)調(diào)用read(byte[])和write(byte[]).方法來(lái)讀取或者寫(xiě)數(shù)據(jù)。

      2> 實(shí)現(xiàn)細(xì)節(jié):以為讀取和寫(xiě)操作都是阻塞調(diào)用,需要建立一個(gè)專(zhuān)用現(xiàn)成來(lái)管理。3>

      private class ConnectedThread extends Thread { private final BluetoothSocket mmSocket;private final InputStream mmInStream;private final OutputStream mmOutStream;public ConnectedThread(BluetoothSocket socket){ mmSocket = socket;InputStream tmpIn = null;OutputStream tmpOut = null;// Get the input and output streams, using temp objects because // member streams are final try { tmpIn = socket.getInputStream();tmpOut = socket.getOutputStream();} catch(IOException e){ } mmInStream = tmpIn;mmOutStream = tmpOut;} public void run(){ byte[] buffer = new byte[1024];// buffer store for the stream int bytes;// bytes returned from read()// Keep listening to the InputStream until an exception occurs while(true){ try { // Read from the InputStream bytes = mmInStream.read(buffer);// Send the obtained bytes to the UI Activity mHandler.obtainMessage(MESSAGE_READ, bytes,-1, buffer).sendToTarget();} catch(IOException e){ break;} } } /* Call this from the main Activity to send data to the remote device */ public void write(byte[] bytes){ try { mmOutStream.write(bytes);} catch(IOException e){ } } /* Call this from the main Activity to shutdown the connection */ public void cancel(){ try { mmSocket.close();} catch(IOException e){ } } }

      下載android 開(kāi)發(fā)心得word格式文檔
      下載android 開(kāi)發(fā)心得.doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        Android實(shí)習(xí)心得

        Android實(shí)習(xí)心得 剛開(kāi)始接觸Android感覺(jué)到它很有意思,在界面開(kāi)發(fā)上和web也可以形成了相通的架構(gòu),更加方便,視覺(jué)上也是非常的酷,在前期我通過(guò)的大量的Android SDK開(kāi)發(fā)范例大全中......

        Android開(kāi)發(fā)基本知識(shí)總結(jié)-Android課件

        Android開(kāi)發(fā)基礎(chǔ)教程 2015-4-13周一2CJ02 目錄 1.什么是Android? 2.Android應(yīng)用開(kāi)發(fā)環(huán)境 3.Gradle 4.模擬器Emulator 5.開(kāi)發(fā)一個(gè)安卓應(yīng)用程序的步驟 6.關(guān)于多個(gè)模擬器的問(wèn)......

        Android開(kāi)發(fā)工程師學(xué)習(xí)路線

        Android開(kāi)發(fā)工程師學(xué)習(xí)路線:手機(jī)產(chǎn)品開(kāi)發(fā)要從基礎(chǔ)開(kāi)發(fā)知識(shí)做起Android開(kāi)發(fā)工程師學(xué)習(xí)路線圖:想要做好手機(jī)產(chǎn)品開(kāi)發(fā)要先從基礎(chǔ)開(kāi)發(fā)知識(shí)做起,要學(xué)好基礎(chǔ)語(yǔ)言開(kāi)發(fā),即java語(yǔ)言開(kāi)發(fā),然......

        android開(kāi)發(fā)高薪就業(yè)培訓(xùn)(精選)

        android開(kāi)發(fā)高薪就業(yè)培訓(xùn) 每年從大學(xué)里走出來(lái)的應(yīng)屆畢業(yè)生足有600萬(wàn)之多,加上往屆畢業(yè)學(xué)生的求職競(jìng)爭(zhēng),他們的求職壓力非同一般。而且國(guó)內(nèi)經(jīng)濟(jì)增速放緩,不少公司正在處于休眠期,......

        Qualcomm平臺(tái)android開(kāi)發(fā)總結(jié)

        1、 高通平臺(tái)android開(kāi)發(fā)總結(jié). 7 1.1 搭建高通平臺(tái)環(huán)境開(kāi)發(fā)環(huán)境. 7 1.2 搭建高通平臺(tái)環(huán)境開(kāi)發(fā)環(huán)境. 7 1.2.1 高通android智能平臺(tái)概述. 7 1.2.1.1 什么是L4,REX,BREW,AMSS以......

        Android開(kāi)發(fā)優(yōu)勢(shì)總結(jié)(推薦五篇)

        Android開(kāi)發(fā)優(yōu)勢(shì)總結(jié) 來(lái)源:扣丁學(xué)堂 目前市場(chǎng)上的移動(dòng)端有兩種形式,一種是Android開(kāi)發(fā),另一種是ios開(kāi)發(fā),其中Android開(kāi)發(fā)方面的人員要多一些,今天我們就一起來(lái)看一下扣丁學(xué)堂Andr......

        android開(kāi)發(fā)實(shí)習(xí)報(bào)告總結(jié)

        Android開(kāi)發(fā)實(shí)習(xí)總結(jié) 有一名話(huà)叫做:不經(jīng)過(guò)風(fēng)雨,怎么見(jiàn)彩虹?我想改一下:不真正進(jìn)入社會(huì),怎能了解社會(huì)呢? 在這次實(shí)習(xí)中,給我收獲最大的是我覺(jué)得很多工作需要我去摸索和探討,要不怕吃......

        Android操作系統(tǒng)應(yīng)用開(kāi)發(fā)報(bào)告

        Android操作系統(tǒng)應(yīng)用開(kāi)發(fā)報(bào)告 項(xiàng)目名稱(chēng): 作者: 學(xué)號(hào): 完成時(shí)間:1. 開(kāi)發(fā)目的 本次應(yīng)用開(kāi)發(fā)的預(yù)期目的及相關(guān)功能介紹。2. 程序系統(tǒng) 對(duì)所開(kāi)發(fā)程序系統(tǒng)的介紹,包括總體結(jié)構(gòu),程序系統(tǒng)......