第一篇:有用的安卓總結(jié)
一、文字的滾動(dòng)顯示:
android:layout_height=“wrap_content” android:ellipsize=“marquee” android:focusable=“true” android:focusableInTouchMode=“true” android:marqueeRepeatLimit=“marquee_forever” android:singleLine=“true” android:textColor=“#ff0000” android:text=“教育局虧合同預(yù)計(jì)給他6語含有距被告人他還預(yù)計(jì)個(gè)體業(yè)戶 愚友好條約” /> 二、用意圖撥打電話 1:Intent intent = new Intent(“android.activity.intent.action”,Uri.parse(“tel:” + 數(shù)字.toString))); 2:添加權(quán)限 三、ListView 第一步: 定義BaseAdapter類,實(shí)現(xiàn)getCount()和getView方法,定義構(gòu)造函數(shù) private LayoutInflater inflater; public SecAdapter(Context context){ inflater = LayoutInflater.from(context);} 如: @Override public int getCount(){ // TODO Auto-generated method stub return 10;} @Override public View getView(int arg0, View arg1, ViewGroup arg2) { arg1 = inflater.inflate(R.layout.adapter_sec, null); return arg1;} 其中R.layout.adapter_sec是每一個(gè)Item的布局樣式 第二步: Activity中引用ListView布局,作為總體布局。定義并調(diào)用方法: private void initData(){ secAdapter = new SecAdapter(this); } private void initView(){ listView =(ListView)findViewById(R.id.listView1); listView.setAdapter(secAdapter); } ……………………………………………………….四、簡單傳值 Intent.putExtra(“key”,value); 獲取: XXX s = Intent.getXXXExtra(“key”); 五:Activity之間切換的動(dòng)畫效果 Intent intent = new Intent(MainActivity.this, Second.class); startActivity(intent); /* Activity的切換效果,也可以使用Android.R.anim.系統(tǒng)文件名 */ overridePendingTransition(R.anim.entert, R.anim.exit); [教程] 系統(tǒng)精簡總結(jié)(集大成者,呵呵) 集大成者, 系統(tǒng), 精簡 本帖最后由 colinma 于 2010-10-26 10:35 編輯 緊接我之前那篇(關(guān)于刷不刷機(jī)和刷機(jī)包的選擇),刷機(jī)后系統(tǒng)精簡的問題。首先,我本著這樣一個(gè)原則,該精簡的,我們用最殘忍的方式將他閹割;有用并且好用的一些系統(tǒng)自帶程序,能不刪掉的盡量留著,這個(gè)我會(huì)給大家一個(gè)參考(說明:刪除的時(shí)候有對應(yīng)后綴為.odex的同名文件一并刪除) 1.首先,我們要對一些東西毫不猶豫的下黑手。總結(jié)了一下論壇各位大俠的帖子,加上我自己切身的體驗(yàn),這些需要嚴(yán)格取締的程序如下(system/app/下的): ChinaUnicomCustomize.apk聯(lián)通的定制程序包(罪魁禍?zhǔn)祝?/p> HWAppMarket.apk智慧云(干脆咱們的安卓市場也改名叫安卓云吧,比這好用數(shù)十倍) HWTheme_Entertainment.apk 手機(jī)主題 娛樂 HWTheme_Social.apk手機(jī)主題 社交 HWTheme_Work.apk手機(jī)主題 工作 (以上三個(gè)臭皮匠連0.1個(gè)諸葛亮都頂不上) 91pandareade.apk91電子圖書 BaiduTiebar.apk百度貼吧 DocumentToGo.apkDataviz的office文件包,未注冊 Kingsoft_U8110.apk金山詞霸 LuckyMedia_U8110.apk手機(jī)樂媒 Readme.apk使用技巧 Renren_Android.apk人人網(wǎng) SinaWeibo_U8110.apk新浪微博 SinaWidget_U8110.apk新浪新聞 SNSAccount.apk開心網(wǎng) SNSService.apk開心網(wǎng)服務(wù) SogouInput_U8110.apk搜狗輸入法 Tonghuashun_U8110.apk同花順 UCWEB_U8110.apkUC瀏覽器 UpdataOnline.apk在線升級 VisualizationWallpapers.apk音樂動(dòng)態(tài)背景壁紙 YouTube.apkYouTube在線視頻 (以上都可以在官網(wǎng)或者論壇里找到最新版的下載安裝,當(dāng)然其中一些根本沒必要再裝,看個(gè)人興趣) 2.下來是一些可刪可不刪的程序,但建議刪除,AccountAndSyncSettings.apk google同步(反正我沒打算和他同步,怕一不留神又給大家?guī)怼皒x門”) Browser.apk瀏覽器(UC肯定比這好用) Email.apk郵件(尚郵比自帶的好用) Music.apk音樂播放器(天天動(dòng)聽等替代) SoundRecorder.apk錄音軟件(論壇里比這好的錄音軟件很多,功能更強(qiáng))Camera.apk照相機(jī)(Camera360比這效果好,但好像不能錄像,要用其他軟件) Maps.apk電子地圖(用大俠brut的修改版,支持離線地圖的)Vending.apk電子市場 MarketUpdater.apk市場更新 gtalkservice.apk跟下面的有一腿 Talk.apkgtalk TalkProvider.apk跟上面的有一腿,也好像跟電子市場有婚外戀 GoogleXXXXXXX.apk基于google的一些服務(wù) 說實(shí)話,google是個(gè)讓人又愛又狠的東西。首先,如果對google的任何服務(wù)都沒興趣,那建議全部刪除以google開頭的程序,還有電子市場和地圖;其次,如果對任何google的單項(xiàng)服務(wù)感興趣,那么有兩個(gè)程序必須留下:GoogleApps.apk和GoogleCheckin.apk,這都通過我一一驗(yàn)證的。(對電子市場情有獨(dú)鐘,除了留下上面的兩個(gè)以及Vending.apk和MarketUpdater.apk外,還要留下 gtalkservices.apk和TalkProvider.apk) 3.還是一些可刪可不刪的,但建議保留 Calculator.apk計(jì)算器 *Calendar.apk日歷 *CalendarProvider.apk日歷支持 *EmotionClockWidget.apk心情時(shí)鐘 FMradio.apk收音機(jī) *Gallery.apk圖片瀏覽器 LocalCityWeatherClock.apk我的天氣時(shí)鐘 MyBookmarks.apk我的書簽 *MyCalendar.ap我的日歷 MyEvent.apk我的日程 *MyMemo.apk我的便簽 MyVideo.apk我的視頻 *NotePad.apk記事本 *PhotoAblumWidget.apk我的相冊 WeatherClock.apk天氣時(shí)鐘 以上程序,論壇好多網(wǎng)友建議刪除用第三方軟件取代,但我這段時(shí)間試下來,感覺系統(tǒng)自帶的這些程序?qū)π來說那就是郎才配女貌,鮮花配牛糞——很實(shí)用兼容也很好的,其他第三方的反倒沒這些好好用,尤其是帶星號的那幾個(gè),論壇里我真沒找到有比原配的同類軟件更好用,更實(shí)用的。還有一些目前好像沒啥用,但以后可能會(huì)用上,比如語音支持的那個(gè)。 4.至于其他未提到的程序,無罪釋放,各位切記要對他們手下留情。當(dāng)然如果你殘忍的無可救藥你也可以牛刀小試,但記著告訴一下大家感受哦。 注:1..港版的參考以上,有的就刪掉,除此之外港版還有一些特有程序也可以就地正法,包括所有的輸入法,citylink開頭的,road開頭的,還有與 google街景相關(guān)的(街景,語音搜索什么的),這個(gè)大家都可以點(diǎn)一下安裝然后看一下具體是什么,因?yàn)槊Q我也忘記了。 2..港版里的launcher2是android的原生桌面,個(gè)人覺得并不好用,運(yùn)行程序多了會(huì)卡,再者主菜單里程序字體顯示不是很好,不如華為的桌面,所以建議大家不要嘗試了,直接刪掉算了。 以上可能有不全的地方,僅供各位機(jī)友參考,希望熱心的機(jī)友能補(bǔ)充和完善 Android學(xué)習(xí)心得 -----093380117 計(jì)算機(jī)應(yīng)用(1) 張峰 1.關(guān)于Activity 1.在一個(gè)Activity中使用多個(gè)View 如果把Activity看作MVC中的Control?它負(fù)責(zé)管理UI和接受事件(包括用戶的輸入),雖然說一個(gè)Activity通常對應(yīng)一個(gè)屏幕,但事實(shí)上,我們是可以只用一個(gè)Activity管理多個(gè)不同的View來實(shí)現(xiàn)簡單的邏輯。首先,我們增加一個(gè)新的資源描述layout/second.xml。 除了一個(gè)“Hello中國”以外,增加一個(gè)按鈕可以返回前一個(gè)界面。然后,在代碼中我們要為helloTwo增加兩個(gè)方法,setViewOneCommand和setViewTwoCommand,分別處理一下在不同界面時(shí),從資源里加載組件并為組件綁定一個(gè)事件處理器最后,我們需要在onCreate的時(shí)候,也就是啟動(dòng)后的main界面上設(shè)置一下按鈕事件處理器。2.還是回到正道上,多個(gè)Activity之間的跳轉(zhuǎn) Android中提供一個(gè)叫Intent的類來實(shí)現(xiàn)屏幕之間的跳轉(zhuǎn),按文檔的說法,似乎他們也建議采用這種方法,Intent的用法比較復(fù)雜,現(xiàn)在我先看看它最簡單的用法。 這里的跳轉(zhuǎn)功能用Intent來操作,它的最簡單用法就是用函數(shù)setClass()設(shè)置跳轉(zhuǎn)前后兩個(gè)Activity類的實(shí)例,然后調(diào)用Activity自己的startActivity(intent)即可。最后一句finish()表示將當(dāng)前Activity關(guān)掉(如果不關(guān)掉會(huì)如何?你可以自己試一下看效果,事實(shí)上有時(shí)我們是不需要關(guān)掉當(dāng)前Activity的)。 然后,我們同樣弄一個(gè)Activity類HelloThreeB,代碼與前面的差不多,只是將setClass的兩個(gè)參數(shù)反一下,這樣就可以簡單地實(shí)現(xiàn)在兩個(gè)Activity界面中來回切換的功能了。 2.關(guān)于 Intent的使用 Intent分為兩大類,顯性的(Explicit)和隱性的(Implicit)。一般來說,intent要定位事件的目的地,無外乎需要以下幾個(gè)信息: 1.種類(category),比如我們常見的 LAUNCHER_CATEGORY 就是表示這是一類應(yīng)用程序。 2.類型(type),在前面的例子中沒用過,表示數(shù)據(jù)的類型,這是隱性Intent定位目標(biāo)的重要依據(jù)。 3.組件(component),前面的例子中用的是setClass,不過也可以用setComponent來設(shè)置intent跳轉(zhuǎn)的前后兩個(gè)類實(shí)例。4.附加數(shù)據(jù)(extras),在ContentURI之外還可以附加一些信息,它是Bundle類型的對象。 其實(shí),如果是在一個(gè)應(yīng)用內(nèi)部,這種隱性的intent實(shí)在有點(diǎn)別扭,個(gè)人覺得,這種松藕合的實(shí)現(xiàn)方法,只適用于那些較大的系統(tǒng)或者多個(gè)不同的應(yīng)用之間的調(diào)用,可手機(jī)上又有什么“較大”的系統(tǒng)呢?無非是可以與不同來源的多個(gè)應(yīng)用之間方便地互操作而已,那么會(huì)是什么樣的場景呢?比如,給QQ好友發(fā)送gmail郵件,用GoogleMap查找QQ好友所在的位置?看上去挺不錯(cuò)的。 關(guān)于這個(gè)ContentProvider,其實(shí)還有話說,它主要是的那些看似數(shù)據(jù)庫操作的方法我們都沒真正去實(shí)現(xiàn)呢。不過今天就到這里了,等下回再去研究吧。 3.關(guān)于ListActivity 準(zhǔn)備一個(gè)List對象并借助Adapter就可以構(gòu)造出一個(gè)列表。重載onListItemClick方法可以響應(yīng)選擇事件,利用第一個(gè)參數(shù)可以訪問到這個(gè)ListView實(shí)例以得到選中的條目信息。這里有一點(diǎn)要說明的,就是如果更簡單的話,其實(shí)連那個(gè)setContentView都可以不要了,Android也會(huì)自動(dòng)幫我們構(gòu)造出一個(gè)全屏的列表。但是本例中我們需要一個(gè)TextView來顯示選中的條目,所以我們需要一個(gè)layout.mainb描述一下這個(gè)列表窗口。 這里需要注意的是那個(gè)ListView的ID,是系統(tǒng)自定義的android:list,不是我們隨便取的,否則系統(tǒng)會(huì)說找不到它想要的listview了。然后,在這個(gè)listview之外,我們又增加了一個(gè)TextView,用來顯示選中的條目。 再來說說這里用到的ArrayAdapter,它的構(gòu)造函數(shù)中第二個(gè)參數(shù)是一個(gè)資源ID,ArrayAdapter的API文檔中說是要求用一個(gè)包含TextView的layout文件,平臺用它來顯示每個(gè)選擇條目的樣式,這里的取值是R.layout.list_row,所以,我們還有一個(gè)list_row.xml文件來描述這個(gè)布局,相當(dāng)簡單。 從ArrayAdapter上溯到BaseAdapter,發(fā)現(xiàn)還有幾個(gè)同源的Adapter也應(yīng)該可以使用,象SimpleAdapter和CursorAdapter,還是做個(gè)例子來實(shí)驗(yàn)一下吧。 然后,在HelloTwoB中的onCreate函數(shù)中,修改代碼,有幾個(gè)不同:items的元素是HashMap實(shí)例,這是一點(diǎn)變化,然后構(gòu)造函數(shù)除了要求items以外,還要求提供一個(gè)string[]來說明用hash表中的哪個(gè)字段顯示在列表中,而后是一個(gè)資源ID的數(shù)組。 因?yàn)閱渭兊腃ursorAdapter是抽象類,所以我用的是它的子類SimpleCursorAdapter,很好理解,先用ContentResolver查詢通訊簿得到一個(gè)游標(biāo),然后告訴SimpleCursorAdapter要用其中的People.NAME作為顯示項(xiàng)來構(gòu)造出一個(gè)adapter即可。4.關(guān)于Dialog 注意到android.app包下除了Dialog(可用于制作復(fù)雜的對話框)以外,還包括了幾個(gè)系統(tǒng)定義好的對話框類,如DatePickerDialog、TimePickerDialog及AlertDialog。 其中AlertDialog我上回用過一次,基本上就那樣子了,今天看看另外兩個(gè)對話框的使用吧。 很簡單的,無非是需要一個(gè)OnDateSetListener接口的實(shí)現(xiàn)而已,在它里面的dateSet方法中就可以得到選擇的日期了。而TimePickerDialog與DatePickerDialog使用如出一轍。 看看另一個(gè)ProgressDialog的用法吧,這個(gè)類與AlertDialog一樣包含了多個(gè)static的方法,所以使用起來是非常方便的。比如說,如果我們需要用它來表示一個(gè)長時(shí)間的操作。 5.關(guān)于Service和Notification 大略地看了一下android.app下的Service類,覺得它與Activity非常相似,只是要注意幾個(gè)地方: 1.生命周期,Service的從onCreate()->onStart(int,Bundle)->onDestroy()顯得更為簡單。但是它的onStart是帶參數(shù)的,第一個(gè)ID可用來標(biāo)識這個(gè)service,第二個(gè)參數(shù)顯示是用來傳遞數(shù)據(jù)的了。比較Activity,傳遞數(shù)據(jù)的Bundle是在onCreate就帶進(jìn)入的。 2.Service的啟動(dòng)由Context.startService開始,其實(shí)Activity或者Service都是Context的派生類。結(jié)束于Context.stopService()或者它自己的stopSelf()。 3.Service還有一個(gè)與Activity不一樣的是它可以由另一個(gè)Context去綁定一個(gè)已存在的Service。就是這個(gè)方法Context.bindService(),被綁定的Service要求是已經(jīng)onCreate了但可以沒有onStart。在Service類中有個(gè)抽象方法getBinder()可以得到這個(gè)IBinder對象。關(guān)于這方面的細(xì)節(jié),以后再看,這里只做個(gè)記錄罷。 4.與Service有關(guān)的還有一個(gè)安全的問題,可以在AndroidManifest.xml中用 6.GridView與ImageView 簡單一點(diǎn)吧,就瞧瞧那個(gè)Grid的效果,Android提供了一個(gè)GridView,不過從APIDemo中看來,它似乎與PC上的GRID差別還是挺大的,更像那個(gè)IconView的感覺。不知道Android中如何實(shí)現(xiàn)表格界面?雖然在移動(dòng)終端上,表格一般不會(huì)有誰使用,大家似乎更傾向于使用ListView,而Android對于ListView則有更簡單的實(shí)現(xiàn)ListActivity。 很簡單,只要重載幾個(gè)方法就可以了,關(guān)鍵是那個(gè)getView方法,它負(fù)責(zé)構(gòu)建出每個(gè)單元格中的對象實(shí)例。這里我們構(gòu)造的是一個(gè)ImageView實(shí)例。 然后就是同樣的將這個(gè)Adapter賦給GridView即可,大家可以看看效果,注意在做這個(gè)例子前,先放幾個(gè)小圖片到res/drawable目錄下,buildproject一下就可以得到那個(gè)R.drawable.a了(這里的a是圖像文件名,如a.png)。 在getView方法中我們使用了ImageView類,這又是一個(gè)widget。除了上面用到的幾個(gè)方法以外,還有以下幾個(gè)方法值得注意: 與圖像來源有關(guān)的方法,我們只用了資源文件的方式。 還是習(xí)慣性跑題了,其實(shí),我是想通過我對這個(gè)類的無數(shù)次Debugger跟進(jìn),說說它的多線程異步處理的解決策略的。他的基本策略如下: 1.當(dāng)你實(shí)例化一個(gè)AsyncQueryHandler類時(shí)(包括其子類...),它會(huì)單件構(gòu)造一個(gè)線程(后面會(huì)詳述...),這個(gè)線程里面會(huì)構(gòu)建一個(gè)消息循環(huán)。 2.獲得該消息循環(huán)的指針,用它做參數(shù)實(shí)例化另一個(gè)Handler類,該類為內(nèi)部類。至此,就有了兩個(gè)線程,各自有一個(gè)Handler來處理消息。3.當(dāng)調(diào)用onXXX的時(shí)候,在XXX函數(shù)內(nèi)部會(huì)將請求封裝成一個(gè)內(nèi)部的參數(shù)類,將其作為消息的參數(shù),將此消息發(fā)送至另一個(gè)線程。4.在該線程的Handler中,接受該消息,并分析傳入的參數(shù),用初始化時(shí)傳入的ContentResolver進(jìn)行XXX操作,并返回Cursor或其他返回值。 5.構(gòu)造一個(gè)消息,將上述返回值以及其他相關(guān)內(nèi)容綁定在該消息上,發(fā)送回主線程。 6.主線程默認(rèn)的AsyncQueryHandler類的handleMessage方法(可自定義,但由于都是內(nèi)部類,基本沒有意義...)會(huì)分析該消息,并轉(zhuǎn)發(fā)給對應(yīng)的onXXXComplete方法。 7.用戶重寫的onXXXComplete方法開始工作。 這就是它偷偷摸摸做過的事情,基本還是很好理解的。我唯一好奇的是它的線程管理方式,我猜測他是用的單件模式。第一個(gè)AsyncQueryHandler的實(shí)例化會(huì)導(dǎo)致創(chuàng)建一個(gè)線程,從此該線程成為不死老處男,所有的ContentResolver相關(guān)的工作,都由該線程統(tǒng)一完成。個(gè)人覺得這種解決方式很贊。本來這個(gè)線程的生命周期就很難估量,并且,當(dāng)你有一個(gè)ContentProvider的請求的時(shí)候,判斷你會(huì)做更多的類似操作并不過分。就算錯(cuò)了,花費(fèi)的也只是一個(gè)不死的線程(與進(jìn)程同生死共存亡...),換來的卻是簡單的生命周期管理和無數(shù)次線程生死開銷的節(jié)約。同時(shí)另外一個(gè)很重要的問題,他并會(huì)涉及到單件中數(shù)據(jù)同步的問題,每個(gè)類都有各自的Handler類,彼此互不干擾,分發(fā)可以分別進(jìn)行。當(dāng)多個(gè)數(shù)據(jù)請求的時(shí)候,在同一個(gè)ContentResolver上進(jìn)行的可能微乎其微,這就避免了堵塞??偠灾?,這套解決辦法和Android的整體設(shè)計(jì)算是天作之合了。 所以建議,如果你有什么非ContentProvider操作,卻需要異步多線程執(zhí)行的話,模擬一套,是個(gè)不錯(cuò)的策略,當(dāng)然,具體情況具體分析,生搬硬套是學(xué)不好馬列主義的。 7.顯示控件使用 Android的界面顯示同樣也是基于控件的。通常是用View(包括ViewGroup)控件配上XML的樣式來做的。具體細(xì)節(jié)不想說了,可以參考 Samples里的ApiDemos/View,和View的Doc,以及Implementing a UI這篇Doc。其他還有很多,感覺算是SDK講述的最多的內(nèi)容。 從控件的使用上,和網(wǎng)頁的設(shè)計(jì)類似,盡量用parent_width之類的抽象長度,用Theme來做風(fēng)格,抽取所有的字串等信息做本地化設(shè)計(jì)。相關(guān)內(nèi)容參看Implementing a UI就好。 一類比較重要的是數(shù)據(jù)綁定控件。如果做過ASP.Net會(huì)從中看到很多類似的地方。一個(gè)支持?jǐn)?shù)據(jù)綁定的控件,比如ListView??梢酝ㄟ^一個(gè) ListAdapter綁定到一個(gè)數(shù)據(jù)源上。ListAdapter是一個(gè)抽象類,主要的實(shí)現(xiàn)類包括SimpleAdapter和 SimpleCursorAdapter。前者是綁定一個(gè)靜態(tài)的Array,后者是綁定一個(gè)動(dòng)態(tài)的Cursor。Cursor前面說過,是一個(gè)指向數(shù)據(jù)源的隨機(jī)迭代器,將View綁定到Cursor通常要設(shè)置這樣幾個(gè)參數(shù)。一個(gè)是每一行的樣式,稱作Row Layout,其實(shí)就是一個(gè)普通的Layout的XML文件。還有就是一個(gè)列和現(xiàn)實(shí)控件的對應(yīng)關(guān)系。那個(gè)控件顯示哪個(gè)列的值,這是需要配置的。為了定制一個(gè)良好的數(shù)據(jù)顯示控件,最簡單你可以定制很PP的Row Layout,復(fù)雜一點(diǎn)就是可以重載綁定控件View,或者是適配器ListAdapter。如果是一個(gè)數(shù)據(jù)顯示密集的應(yīng)用,且你對UI有些追求,這個(gè)工作估計(jì)是必不可少的。 一個(gè)主要用于顯示數(shù)據(jù)內(nèi)容的Activity,可以選擇派生自ListActivity。它提供了一個(gè)具有ListView 的Layout,還有simple_list_item_1, simple_list_item_2, two_line_list_item等默認(rèn)的Row Layout,還有一些比較不錯(cuò)的API,和可供響應(yīng)選擇Item的事件??梢詽M足你比較基礎(chǔ)的需求。如果你覺得只有一個(gè)ListView的界面太突兀,你可以為這個(gè)ListActivity指定一個(gè)Layout,需要注意的是,你需要提供一個(gè)id為@android:id/list的ListView控件,避免Activity在內(nèi)部偷偷尋找該控件的時(shí)候失敗。 除了這些要求,做好UI還有注意易用性和效率??旖萱I是一個(gè)比較不錯(cuò)的選擇,在 Activity中調(diào)用setDefaultkeyMode(SHORTCUT_DEFAULT_KEYS),可以開啟快捷鍵模式,然后你可以將菜單綁定到指定快捷鍵上就OK了。個(gè)人覺得Tip也是一個(gè)比較重要的東西,但目前觀察看來,這個(gè)東西只能夠自己提供了。界面的動(dòng)態(tài)性有時(shí)候是不可避免的,比如說菜單就是一個(gè)需要經(jīng)常根據(jù)光標(biāo)位置提供不同的選項(xiàng)。這個(gè)東西Android很人道的考慮到了,你可以參看NodeList這個(gè)Sample。它采取的應(yīng)該是一個(gè)靜態(tài)模擬動(dòng)態(tài)的方式,這樣有助于提高速度。你也可以利用ViewInflate,動(dòng)態(tài)從一個(gè)XML創(chuàng)建一個(gè)控件。成本據(jù)Doc說很大,不到萬不得已不要使用。 8.Intent消息傳遞 在前面寫Android的ContentProvider時(shí)候,可以看到那是基于觀察者模式的一個(gè)消息傳遞方法。每一個(gè)Cursor、ContentResolver做為一個(gè)小的注冊中心,相關(guān)觀察者可以在這個(gè)中心注冊,更新消息由注冊中心分發(fā)給各個(gè)觀察者。而在MFC或Winform中,都會(huì)形成一個(gè)消息網(wǎng),讓消息在網(wǎng)中流動(dòng),被各節(jié)點(diǎn)使用、吃掉或者在出口死掉。 相比之下,我個(gè)人覺得基于Intent的Android核心消息傳遞機(jī)制是有所不同的。它應(yīng)該會(huì)有一個(gè)全局性的注冊中心,這個(gè)注冊中心是隱性的,整個(gè)Android系統(tǒng)中就那么一個(gè)。所有的消息接收者,都被隱形的注冊到這個(gè)中心。包括Activity,Service和IntentReceiver。其實(shí)說隱形注冊是不確切的,所有注冊都還是我們手動(dòng)告訴注冊中心的,只是與傳統(tǒng)的方式不一樣,我們通常不是通過代碼,而是通過配置文件來做。在應(yīng)用的Manifest中,我們會(huì)為一些Activity或Service添加上Intent-filter,或在配置文件中添加 當(dāng)程序有一個(gè)消息希望發(fā)出去的時(shí)候,它需要將消息封裝成一個(gè)Intent,并發(fā)送。這時(shí)候,應(yīng)該是有一個(gè)統(tǒng)一的中心(恩,有可能Android底層實(shí)現(xiàn)的時(shí)候不是,但簡單這樣看是沒問題的...)接受到這個(gè)消息,并對它進(jìn)行解析、判定消息類型(這個(gè)步驟降低了耦合...),然后檢查注冊了相匹配的filter或receiver,并創(chuàng)建或喚醒接收者,將消息分發(fā)給它。這樣做有很多好處。雖然這種傳遞有的時(shí)候不如點(diǎn)對點(diǎn)的傳遞快(這有些需要速度的地方,我們看到Android會(huì)通過直接通信來做),但有時(shí)候又因?yàn)樗唤?jīng)過一跳(姑且這么叫吧...),比復(fù)雜的流動(dòng)又要更快。更重要的是,它耦合性低,在手機(jī)平臺這種程序組件多變的條件下使用十分適合。并且它可以很容易實(shí)現(xiàn)消息的精確或模糊匹配,彈性很大。(我個(gè)人曾想在開發(fā)一個(gè)C++二次平臺的時(shí)候引入這樣的機(jī)制,但在C++中,建立一套完整的數(shù)據(jù)marshal機(jī)制不容易,相比之下,用java來做會(huì)簡單很多...) 恩,廢話說了很多,具體講講Android中Intent的使用。當(dāng)你有一個(gè)消息需要傳遞,如果你明確知道你需要哪個(gè)Activity或者其他Class來響應(yīng)的話,你可以指定這個(gè)類來接受該消息,這被稱為顯性發(fā)送。你需要將Intent的class屬性設(shè)置成目標(biāo)。這種情況很常見,比如startActivity的時(shí)候,會(huì)清楚當(dāng)前Activity完了應(yīng)該是哪個(gè)Activity,那就明確的發(fā)送這個(gè)消息。 但是,有的時(shí)候你并不確定你的消息是需要具體哪個(gè)類來執(zhí)行,而只是知道接收者該符合哪些條件。比如你只需要有一個(gè)接收者能顯示用戶所選的數(shù)據(jù),而不想制定某個(gè)具體的方法,這時(shí)候你就需要用到隱形發(fā)送(傳統(tǒng)上,我們可能會(huì)考慮用多態(tài),但顯然這種方式更為靈活...)。在Android中,你可以為Intent指定一個(gè)action,表示你這個(gè)指令需要處理的事情。系統(tǒng)為我們定義了很多Action類型,這些類型使系統(tǒng)與我們通信的語言(比如在Activity里面加一個(gè)Main的filter,該activity就會(huì)做成該應(yīng)用的入口點(diǎn)),當(dāng)然你也可以用于你自己的應(yīng)用之間的通信(同樣當(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í)候是不夠的,在Android中我們還可以指定catalog信息和type/data信息,比如所有的顯示數(shù)據(jù)的Activity,可能都會(huì)響應(yīng)View action。但很多與我們需要顯示的數(shù)據(jù)類型不一樣,可以加一個(gè)type信息,明確的指出我們需要顯示的數(shù)據(jù)類型,甚至還可以加上一個(gè)catalog信息,指明只有你只有按的是“中鍵”并發(fā)出這樣的消息才響應(yīng)。從上面可以看出,Android的Intent可以添加上class, action, data/type, catalog等消息,注冊中心會(huì)根據(jù)這些信息幫你找到符合的接收者。其中class是點(diǎn)對點(diǎn)的指示,一旦指明,其他信息都被忽略。Intent中還可以添加key/value的數(shù)據(jù),發(fā)送方和接收方需要保持統(tǒng)一的key信息和value類型信息,這種數(shù)據(jù)的marshal在java里做,是不費(fèi)什么力氣的。 Android的Intent發(fā)送,可以分成單播和廣播兩種。廣播的接收者是所有注冊了的符合條件的IntentReceiver。在單播的情況下,即使有很多符合條件的接收者,也只要有一個(gè)出來處理這個(gè)消息就好(恩,個(gè)人看法,沒找到確切條款或抉擇的算法,本來想實(shí)驗(yàn)一下,沒來得及...),這樣的情況很容易理解,當(dāng)你需要修改某個(gè)數(shù)據(jù)的時(shí)候,你肯定不會(huì)希望有十個(gè)編輯器輪流讓你來處理。當(dāng)廣播不是這樣,一個(gè)receiver沒有辦法阻止其他receiver進(jìn)行對廣播事件的處理。這種情況也很容易理解,比如時(shí)鐘改變了,鬧鐘、備忘錄等很多程序都需要分別進(jìn)行處理。在自己的程序的使用中,應(yīng)該分清楚區(qū)別,合理的使用。 9.ContentProvider數(shù)據(jù)模型 數(shù)據(jù)庫操作 從我目前掌握的知識來看,SQLite比較輕量(沒有存儲過程之類的繁雜手段),用起來也比較簡單。實(shí)例化一個(gè)SQLiteDatabase類對象,通過它的APIs可以搞定大部分的操作。從sample中看,Android中對db的使用有一種比較簡單的模式,即派生一個(gè) ContentProviderDatabaseHelper類來進(jìn)行SQLiteDatabase對象實(shí)例的獲取工作?;旧?,ContentProviderDatabaseHelper類扮演了一個(gè)singleton的角色,提供單一的實(shí)例化入口點(diǎn),并屏蔽了數(shù)據(jù)庫創(chuàng)建、打開升級等細(xì)節(jié)。在ContentProvider中只需要調(diào)用ContentProviderDatabaseHelper的openDatabase方法獲取SQLiteDatabase的實(shí)例就好,而不需要進(jìn)行數(shù)據(jù)庫狀態(tài)的判斷。URI 像進(jìn)行數(shù)據(jù)庫操作需要用SQL一樣,對ContentProivder進(jìn)行增刪改查等操作都是通過一種特定模式的URI來進(jìn)行的(ig:content: //provider/item/id),URI的能力與URL類似,具體細(xì)節(jié)可以查看SDK。建立自己的ContentProvider,只需要派生 ContentProivder類并實(shí)現(xiàn)insert, delete, update等抽象函數(shù)即可。在這些接口中比較特殊的是getType(uri)。根據(jù)傳入的uri,該方法按照MIME格式返回一個(gè)字符串(==!沒聽過的詭異格式...)唯一標(biāo)識該uri的類型。所謂uri的類型,就是描述這個(gè)uri所進(jìn)行的操作的種類,比如content://xx/a與 content://xx/a/1不是一個(gè)類型(前者是多值操作,后者是單值),但content://xx/a/1和content://xx/a/2 就會(huì)是一個(gè)類型(只是id號不同而已)。 在ContentProvider通常都會(huì)實(shí)例化一個(gè)ContentURIPraser來輔助解析和操作傳入的URI。你需要事先(在static域內(nèi))為該ContentURIPraser建立一個(gè)uri的語法樹,之后就可以簡單調(diào)用 ContentURIPraser類的相關(guān)方法進(jìn)行uri類型判斷(match方法),獲取加載在uri中的參數(shù)等操作。但我看來,這只是在使用上簡化了相關(guān)操作(不然就需要自己做人肉解析了...),但并沒有改變類型判定的模式。你依然需要用switch...case...對uri的類型進(jìn)行判斷,并進(jìn)行相關(guān)后續(xù)的操作。從模式來看,這樣無疑是具有強(qiáng)烈的壞味道,類似的switch...case...代碼要出現(xiàn)N此,每次一個(gè) ContentProvider做uri類型的增減都會(huì)需要遍歷修改每一個(gè)switch...case...,當(dāng)然,如果你使用模式(策略模式...)進(jìn)行改造對手機(jī)程序來說無疑是崩潰似的(類型膨脹,效率降低...),所以,只能是忍一忍了(恩,還好不會(huì)擴(kuò)散到別的類中,維護(hù)性上不會(huì)有殺人性的麻煩...)。增刪改查 ContentProvider 和所有數(shù)據(jù)源一樣,向外提供增刪改查操作接口,這些都是基于uri的指令。進(jìn)行insert操作的時(shí)候,你需要傳入一個(gè)uri和 ContentValues。uri的作用基本就限于指明增減條目的類型(從數(shù)據(jù)庫層面來看就是table名),ContentValues是一個(gè) key/value表的封裝,提供方便的API進(jìn)行插入數(shù)據(jù)類型和數(shù)據(jù)值的設(shè)置和獲取。在數(shù)據(jù)庫層面上來看,這應(yīng)該是column name與value的對應(yīng)。但為了屏蔽ContentProvider用戶涉及到具體數(shù)據(jù)庫的細(xì)節(jié),在Android的示例中,用了一個(gè)小小的模式。它為每一個(gè)表建一個(gè)基于BaseColumn類的派生類(其實(shí)完全可以不派生自BaseColumn,特別當(dāng)你的表不基于默認(rèn)的自動(dòng)id做主鍵的時(shí)候),這個(gè)類通常包括一個(gè)描述該表的ContentURI對象和形如 public static final TITLE = “title”這樣的column到類數(shù)據(jù)的對應(yīng)。從改變上角度來看,你可以修改column的名字而不需要更改用戶上層代碼,增加了靈活性。insert方法如果成功會(huì)返回一個(gè)uri,該uri會(huì)在原有的uri基礎(chǔ)上增加有一個(gè)row id。對于為什么使用row id而不是key id我想破了腦袋。到最后,我發(fā)現(xiàn)我傻了,因?yàn)镃ontentProvider不一定需要使用數(shù)據(jù)庫,使用數(shù)據(jù)庫對應(yīng)的表也可以沒有主鍵,只有row id,才能在任何底層介質(zhì)下做索引標(biāo)識。 但,基于row id在刪除和修改操作是會(huì)造成一定的混亂。刪除和修改操作類似。刪除操作需要傳入一個(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和key id所指函數(shù)不一致的時(shí)候,你聽誰的?示例代碼中的做法是完全無視r(shí)ow id(無語...),如此野蠻的方式我估計(jì)也只能在示例中出現(xiàn),在實(shí)際中該如何用,恩,我也不知道。幸運(yùn)的是,我看了下上層對 ContentProvider的刪除操作,其實(shí)都不會(huì)直接進(jìn)行,而是通過調(diào)用Cursor的delete方法進(jìn)行,在這前提下,我想Cursor會(huì)處理好這些東西吧。 最后一個(gè)操作是查詢操作,可以想見,查詢的參數(shù)是最多的,包括uri和一組條件參數(shù)。條件參數(shù)類型和標(biāo)準(zhǔn)的sql類似,包括 sort, projection 之類的。從這些參數(shù)到sql語句的生成,可以尋求QueryBuilder類的幫助,它提供了一組操作接口,簡化了參數(shù)到sql的生成工作,哪怕你不懂 sql都完全沒有問題(這話說的我自己都覺得有點(diǎn)懸...)。查詢返回一個(gè)Cursor。Cursor是一個(gè)支持隨機(jī)讀寫的指針,不僅如此,它還提供了方便的刪除和修改的API,是上層對ContentProvider進(jìn)行操作一個(gè)重要對象,需要仔細(xì)掌握(Cursor還可以綁定到view上,直接送顯,并與用戶進(jìn)行交互,真是程序越往上,封裝越好,工作越機(jī)械沒有復(fù)雜性了...)。數(shù)據(jù)模型 在與界面打交道的Cursor、ContentResolver等數(shù)據(jù)操作層中,大量采用觀察者模式建立數(shù)據(jù)層與顯示層的聯(lián)系。一個(gè)顯示層的視圖,可以做成某一種觀察者注冊到Cursor或ContentResolver等數(shù)據(jù)中間層中,在實(shí)現(xiàn)底層ContentProvider中,我們需要特別注意在對數(shù)據(jù)進(jìn)行修改操作(包括增刪改...)后,調(diào)用相應(yīng)類型的notify函數(shù),幫助表層對象進(jìn)行刷新(還有一種刷新方式是從一個(gè)view發(fā)起的)??梢钥吹?Android的整體數(shù)據(jù)顯示框架有點(diǎn)像MVC的方式。Cursor、ContentResolver相當(dāng)于控制層,數(shù)據(jù)層和顯示層的交互通過控制層來掌管,而且控制層很穩(wěn)定不需要特別定制,通常工作只在定制數(shù)據(jù)層和顯示層空間,還是比較方便和清晰的。 10.學(xué)習(xí)感想 通過這學(xué)期對安卓的學(xué)習(xí),大概了解了以上一些知識,對安卓有了初步的了解,這幾個(gè)月給我的東西我想用有形的和無形的兩部分概敘,形的當(dāng)然就是技術(shù)水平的長進(jìn),雖然其中肯定有很多的不足,相信慢慢會(huì)體會(huì)到。 原裝軟件: AccountAndSyncSettings.apk.........賬戶與同步設(shè)置 AIMail_Android_V332a.apk.........手機(jī)郵箱 ApplicationsProvider.apk...........應(yīng)用程序支持服務(wù) BaiduSeach-v1.0.3.32_643e.apk.....百度快搜 Balance_ball_V128.apk.....平衡滾球 Bluetooth.apk...............藍(lán)牙 Bowling_V116.apk.....保齡球?qū)?zhàn) Browser.apk..........瀏覽器 Calculator.apk..............計(jì)算器 Calendar.apk................日程表 CalendarProvider.apk........日程表存儲 Camera.apk...........相機(jī) CertInstaller.apk...........證書安裝 CIT.apk..............用戶接口測試 ClockSet.apk................時(shí)鐘 Contacts.apk................聯(lián)系人 ContactsProvider.apk........聯(lián)系人存儲 Conversion.apk..............轉(zhuǎn)換工具 DeviceInfo.apk..............設(shè)備信息 Dictionary.apk..............詞典 DocViewer_STD...............Polaris 文檔閱讀器 DownloadProvider.apk........下載管理器 DrmProvider.apk.............受DRM 保護(hù)的內(nèi)容的存儲 DrmService.apk..............DRM 保護(hù)服務(wù) Email.apk............電子郵件 FileManager.apk.............文件管理器 FilePicker.apk..............選擇文件 FMRadio.apk..........收音機(jī) Gallery.apk..........7庫 GlobalSearch.apk............快速搜索框 GoogleSearch.apk............谷歌搜索 GPSUI.apk............GPS 界面,用途未知 HTMLViewer.apk..............HTML 查看器 kaixin_1.0.2.apk---開心網(wǎng) LatinIME.apk................Android 鍵盤 Launcher.apk................主屏幕 LeMei.apk............樂媒 Lunar.apk............農(nóng)歷 MediaProvider.apk...........媒體存儲 Mms.apk..............信息 Mob.apk..............手機(jī)營業(yè)廳 Motorboat_V110.apk------------------------急速摩托艇 Music.apk............音樂 NotePad.apk..........記本 PackageInstaller.apk........打包安裝程序 Palmebool_5_1_03.apk-----------------------愛讀掌閱 PekAllIME.apk...............京聯(lián)云輸入法 Phone.apk............撥號器 PhoneLocationProvider.apk..........本地?fù)芴柶鞔鎯?PicoTts.apk..........語音程序 PinyinIME.apk...............谷歌拼音輸入法 ProfileSetting.apk..........情景模式 QQ_K-Touch_W606.apk---------------------手機(jī)QQ QQBrowser_W606.apk-----------------------QQ 瀏覽器 QQLord2009_W606.apk---------------------QQ 斗地主 renren_android_1.5.apk----------------------人人網(wǎng) ServiceGuide.apk-----------------------------服務(wù)指南 Settings.apk................設(shè)置 SettingsProvider.apk........設(shè)置存儲 SetupWizard.apk.............設(shè)置向?qū)С绦?SogouInput_oem_w606.apk------------------搜狗輸入法 SoundRecorder.apk...........錄音機(jī) Stk.apk..............USIM 卡應(yīng)用 Straightflush_SC_VER_7_20_06.apk-------------------同花順 SuperUser.apk...............授權(quán)管理 TelephonyProvider.apk..............撥號器存儲 Tetris_V117.apk對戰(zhàn)俄羅斯方塊 TtsServices.apk.............GoogleTTS 語音庫服務(wù) UHotline.apk................聯(lián)通熱線 UserDictionaryProvider.apk.........用戶字典 VoiceRecorder.apk...........錄音機(jī) V.p.n.Services.apk..........虛擬專用網(wǎng)服務(wù) Weather.apk-天氣預(yù)報(bào) WeatherWidget----------------------------天氣預(yù)報(bào)桌面小工具 Weibo2.0.4.apk---------------------------新浪微博 Wo.apk...............沃3G WordMemo.apk................背單詞 WoStore_v16_v101.apk--------------------------沃商店 其他: 1、.android_secure 是官方app2sd 的產(chǎn)物,刪了之后裝到sd 卡中的軟件就無法使用了 2、.Bluetooth 顧名思義,用藍(lán)牙之后就會(huì)有這個(gè)。 3、.mobo 顧名思義,Moboplayer 的緩存文件。 4、.QQ 顧名思義,QQ 的緩存文件。 5、.quickoffice 顧名思義,quickoffice 的緩存文件。 6、.switchpro 顧名思義,switchprowidget(多鍵開關(guān))的緩存文件。 7、.ucdlres 顧名思義,UC 迅雷的緩存文件。 8、albumart 音樂專輯封面的緩存文件夾。 9、albums 相冊縮略圖的緩存文件夾。 10、Android 比較重要的文件夾,面是一些程序數(shù)據(jù),比如google map 的地圖緩存。 11、backups 一些備份文件,比如聯(lián)系人導(dǎo)出到SD 卡時(shí)會(huì)導(dǎo)入到此文件夾 12、baidu 顧名思義,掌上百度、百度輸入法之類程序的緩存文件夾。 13、bugtogo 系統(tǒng)出現(xiàn)問題的時(shí)候會(huì)形成一些報(bào)告文件,存放于此文件夾。" 14、cmp 個(gè)人初步判斷是音樂的緩存文件夾。 15、data 同樣是緩存數(shù)據(jù)的文件夾,與Android 性質(zhì)類似。 16、DCIM 相機(jī)的緩存文件夾,里面是你照的照片。 17、documents Documents To Go 的相關(guān)文件夾。 18、etouch 易行的緩存文件夾。 19、extracted androzip 等解壓縮軟件默認(rèn)的解壓目錄。20、gameloft 顧名思義,gameloft 游戲數(shù)據(jù)包存放的文件夾。 21、handcent 顧名思義handcent(超級短信)數(shù)據(jù)文件夾。* 22、handyCurrency 貨幣匯率相關(guān)的文件夾,裝了handycalc(科學(xué)計(jì)算器)之后才會(huì)有。 23、ireader 顧名思義,ireader 的緩存文件夾。 24、KingReader 顧名思義,開卷有益的緩存文件夾。 25、LazyList Applanet(黑市場)的緩存目錄,也許和其他序也有關(guān),暫時(shí)不太清楚。 26、LOST.DIR 卡上丟失或出錯(cuò)的文件會(huì)跑這里,此目錄無用,刪了會(huì)自動(dòng)生成。 27、moji 顧名思義,墨跡天氣的緩存目錄。 28、MusicFolders poweramp 產(chǎn)生的緩存文件夾。 29、openfeint 顧名思義,openfeint 的緩存文件夾。30、Picstore 圖片瀏覽軟件建立的一個(gè)目錄。 31、Playlists 播放列表的緩存文件夾。 32、renren 顧名思義,人人網(wǎng)客戶端的緩存文件夾。 33、screenshot 貌似是截屏圖片保存的目錄,34、ShootMe 顧名思義,shootme 截屏后圖片文件保存的目錄。 35、SmartpixGames Smartpix Games 出品游戲的緩存文件夾,比如Jewellust。 36、sogou 顧名思義,搜狗拼音的緩存文件夾。 37、SpeedSoftware RE 文件管理器的緩存文件夾。 38、SystemAppBackup SystemApp remove(深度卸載)備份系統(tǒng)文件后,備份文件保存的目 錄。 39、TalkingFriends talking tom(會(huì)說話的tom 貓)錄制的視頻文件所保存的目錄。40、Tencent 顧名思義,騰訊軟件的緩存目錄,比如QQ。(與上面的.QQ 文件夾并不相同) 41、TitaniumBackup 顧名思義,鈦備份備份程序鎖保存的目錄。' 42、TunnyBrowser 感覺是海豚瀏覽器的緩存目錄,但不知道為什么叫這個(gè)名字,金槍魚瀏 覽器.....43、UCDLFiles UC 迅雷下載文件的保存目錄。 44、UCDownloads UC 瀏覽器下載文件的保存目錄。 45、VIE Vignette(暈影相機(jī))的緩存目錄。 46、科學(xué)上網(wǎng) 顧名思義,科學(xué)上網(wǎng) 數(shù)據(jù)的緩存目錄。 47、yd_historys 有道詞典搜索歷史的緩存目錄。 48、yd_speech 有道詞典單詞發(fā)音的緩存目錄。 49、youmicache 刪掉后還會(huì)自動(dòng)生成,悠米廣告的緩存目錄,廣告程序內(nèi)嵌在其他程序中。補(bǔ): 50、Glu Glu 系列游戲的資料包存放地。如3D 獵鹿人等。 51、DunDef 地牢守護(hù)者的數(shù)據(jù)包。 52、KuwoMusic 顧名思義,酷我音樂相關(guān)文件夾。 53、MxBrowser 遨游的緩存目錄。 54、Camera360 顧名思義,camera360 的緩存目錄。 55、TTPod 顧名思義,天天動(dòng)聽的緩存目錄。 56、apadqq-images QQ for pad 的緩存目錄。 57、My documents 自己手機(jī)啟用各種程序任務(wù)記錄文檔 定期清除 時(shí)間長了會(huì)積累 很多 占用SD 卡內(nèi)存。6 w& J2 g2 H9 H5 y, y 58、.nomedia 手機(jī)中隱藏的音頻 圖片文件夾 可以自設(shè)在相關(guān)文件夾中。 59、media(媒體文檔)使用電話通話錄音軟件 或在線瀏覽視頻等媒體 產(chǎn)生的音頻文件60、帶有navi 的是導(dǎo)航軟體,一般是地圖包 61、.BlueFTP_thumbnails 藍(lán)牙助手的緩存 62、.FileExpert 是文件大師的緩存)63、.quickoffice 是quickoffice 的緩存文件。64、.zdclock 正點(diǎn)鬧鐘的緩存與記憶 65、365riliDownload 顧名思義就是365 日歷的緩存,下載的插件也在里面 66、appmonster2 備份精靈的緩存 67、bcr 名片全能王緩存 68、Camera360 這不用解釋了,大家都知道 69、CamScanner 掃描全能王的緩存 70、GOLauncherEX 這大家應(yīng)該也知道,就是GO 桌面的緩存 71、GOSMS GO 短信 72、Goweather GO 天氣 73、MTXX 美圖秀秀,制作后的圖片緩存 74、ndcommplatform,PandaSpace 這兩者都是91 助手生成的緩存 75、notegallery 文本全能王的緩存 76、Photaf 3D 全景拍照的緩存 77、photowonder 魔圖精靈生成的緩存 78、soundhound 獵曲奇兵的緩存 79、WhatsApp 這...中文是什么,呵呵,大家都知道吧WhatsApp 的緩存 80、Youdao 有道詞典是這文件夾名稱,yd_historys,yd_speech 共五個(gè)集成在一起 ricwang36(81、SystemAppBackup SystemApp remove(深度卸載)備份系統(tǒng)文件后,備份檔桉保存的 目錄 82、SpeedSoftware RE 管理器產(chǎn)生的 83、rosie_scroll 坦白說,我一直不知道這個(gè)是什么,刪了沒事,但是還會(huì)自動(dòng)生成,應(yīng) 該是手機(jī)自帶哪個(gè)軟體生成緩存 84、alarms Alarms 鬧鐘鈴聲 85、Music MP3 音樂,部分手機(jī)才會(huì)有 86、notifications 訊息鈴聲,部分手機(jī)才會(huì)有 87、ringtones 來電鈴聲,部分手機(jī)才會(huì)有 88、.bookmark_thumb1 是手機(jī)瀏覽器可視化我的最愛圖片的存放資料夾。 89、.footprints 用于記錄手機(jī)照片的真實(shí)地理位置 90、albumthumbs 照片小圖的緩存,為了加快小圖的顯示速度 如何學(xué)習(xí)安卓 想學(xué)編程開發(fā),那要先會(huì)一門編程語言,現(xiàn)在可以試著去學(xué)學(xué)C語言,雖然這個(gè)安卓沾不上邊,但是,C語言的編程思想還是很重要的,學(xué)完了C語言之后,他的語法基本上和所有的編程語言都很相像,能影響你的思維,幫助你理解其他的編程語言的。之后呢,在好好看看《數(shù)據(jù)結(jié)構(gòu)》,這很重要。然后再去學(xué)學(xué)Java語言,因?yàn)锳ndroid的應(yīng)用的開發(fā)語言用的是Java,所以一定要好好學(xué)習(xí)。 最后了解下數(shù)據(jù)庫,我們在學(xué)習(xí)數(shù)據(jù)庫之前都先學(xué)了《數(shù)據(jù)庫原理》《離散數(shù)學(xué)》《關(guān)系代數(shù)》,有了這些基礎(chǔ)之后再去學(xué)數(shù)據(jù)庫,數(shù)據(jù)庫也有很多可以選擇的,推薦mysql。 加油!第二篇:安卓系統(tǒng)精簡總結(jié)
第三篇:安卓學(xué)習(xí)心得
第四篇:安卓目錄總結(jié)
第五篇:如何學(xué)習(xí)安卓