第一篇:Android數(shù)據(jù)共享之ContentProvider總結(jié)
Content Provider 由上一節(jié)內(nèi)容,我們了解到Adroid的數(shù)據(jù)都是私有的,那么對于像通訊錄之類,多個APP(撥號、通話、短消息…)都需要共享使用,該怎么實現(xiàn)呢?
答案就是ContentProvider。
概述:
ContentProvider是Android平臺中,在不同應(yīng)用程序之間實現(xiàn)數(shù)據(jù)共享的一種機制。一個應(yīng)用程序如果需要讓別的程序可以操作自己的數(shù)據(jù),即可采用這種機制。并且此種方式忽略了底層的數(shù)據(jù)存儲實現(xiàn),ContentProvider提供了一種統(tǒng)一的通過Uri實現(xiàn)數(shù)據(jù)操作的方式。
Android為常用的數(shù)據(jù)類型(圖片,音視頻,通訊錄)提供了大量的ContentProvider,它們被定義在android.provider包下面。
操作模型:
ContentProvider類:
定義在android.content包下面,主要數(shù)據(jù)存取類,提供了常用的數(shù)據(jù)操作接口 ? delete(): 刪除數(shù)據(jù)集
? insert():添加數(shù)據(jù)集
? qurey():查詢數(shù)據(jù)集
? update():更新數(shù)據(jù)集
? onCreate():初始化底層數(shù)據(jù)集和建立數(shù)據(jù)連接等工作
? getType():返回指定URI的MIME數(shù)據(jù)類型,ContentResolver類:
ContentProvider是實際操作數(shù)據(jù)庫的方法,客戶端通過ContentResolver實現(xiàn),ContentResolver和ContentProvider提供了對應(yīng)的方法,諸如insert(), delete(), query()和update()之類的方法。我們間接的通過ContentResolver的方法來操作ContentProvider。
Uri介紹
ContentProvider 通過URI對象共享數(shù)據(jù);Uri代表了要操作的數(shù)據(jù),Uri主要包含了兩部分信息:
1》需要操作的ContentProvider
2》對ContentProvider中的什么數(shù)據(jù)進行操作
Uri是一個通用資源標(biāo)志符,將其分為A,B,C,D 4個部分:
A:無法改變的標(biāo)準(zhǔn)前綴,包括;“content://”、“tel://”等。當(dāng)前綴是“content://”時,說明通過一個Content Provider控制這些數(shù)據(jù);
B:URI的標(biāo)識,它通過authorities屬性聲明,用于定義了是哪個ContentProvider提供這些數(shù)據(jù)。對于第三方應(yīng)用程序,為了保證URI標(biāo)識的唯一性,它必須是一個完整的、小寫的類名。例如:
“content:// com.test.contentproviderdemo ”;
C:路徑,可以近似的理解為需要操作的數(shù)據(jù)庫中表的名字,如:“content:// com.test.contentproviderdemo/people”中的people
D:如果URI中包含表示需要獲取的記錄的ID,則就返回該id對應(yīng)的數(shù)據(jù),如果沒有ID,就表示返回全部;
將字符串轉(zhuǎn)成Uri,Uri uri = Uri.parse(“content:// com.test.contentproviderdemo/people ”)
跟Uri相關(guān)的兩個操作類:
A、public class UriMatcher //匹配
//注冊匹配Uri路徑
//常量UriMatcher.NO_MATCH表示不匹配任何路徑的返回碼
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);//添加需要匹配uri,如果匹配就會返回匹配碼
//如果match()方法匹配content:// com.test.contentproviderdemo/people路徑,返回匹配碼為1 sMatcher.addURI(“com.test.contentproviderdemo”, “people”, 1);
//如果match()方法匹配content://com.test.contentproviderdemo/people/2路徑,返回匹配碼為2 sMatcher.addURI(“com.test.contentproviderdemo”, “people /#”, 2);//#號為通配符
switch(sMatcher.match(Uri.parse(“content:// com.test.contentproviderdemo/people/10”))){
case 1
break;case 2
break;default://不匹配
break;}
B、public class ContentUris //獲取ID
withAppendedId(uri, id)用于為路徑加上ID部分:
Uri uri = Uri.parse(“content:// com.test.contentproviderdemo/people ”)Uri resultUri = ContentUris.withAppendedId(uri, 10);parseId(uri)方法 用于從路徑中獲取ID部分:
Uri uri = Uri.parse(“content:// com.test.contentproviderdemo/people /10”)long personid = ContentUris.parseId(uri);//獲取的結(jié)果為:10
主要步驟:
1.創(chuàng)建保存數(shù)據(jù)的文件或者數(shù)據(jù)庫。
2.在當(dāng)前應(yīng)用程序中定義一個ContentProvider,重載相關(guān)操作接口。如: public class PeopleProvider extends ContentProvider{ public boolean onCreate()public Uri insert(Uri uri, ContentValues values)public int delete(Uri uri, String selection, String[] selectionArgs)public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)} public String getType(Uri uri)3.在當(dāng)前應(yīng)用程序的AndroidManifest.xml中注冊此ContentProvider
android:authorities = “com.test.contentproviderdemo”/> 4.其他應(yīng)用程序通過ContentResolver和Uri來獲取此ContentProvider的數(shù)據(jù)。
ContentResolver resolver = getContentResolver();5.通過注冊registerContentObserver監(jiān)聽ContentProvider的數(shù)據(jù)變化;
ContentProvider完整實例:
ContentResolverDemo.zipContentProviderDemo.zip
ContentProviderDemo是一個無界面的示例,僅提供一個ContentProvider組件,供其他應(yīng)用程序進行數(shù)據(jù)交換底層使用SQLite數(shù)據(jù)庫,支持?jǐn)?shù)據(jù)的添加、刪除、更新和查詢等基本操作
ContentResolverDemo是使用ContentProvider的示例,自身不具有任何數(shù)據(jù)存儲功能,僅是通過URI訪問ContentProviderDemo示例提供的ContentProvider。<完>
第二篇:Android 淺談數(shù)據(jù)共享
由麥可網(wǎng)整理,轉(zhuǎn)載請注明出處
Android 淺談數(shù)據(jù)共享
對于應(yīng)用程序之間的數(shù)據(jù)共享,Android提供了比較靈活的方式,相關(guān)的開發(fā)經(jīng)驗下面是Android123平時使用的方法。
1.簡單配置文件:
SharedPreferences方式存儲的配置文件,我們在各個應(yīng)用間可以通過 getSharedPreferences(“eoeandroid”, Context.MODE_PRIVATE);這樣的方式存儲,最后是共享模式,這里使用了私有,而通過全局讀、全局寫可以讓其他的應(yīng)用訪問,通過createPackageContext方法,但是在Android 1.5 以后,共享訪問需要相同UID和簽名才可以訪問。
2.SQLite數(shù)據(jù)庫文件
對于一些較為復(fù)雜的配置或數(shù)據(jù),在Android平臺上我們一般使用SQLite數(shù)據(jù)庫存儲,對于共享我們可以提供ContentProvider接口來實現(xiàn),我們雖然可以獲取當(dāng)前應(yīng)用的數(shù)據(jù)庫保存位置,通過Context的getDatabasePath(String name)這個方法,由于應(yīng)用的PackageName比較長可能會發(fā)生變動,Android提供了類似Intent的方式來匹配一些Uri,比如說電話撥號為 tel:// 而對于網(wǎng)址可以使用 http:// 對于定做坐標(biāo)使用geo://,而我們的數(shù)據(jù)庫可以通過UriMatcher類的addURI添加一些Uri,通過隱式Intent方式實現(xiàn)自己的處理方式,具體的大家可以查看短信應(yīng)用的開源代碼 Mms.git 了解。
3.對于運行中的高性能數(shù)據(jù)共享
在Android中共享內(nèi)存方法可以使用linux底層的mmap方式,對于跨進程訪問,使用IPC,當(dāng)然Android還提供了AIDL遠(yuǎn)程服務(wù)來實現(xiàn)數(shù)據(jù)綁定訪問處理,所以說對于Android Service的開發(fā),一定要記住通過Bind方式來開發(fā),比較典型的有音樂播放器,Music.gif
第三篇:Android之a(chǎn)ctivity總結(jié)
Android之Activity總結(jié)
一、什么是Activity
Activity 是用戶接口程序,原則上它會提供給用戶一個交互式的接口功能。它是 android 應(yīng)用程序的基本功能單元。Activity 本身是沒有界面的。所以activity類創(chuàng)建了一個窗口,開發(fā)人員可以通過setContentView(View)接口把UI放到activity創(chuàng)建的窗口上,當(dāng)activity指向全屏窗口時,也可以用其他方式實現(xiàn):作為漂浮窗口(通過windowIsFloating的主題集合),或者嵌入到其他的activity(使用ActivityGroup)。activity是單獨的,用于處理用戶操作。幾乎所有的activity都要和用戶打交道
二、Activity生命周期(生命周期方法)
由圖可知,這些方法調(diào)用的順序:
1.Activity正常啟動:onCreate-> onStart-> onResume;
2.Activity被殺掉:onPause-> onStop-> onDestroy,此為一個完整的生命周期。3.中斷處理:onPause-> onStop,恢復(fù)時onRestart-> onStart-> onResume;
4.如果當(dāng)前Activity是半透明狀態(tài)或者對話框狀態(tài):那么中斷就是onPause ,恢復(fù)的時候onResume。
那么對于”O(jiān)ther app need memory”,就是我們手機在運行一個應(yīng)用程序的時候,有可能打進來電話發(fā)進來短信,或者沒有電了,這時候程序都會被中斷,優(yōu)先去服務(wù)電話的基本功能,另外系統(tǒng)也不允許你占用太多資源,至少要保證一些功能(比如電話),所以資源不足的時候也就有可能被kill掉。
方法在系統(tǒng)中的作用及我們應(yīng)該做什么:
onCreate(創(chuàng)建):在這里創(chuàng)建界面,做一些數(shù)據(jù)的初始化工作;
onStart(可視狀態(tài)): 到這一步變成“用戶可見不可交互”的狀態(tài);
onResume(可交互狀態(tài)):變成和用戶可交互的,(在Activity棧系統(tǒng)通過棧的方式管理這些Activity,即當(dāng)前Activity在棧的最上端,運行完彈出棧,則回到上一個Activity);
onPause(暫停狀態(tài)):到這一步是可見但不可交互的,系統(tǒng)會停止動畫等消耗CPU的事情。從上文的描述已經(jīng)知道,應(yīng)該在這里保存你的一些數(shù)據(jù),因為這個時候你的程序的優(yōu)先級降
低,有可能被系統(tǒng)收回。在這里保存的數(shù)據(jù),應(yīng)該在onResume里讀出來。
OnStop(停止?fàn)顟B(tài)):變得不可見,被下一個activity覆蓋了。
onDestroy(殺死):這是Activity被kill前最后一個被調(diào)用方法了,可能是其他類調(diào)用finish方法或者是系統(tǒng)為了節(jié)省空間將它暫時性的干掉。
onPause,onstop,onDestroy,三種狀態(tài)下 activity都有可能被系統(tǒng)殺掉。
Activity棧:Activity以棧的形式進行管理,后進先出的原則
三、Activity之間的通信
在 Android 中,不同的 Activity 實例可能運行在一個進程中,也可能運行在不同的進程中。因此我們需要一種特別的機制幫助我們在 Activity 之間傳遞消息。
Android 中通過 Intent 對象來表示一條消息,一個 Intent 對象不僅包含有這個消息的目的地,還可以包含消息的內(nèi)容,這好比一封 Email,其中不僅應(yīng)該包含收件地址,還可以包含具體的內(nèi)容。
Intent是一種運行時綁定(runtime binding)機制
Intent負(fù)責(zé)對操作的動作、動作涉及數(shù)據(jù)、附加數(shù)據(jù)進行描述,Android則根據(jù)此Intent的描述,負(fù)責(zé)找到對應(yīng)的組件,將 Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。因此,Intent在這里起著一個媒體中介的作用,專門提供組件互相調(diào)用的相關(guān)信息,實現(xiàn)調(diào)用者與被調(diào)用者之間的解耦。
在應(yīng)用中,我們可以以兩種形式來使用Intent:
直接Intent(應(yīng)用程序內(nèi)部):指定了component(組建)屬性的Intent。通過指定具體的組件類,通知應(yīng)用啟動對應(yīng)的組件。
間接Intent(應(yīng)用程序之間):沒有指定comonent屬性的Intent。這些Intent需要包含足夠的信息,這樣系統(tǒng)才能根據(jù)這些信息,在在所有的可用組件中,確定滿足此Intent的組件。
對于直接Intent,Android不需要去做解析,因為目標(biāo)組件已經(jīng)很明確。
Android需要解析的是那些間接Intent,通過解析,將 Intent映射給可以處理此Intent的Activity、IntentReceiver或Service。Intent解析機制主要是通過查找已注冊在AndroidManifest.xml(清單)中的所有IntentFilter(意圖過濾器)及其中定義的Intent,最終找到匹配的Intent。
橫屏?xí)r:onConfigurationChanged(配置改變))
橫屏以及出現(xiàn)鍵盤鍵盤時生命周期部重新開始的方法: KeyboardHidHidden/orientation/screenSize 橫屏顯示:landscape 豎屏顯示:portrait
四大組建:activity:活動、service:服務(wù)、content provider:內(nèi)容提供商、broadcast receiver:廣播收音機
Activity的所有面試題
什么是Activity? 請描述一下Activity 生命周期?
兩個Activity之間跳轉(zhuǎn)時必然會執(zhí)行的是哪幾個方法?
你后臺的Activity被系統(tǒng) 回收怎么辦?如果后臺的Activity由于某原因被系統(tǒng)回收可了,如何在被系統(tǒng)回收之前保存當(dāng)前狀態(tài)?
如何退出Activity?如何安全退出已調(diào)用多個Activity的Application? 兩個Activity之間怎么傳遞數(shù)據(jù)?
第四篇:關(guān)于android手機的文件共享
關(guān)于android系統(tǒng)的設(shè)備的文件共享
個人寫作水平不怎么好,請各位不要笑話!寫這個沒有什么其他意圖,只是想和大家分享個人的一些想法!
如今這年代手機、平板電腦進入了每個人的生活,時不時的會拿出來玩玩。有時候,幾個人在一起的時候,可能會問到“你手機里有什么好東西,分享分享一下”,在這個時候,大家最可能想到的是通過藍(lán)牙來傳輸,當(dāng)然如果在文件大小較少時還好,傳幾分鐘沒關(guān)系,如果是視頻,數(shù)據(jù)包等這類大文件,還這樣傳輸就太費時了。。。。。。。
費話就不多說。直接說說這個文件共享。網(wǎng)絡(luò)速度的比藍(lán)牙快多了,所以我的共享方法就是通過網(wǎng)絡(luò)來共享。說到網(wǎng)絡(luò)當(dāng)然不會是用中國聯(lián)通,中國移動這類,指的是局域網(wǎng),首先得建立一個,android2.2以上系統(tǒng)的手機都可以建立一個無線熱點,可以讓其中一個手機開啟這個功能(如果怕其他設(shè)備通過你的手機上網(wǎng)浪費流量,就可以關(guān)閉移動數(shù)據(jù)),讓其他需要共享的設(shè)備接入這個網(wǎng)絡(luò),如果在windows 下,大家都知道,通過Windows的資源管理將某個文件夾共享,其他設(shè)備通過輸入IP共享目錄就可以了,但是android系統(tǒng)的沒有這么方便的功能,當(dāng)然在這里原理也是一樣的,必須建立一個共享文件夾,這里個人推薦一個軟件是——無線數(shù)據(jù)線(這個網(wǎng)上很多)——此軟件建立的是一個FTP
建立 一個共享還不行啦,得有個軟件能訪問網(wǎng)絡(luò)文件夾才行啦,個人推薦ES文件瀏覽器,通過這兩個軟件就可以完成共享文件。
軟件的使用,我相信大家大部分一看都會用,如果不會請參考網(wǎng)上??偨Y(jié):
此方法的條件
1:有WIFI功能的設(shè)備
2:有一無線網(wǎng)絡(luò),或者一個手機能提供無線熱點。3:無線數(shù)據(jù)線軟件(僅建立共享機必備)4:ES文件瀏覽器軟件(訪問共享的必備)、說明:此方式,他人可以刪除文件,安全性不高 玩android高手,可以建立一個SMB服務(wù)器進行共享。
另一種和與藍(lán)牙點對點發(fā)送方式類似,同樣要求上一種方式的前兩項,要求另外一個軟件,稱為WIFI文件共享軟件,網(wǎng)上有下載。
第五篇:Android總結(jié)
Android四大組件:
Activity—表現(xiàn)屏幕界面
Service—后臺服務(wù)
BroadcastReceiver—實現(xiàn)廣播機制
ContentProvider—實現(xiàn)數(shù)據(jù)存儲
Intent類:用來啟動程序并傳遞信息的類
用于Activity、Receiver、Service之間進行交互的類,通過無參構(gòu)造方法創(chuàng)建對象,增加其action、category、data、extra等屬性進行信息傳遞,并通過Activity中的startActivity(Intent intent)進行界面的跳轉(zhuǎn);通過Context中的StartService(Intent intent)進行服務(wù)跳轉(zhuǎn);通過Context中的registerReceive(Intent intent)對廣播進行注冊,并通過sendBroadcast()進行無序消息發(fā)送,或可以通過SendOrderedBroadcast()進行有序的消息發(fā)送。Handler類:
用來發(fā)送和處理消息,并配合主線程完成UI的更新;消息Message/Runnable傳遞通過MessageQueue(消息隊列,先進先出)進行傳遞,并通過Lopper進行接收,傳遞的消息可以為Message對象,也可以是Runnable對象;接收方法通過HandleMessage(Message msg)進行獲取。SharedPreferences類:
一般用于第一次登錄時的設(shè)置,或者是各個界面的一些小型格式設(shè)置,如字體等。是本地的小型共享數(shù)據(jù)庫,可以通過Context的靜態(tài)方法getSharedPreferences獲得其對象,對象內(nèi)的值均為鍵值對進行儲存。通過SharedPreferences對象調(diào)用editor()獲取SharedPreferences.Editor對象,向共享數(shù)據(jù)庫中增加數(shù)據(jù),putString(),并提交數(shù)據(jù),commit();通過SharedPreferences對象獲取共享數(shù)據(jù)庫中的數(shù)據(jù),getString()。
ViewPager:實現(xiàn)界面滑動的類;
通過設(shè)置OnPagerChangedListener設(shè)置ViewPager的監(jiān)聽事件;
實現(xiàn)流程:
①布局文件中設(shè)置ViewPager控件;
②代碼中進行綁定控件;
③通過繼承PagerAdapter抽象類進行設(shè)置適配器,并傳遞數(shù)據(jù)源;
④適配器中實現(xiàn)兩個抽象方法,兩個重寫方法:getCount()—獲取滑動界面的數(shù)量,isViewFromObject()—判斷視圖是否是來自于Object文件中;重寫兩個方法,分別為destoryItem—銷毀指定位置的視圖;InstantiateItem(),設(shè)置指定位置的視圖;
Timer與TimerTask類:
Timer為計時器的類,通過無參構(gòu)造方法可以獲取對象,通過Timer.schedule(TimerTask task,long time)進行設(shè)置多久后執(zhí)行某任務(wù),當(dāng)任務(wù)執(zhí)行完后,取消計時的功能,Timer.cancle();TimerTask類為抽象類,實例化時,必須重寫run方法;執(zhí)行的內(nèi)容,均在run方法中進行設(shè)置,并且執(zhí)行時,已在子線程中進行執(zhí)行。自定義View:用到的類有Paint、Canvas、Spec、SpecF、Path、View.MeasureSpec、Timer、TimerTask;
抽象類,通過子類繼承,獲取對象;在布局文件中綁定后,通過代碼,設(shè)置自定義View的屬性;自定義View中,通過重寫OnMeasure方法,對布局文件中的尺寸進行測量,并由View中的setMeasureDimenson()方法,進行數(shù)據(jù)的保存;通過重寫Ondraw方法,進行繪圖;當(dāng)需要繪制動態(tài)圖形時,使用計時器Timer的schedule(TimerTask,long time,delay time2)方法,在time時間后,每隔time2時間,重寫執(zhí)行run方法中的內(nèi)容;將耗時的操作設(shè)置在run方法中,并通過View中的invalidate()方法刷新主線程中的繪的圖形,通過postInvalidate()刷新子線程中的圖形。數(shù)據(jù)庫:
常用的數(shù)據(jù)庫有Oracle,需要安裝和配置的大型收費數(shù)據(jù)庫;MySQL是中型數(shù)據(jù)庫,同樣需要安裝配置,但不需要收費;Sqlite是小型免費的嵌入式數(shù)據(jù)庫,占用內(nèi)存低,最新版本為3.0。Sqlite數(shù)據(jù)庫需要通過SqliteDatabaseOpenHelper進行創(chuàng)建數(shù)據(jù)庫,并通過SqliteDatabase進行數(shù)據(jù)庫的操作。輔助類是抽象類,通過繼承,重寫兩個方法,并在子類的構(gòu)造方法中通過OpenHelper的構(gòu)造方法(Context context,String SqlName,SqliteDatabase.CursorFactory factory,int version)進行數(shù)據(jù)庫的創(chuàng)建,在onCreate方法中,進行數(shù)據(jù)庫表的創(chuàng)建,在onUpdate中進行數(shù)據(jù)庫的版本更新。在數(shù)據(jù)庫的操作類中,執(zhí)行exect方法,通過sql語句對數(shù)據(jù)庫進行操作。Create table student(_id integer primary key auto increament ,name text);insert into student(_id,name)values(1,zx);delete from student where _id=1;update student set _id=2 where name=zx;select *from student;ListView、GridView適配器的優(yōu)化:
將布局文件中的控件進行封裝,當(dāng)視圖加載時,判斷可變視圖是否存在,當(dāng)不存在時,通過布局文件獲取視圖,并新建封裝類,將地址通過setTag()進行發(fā)送;當(dāng)視圖存在時,重復(fù)利用地址—getTag()。反射:
存儲數(shù)據(jù)的方式:
共享數(shù)據(jù)庫、數(shù)據(jù)庫、文件、網(wǎng)絡(luò)、內(nèi)容提供者
廣播:
廣播傳播時,需要接收者、發(fā)送者、廣播頻道;根據(jù)發(fā)送者的發(fā)送方式不同,分為有序廣播、無序廣播;有序廣播為接收者有接收順序,根據(jù)設(shè)置的優(yōu)先級不同,確定先后順序,接收者同時也是發(fā)送者,向后面的廣播發(fā)送消息,發(fā)送過程中,可以添加信息,也可以停止廣播的傳輸;無序廣播,接收者之間無聯(lián)系,均從發(fā)送者處接收信息;廣播在傳輸過程中,不能被添加信息,也不可能被停止。廣播在發(fā)送前,需要對接收者進行注冊,注冊方式有兩種,動態(tài)注冊、靜態(tài)注冊。動態(tài)注冊,是在代碼中進行,通過Context對象調(diào)用靜態(tài)方法進行注冊,所有的廣播均可以用動態(tài)注冊,其生命周期依賴于應(yīng)用,相對于靜態(tài)注冊,比較節(jié)省內(nèi)存;靜態(tài)方法在清單文件中進行注冊,部分系統(tǒng)廣播不能通過靜態(tài)注冊進行,其生命周期依賴于系統(tǒng),當(dāng)系統(tǒng)啟動,即運行接收廣播,較耗內(nèi)存。廣播接收者需要繼承BroadcastReceiver,并實現(xiàn)抽象方法onReceive(),通過回調(diào)接口,進行數(shù)據(jù)的傳輸。注意:廣播發(fā)送前,必須進行接收者的注冊,并且,當(dāng)顯示跳轉(zhuǎn)時,不需要意圖過濾器。安卓布局:九種布局
線性布局,水平或垂直方向兩種格式,主要特點為權(quán)重,即規(guī)定各控件在視圖中的占有的比例;
相對布局,相對于父控件或兄弟控件的布局,各控件需指定相對位置; 絕對布局,指定各控件在視圖中的絕對位置,幾乎不再使用; 表格布局,子布局放在行中,列由控件表示(TableRow); 幀布局:覆蓋前面布局的布局,一般用于暫停按鈕等; 風(fēng)格布局:可以跨行、跨列的布局,占滿換行;
左右側(cè)滑:可以實現(xiàn)左右側(cè)滑,通過設(shè)置主菜單和二級菜單設(shè)置左右兩個菜單; 下拉刷新:設(shè)置下拉刷新、上拉加載的功能; 抽屜布局;
安卓版本及對應(yīng)的API:
1.6—4;2—7;3—11;4—15;4.3—18;5—20;5.1—21;6—23;7—25; 安卓四層架構(gòu):
應(yīng)用層:Java語言開發(fā),主要從事App開發(fā);
運行庫層:Java語言與C語言,View視圖、管理類等的開發(fā); 架構(gòu)層:C語言與Linux語言,各種框架、瀏覽器等; 內(nèi)核層:Linux、C語言,開發(fā)各種驅(qū)動; 安卓四大組件:
Activity:界面,實現(xiàn)程序與用戶之間的交換,有自己的生命周期,七個生命周期;4種啟動模式 Service:
BroadcastReceive:三要素,發(fā)送者、接收者、發(fā)送頻道(Intent);類型:有序(接收有序,有數(shù)據(jù)傳送,可以攔截數(shù)據(jù))、無序廣播(相對);注冊方式:靜態(tài)注冊,持久監(jiān)聽,占用內(nèi)存比較高生命周期跟隨系統(tǒng),動態(tài)注冊(代碼中),所有廣播都可以動態(tài)注冊,部分系統(tǒng)廣播不能動態(tài)注冊,臨時監(jiān)聽,占用內(nèi)存較少,生命周期隨應(yīng)用進行;
ContentProvide:不能存放數(shù)據(jù),五種存放數(shù)據(jù)方式之一,特點為:①為數(shù)據(jù)的獲取等操作添加一個統(tǒng)一的接口②可以實現(xiàn)跨應(yīng)用訪問數(shù)據(jù);③可以實現(xiàn)Android中通訊錄、消息、音頻、視頻等的訪問或操作;通過ContentReceive進行數(shù)據(jù)的訪問,可以對數(shù)據(jù)進行增刪改查操作。
動畫: IO流: 序列化: AlertDialog:
Set實現(xiàn)類: 手機電量檢測:
自定義SurfaceView:
自定義View:三個構(gòu)造方法的區(qū)別
Message:Handler.obtain/new/Message.obtain
HttpUriConnection訪問網(wǎng)絡(luò)
gride 異步任務(wù) 動畫
抽象類和接口 反射 克隆 序列化 側(cè)滑的實現(xiàn) 數(shù)據(jù)庫 Socket:
Gson解析
異步任務(wù)和子線程區(qū)別 WebView 版本更新 照片的圓角化
Collection與Collections Sql語句
MVP框架與MVC: TCP與UDP的區(qū)別: 一鍵分享的流程: Http協(xié)議的理解: 不使用框架訪問網(wǎng)絡(luò): List集合與set集合: 自定義View的流程: 線性布局的特點: ViewPager的原理: 服務(wù)的啟動方式:
Activity的啟動方式: Xml數(shù)據(jù)解析: