說(shuō)明:
在Unity開(kāi)發(fā)移動(dòng)平臺(tái)相關(guān)應(yīng)用程序時(shí),難免會(huì)涉及到一些必要的插件(如:社會(huì)化分享插件ShareSDK、Umeng;增強(qiáng)現(xiàn)實(shí)開(kāi)發(fā)Vufoia;掃描二維碼插件等一些列),每一種插件分開(kāi)使用時(shí)特別好用,無(wú)需特殊配置,使用Example案例就能快速上手使用。然后,當(dāng)有時(shí)同時(shí)需要多個(gè)插件同時(shí)使用時(shí),由于每個(gè)插件都包含有自身的Androidmanifest.xml文件,必然會(huì)出現(xiàn)的問(wèn)題就是后面導(dǎo)入到Unity工程的Androidmanifest.xml文件會(huì)自動(dòng)重命名為Androidmanifest 1.xml,Androidmanifest 2.xml。。。由于同一個(gè)Android程序中,僅能識(shí)別一個(gè)“Androidmanifest”文件,后面導(dǎo)入并重命名的Androidmanifest.xml文件將無(wú)法識(shí)別到,也就導(dǎo)致了很多開(kāi)發(fā)者在使用多個(gè)插件時(shí)只有一個(gè)插件功能可使用的情況。
掌握必要的Androidmanifest.xml內(nèi)容:
AndroidManifest.xml文件是Android系統(tǒng)重要文件,主要涉及到權(quán)限申請(qǐng)及定義配置文件,通過(guò)它可以向系統(tǒng)預(yù)先定義和申請(qǐng)應(yīng)用程序運(yùn)行所需要的權(quán)限。
Androidmanifest.xml的主要用途:
AndroidManifest.xml主要包含以下功能:
- 描述應(yīng)用程序的相關(guān)信息——包名、命名空間、版本號(hào)、名稱等
- 聲明應(yīng)用程序所必須具備的權(quán)限——如獲取相機(jī)權(quán)限、WiFi權(quán)限等
- 聲明程序的入口
- 指定應(yīng)用程序所使用的SDK版本
- 指定應(yīng)用程序會(huì)使用到的庫(kù)文件
- 設(shè)定應(yīng)用程序的硬件或一些屬性——屏幕大小、是否支持旋轉(zhuǎn)屏幕等
Androidmanifest.xml的結(jié)構(gòu)
- <pre name="code" class="html"><?xmlversionxmlversion="1.0"encoding="utf-8"?>
-
- <!-- 基本配置 -->
- <manifest
- android:versionName="1.0"
- android:versionCode="1"
- package="com.unity3d.player"
- xmlns:android="http://schemas.android.com/apk/res/android">
- <!-- 應(yīng)用程序配置 -->
- <application>
- <!-- 活動(dòng)項(xiàng) -->
- <activity>
- <intent-filter>
- <action/>
- <category/>
- </intent-filter>
- </activity>
- <!-- 后端活動(dòng)項(xiàng) -->
- <service>
- <intent-filter></intent-filter>
- <meta-data/>
- </service>
- <!--發(fā)送廣播-->
- <receiver>
- <intent-filter></intent-filter>
- <meta-data/>
- </receiver>
- <!--使用的庫(kù)文件-->
- <uses-library/>
- </application>
-
- <!--權(quán)限配置-->
- <uses-permission/>
- <permission/>
-
- <!--用于監(jiān)控-->
- <instrumentation/>
- <!--SDK版本-->
- <uses-sdk/>
- <!---軟硬件描述-->
- <uses-configuration/>
- <uses-feature/>
- <!--屏幕設(shè)置-->
- <supports-screens/>
- </manifest>
Androidmanifest.xml的結(jié)構(gòu)——(<Manifest>):(屬性)
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.Bruce.Xu.test"
- android:sharedUserId="string"
- android:sharedUserLabel="string resource"
- android:versionCode="integer"
- android:versionName="string"
- android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
- </manifest>
- xmlns:android——定義android命名空間,一般為http://schemas.android.com/apk/res/android,這樣使得Android中各種標(biāo)準(zhǔn)屬性能在文件中使用,提供了大部分元素中的數(shù)據(jù)。
- package——指定本應(yīng)用內(nèi)java主程序包的包名,它也是一個(gè)應(yīng)用進(jìn)程的默認(rèn)名稱
- sharedUserId——表明數(shù)據(jù)權(quán)限,因?yàn)槟J(rèn)情況下,Android給每個(gè)APK分配一個(gè)唯一的UserID,所以是默認(rèn)禁止不同APK訪問(wèn)共享數(shù)據(jù)的。若要共享數(shù)據(jù),第一可以采用Share Preference方法,第二種就可以采用sharedUserId了,將不同APK的sharedUserId都設(shè)為一樣,則這些APK之間就可以互相共享數(shù)據(jù)了。
- sharedUserLabel——一個(gè)共享的用戶名,它只有在設(shè)置了sharedUserId屬性的前提下才會(huì)有意義
- versionCode——是給設(shè)備程序識(shí)別版本(升級(jí))用的必須是一個(gè)interger值代表app更新過(guò)多少次
- versionName——顯示出來(lái)的版本名稱
- installLocation——安裝參數(shù),installLocation有三個(gè)值:internalOnly、auto、preferExternal
- 選擇preferExternal,系統(tǒng)會(huì)優(yōu)先考慮將APK安裝到SD卡上(當(dāng)然最終用戶可以選擇為內(nèi)部ROM存儲(chǔ)上,如果SD存儲(chǔ)已滿,也會(huì)安裝到內(nèi)部存儲(chǔ)上)
- 選擇auto,系統(tǒng)將會(huì)根據(jù)存儲(chǔ)空間自己去適應(yīng)
- 選擇internalOnly是指必須安裝到內(nèi)部才能運(yùn)行
Androidmanifest.xml的結(jié)構(gòu)——(<Application>):屬性
一個(gè)AndroidManifest.xml中必須含有一個(gè)Application標(biāo)簽,這個(gè)標(biāo)簽聲明了每一個(gè)應(yīng)用程序的組件及其屬性(如icon,label,permission等)
- <application android:allowClearUserData=["true" | "false"]
- android:allowTaskReparenting=["true" | "false"]
- android:backupAgent="string"
- android:debuggable=["true" | "false"]
- android:description="string resource"
- android:enabled=["true" | "false"]
- android:hasCode=["true" | "false"]
- android:icon="drawable resource"
- android:killAfterRestore=["true" | "false"]
- android:label="string resource"
- android:manageSpaceActivity="string"
- android:name="string"
- android:permission="string"
- android:persistent=["true" | "false"]
- android:process="string"
- android:restoreAnyVersion=["true" | "false"]
- android:taskAffinity="string"
- android:theme="resource or theme" >
- </application>
- android:allowClearUserData('true' or 'false')——用戶是否能選擇自行清除數(shù)據(jù),默認(rèn)為true,程序管理器包含一個(gè)選擇允許用戶清除數(shù)據(jù)。當(dāng)為true時(shí),用戶可自己清理用戶數(shù)據(jù),反之亦然
- android:allowTaskReparenting('true' or 'false')——是否允許activity更換從屬的任務(wù),比如從短信息任務(wù)切換到瀏覽器任務(wù)
- android:backupAgent——這也是Android2.2中的一個(gè)新特性,設(shè)置該APP的備份,屬性值應(yīng)該是一個(gè)完整的類名,如com.project.TestCase,此屬性并沒(méi)有默認(rèn)值,并且類名必須得指定(就是個(gè)備份工具,將數(shù)據(jù)備份到云端的操作)
- android:debuggable——這個(gè)從字面上就可以看出是什么作用的,當(dāng)設(shè)置為true時(shí),表明該APP在手機(jī)上可以被調(diào)試。默認(rèn)為false,在false的情況下調(diào)試該APP,就會(huì)報(bào)以下錯(cuò)誤:
- android:description/android:label——此兩個(gè)屬性都是為許可提供的,均為字符串資源,當(dāng)用戶去看許可列表(android:label)或者某個(gè)許可的詳細(xì)信息(android:description)時(shí),這些字符串資源就可以顯示給用戶。label應(yīng)當(dāng)盡量簡(jiǎn)短,之需要告知用戶該許可是在保護(hù)什么功能就行。而description可以用于具體描述獲取該許可的程序可以做哪些事情,實(shí)際上讓用戶可以知道如果他們同意程序獲取該權(quán)限的話,該程序可以做什么。我們通常用兩句話來(lái)描述許可,第一句描述該許可,第二句警告用戶如果批準(zhǔn)該權(quán)限會(huì)可能有什么不好的事情發(fā)生
- android:enabled——Android系統(tǒng)是否能夠?qū)嵗搼?yīng)用程序的組件,如果為true,每個(gè)組件的enabled屬性決定那個(gè)組件是否可以被 enabled。如果為false,它覆蓋組件指定的值;所有組件都是disabled。
- android:hasCode('true' or 'false')——表示此APP是否包含任何的代碼,默認(rèn)為true,若為false,則系統(tǒng)在運(yùn)行組件時(shí),不會(huì)去嘗試加載任何的APP代碼
- 一個(gè)應(yīng)用程序自身不會(huì)含有任何的代碼,除非內(nèi)置組件類,比如Activity類,此類使用了AliasActivity類,當(dāng)然這是個(gè)罕見(jiàn)的現(xiàn)象
- (在Android2.3可以用標(biāo)準(zhǔn)C來(lái)開(kāi)發(fā)應(yīng)用程序,可在androidManifest.xml中將此屬性設(shè)置為false,因?yàn)檫@個(gè)APP本身已經(jīng)不含有任何的JAVA代碼了)
- android:icon——這個(gè)很簡(jiǎn)單,就是聲明整個(gè)APP的圖標(biāo),圖片一般都放在drawable文件夾下
- android:name——為應(yīng)用程序所實(shí)現(xiàn)的Application子類的全名。當(dāng)應(yīng)用程序進(jìn)程開(kāi)始時(shí),該類在所有應(yīng)用程序組件之前被實(shí)例化。
- android:permission——設(shè)置許可名,這個(gè)屬性若在<application>上定義的話,是一個(gè)給應(yīng)用程序的所有組件設(shè)置許可的便捷方式,當(dāng)然它是被各組件設(shè)置的許可名所覆蓋的
- android:presistent——該應(yīng)用程序是否應(yīng)該在任何時(shí)候都保持運(yùn)行狀態(tài),默認(rèn)為false。因?yàn)閼?yīng)用程序通常不應(yīng)該設(shè)置本標(biāo)識(shí),持續(xù)模式僅僅應(yīng)該設(shè)置給某些系統(tǒng)應(yīng)用程序才是有意義的。
- android:process——應(yīng)用程序運(yùn)行的進(jìn)程名,它的默認(rèn)值為<manifest>元素里設(shè)置的包名,當(dāng)然每個(gè)組件都可以通過(guò)設(shè)置該屬性來(lái)覆蓋默認(rèn)值。如果你想兩個(gè)應(yīng)用程序共用一個(gè)進(jìn)程的話,你可以設(shè)置他們的android:process相同,但前提條件是他們共享一個(gè)用戶ID及被賦予了相同證書(shū)的時(shí)候
- android:restoreAnyVersion——同樣也是android2.2的一個(gè)新特性,用來(lái)表明應(yīng)用是否準(zhǔn)備嘗試恢復(fù)所有的備份,甚至該備份是比當(dāng)前設(shè)備上更要新的版本,默認(rèn)是false
- android:taskAffinity——擁有相同的affinity的Activity理論上屬于相同的Task,應(yīng)用程序默認(rèn)的affinity的名字是<manifest>元素中設(shè)定的package名
Androidmanifest.xml的結(jié)構(gòu)——(<Activity>):屬性
- <activity android:allowTaskReparenting=["true" | "false"]
- android:alwaysRetainTaskState=["true" | "false"]
- android:clearTaskOnLaunch=["true" | "false"]
- android:configChanges=["mcc", "mnc", "locale",
- "touchscreen", "keyboard", "keyboardHidden",
- "navigation", "orientation", "screenLayout",
- "fontScale", "uiMode"]
- android:enabled=["true" | "false"]
- android:excludeFromRecents=["true" | "false"]
- android:exported=["true" | "false"]
- android:finishOnTaskLaunch=["true" | "false"]
- android:icon="drawable resource"
- android:label="string resource"
- android:launchMode=["multiple" | "singleTop" |
- "singleTask" | "singleInstance"]
- android:multiprocess=["true" | "false"]
- android:name="string"
- android:noHistory=["true" | "false"]
- android:permission="string"
- android:process="string"
- android:screenOrientation=["unspecified" | "user" | "behind" |
- "landscape" | "portrait" |
- "sensor" | "nosensor"]
- android:stateNotNeeded=["true" | "false"]
- android:taskAffinity="string"
- android:theme="resource or theme"
- android:windowSoftInputMode=["stateUnspecified",
- "stateUnchanged", "stateHidden",
- "stateAlwaysHidden", "stateVisible",
- "stateAlwaysVisible", "adjustUnspecified",
- "adjustResize", "adjustPan"] >
- </activity>
- android:alwaysRetainTaskState——是否保留狀態(tài)不變, 比如切換回home, 再?gòu)男麓蜷_(kāi),activity處于最后的狀態(tài)。比如一個(gè)瀏覽器擁有很多狀態(tài)(當(dāng)打開(kāi)了多個(gè)TAB的時(shí)候),用戶并不希望丟失這些狀態(tài)時(shí),此時(shí)可將此屬性設(shè)置為true
- android:clearTaskOnLaunch——比如 P 是 activity, Q 是被P 觸發(fā)的 activity, 然后返回Home, 重新啟動(dòng) P,是否顯示 Q
- android:configChanges——當(dāng)配置list發(fā)生修改時(shí), 是否調(diào)用 onConfigurationChanged() 方法 比如 "locale|navigation|orientation". 這個(gè)我用過(guò),主要用來(lái)看手機(jī)方向改變的. android手機(jī)在旋轉(zhuǎn)后,layout會(huì)重新布局, 如何做到呢?正常情況下. 如果手機(jī)旋轉(zhuǎn)了.當(dāng)前Activity后殺掉,然后根據(jù)方向重新加載這個(gè)Activity. 就會(huì)從onCreate開(kāi)始重新加載.如果你設(shè)置了 這個(gè)選項(xiàng), 當(dāng)手機(jī)旋轉(zhuǎn)后,當(dāng)前Activity之后調(diào)用onConfigurationChanged() 方法. 而不跑onCreate方法等.
- android:excludeFromRecents——是否可被顯示在最近打開(kāi)的activity列表里,默認(rèn)是false
- android:finishOnTaskLaunch——當(dāng)用戶重新啟動(dòng)這個(gè)任務(wù)的時(shí)候,是否關(guān)閉已打開(kāi)的activity,默認(rèn)是false。如果這個(gè)屬性和allowTaskReparenting都是true,這個(gè)屬性就是王牌。Activity的親和力將被忽略。該Activity已經(jīng)被摧毀并非re-parented
- android:launchMode(Activity加載模式)——在多Activity開(kāi)發(fā)中,有可能是自己應(yīng)用之間的Activity跳轉(zhuǎn),或者夾帶其他應(yīng)用的可復(fù)用Activity??赡軙?huì)希望跳轉(zhuǎn)到原來(lái)某個(gè)Activity實(shí)例,而不是產(chǎn)生大量重復(fù)的Activity。這需要為Activity配置特定的加載模式,而不是使用默認(rèn)的加載模式
- Activity有四種加載模式:
- standard、singleTop、singleTask、singleInstance(其中前兩個(gè)是一組、后兩個(gè)是一組),默認(rèn)為standard
- standard:就是intent將發(fā)送給新的實(shí)例,所以每次跳轉(zhuǎn)都會(huì)生成新的activity。
- singleTop:也是發(fā)送新的實(shí)例,但不同standard的一點(diǎn)是,在請(qǐng)求的Activity正好位于棧頂時(shí)(配置成singleTop的Activity),不會(huì)構(gòu)造新的實(shí)例
- singleTask:和后面的singleInstance都只創(chuàng)建一個(gè)實(shí)例,當(dāng)intent到來(lái),需要?jiǎng)?chuàng)建設(shè)置為singleTask的Activity的時(shí)候,系統(tǒng)會(huì)檢查棧里面是否已經(jīng)有該Activity的實(shí)例。如果有直接將intent發(fā)送給它。
- singleInstance:首先說(shuō)明一下task這個(gè)概念,Task可以認(rèn)為是一個(gè)棧,可放入多個(gè)Activity。比如啟動(dòng)一個(gè)應(yīng)用,那么Android就創(chuàng)建了一個(gè)Task,然后啟動(dòng)這個(gè)應(yīng)用的入口Activity,那在它的界面上調(diào)用其他的Activity也只是在這個(gè)task里面。那如果在多個(gè)task中共享一個(gè)Activity的話怎么辦呢。舉個(gè)例來(lái)說(shuō),如果開(kāi)啟一個(gè)導(dǎo)游服務(wù)類的應(yīng)用程序,里面有個(gè)Activity是開(kāi)啟GOOGLE地圖的,當(dāng)按下home鍵退回到主菜單又啟動(dòng)GOOGLE地圖的應(yīng)用時(shí),顯示的就是剛才的地圖,實(shí)際上是同一個(gè)Activity,實(shí)際上這就引入了singleInstance。singleInstance模式就是將該Activity單獨(dú)放入一個(gè)棧中,這樣這個(gè)棧中只有這一個(gè)Activity,不同應(yīng)用的intent都由這個(gè)Activity接收和展示,這樣就做到了共享。當(dāng)然前提是這些應(yīng)用都沒(méi)有被銷毀,所以剛才是按下的HOME鍵,如果按下了返回鍵,則無(wú)效
- android:multiprocess——是否允許多進(jìn)程,默認(rèn)是false
- android:noHistory——當(dāng)用戶從Activity上離開(kāi)并且它在屏幕上不再可見(jiàn)時(shí),Activity是否從Activity stack中清除并結(jié)束。默認(rèn)是false。Activity不會(huì)留下歷史痕跡
- android:screenOrientation——activity顯示的模式
- 默認(rèn)為unspecified:由系統(tǒng)自動(dòng)判斷顯示方向
- landscape橫屏模式,寬度比高度大
- portrait豎屏模式, 高度比寬度大
- user模式,用戶當(dāng)前首選的方向
- behind模式:和該Activity下面的那個(gè)Activity的方向一致(在Activity堆棧中的)
- sensor模式:有物理的感應(yīng)器來(lái)決定。如果用戶旋轉(zhuǎn)設(shè)備這屏幕會(huì)橫豎屏切換
- nosensor模式:忽略物理感應(yīng)器,這樣就不會(huì)隨著用戶旋轉(zhuǎn)設(shè)備而更改了
- android:stateNotNeeded——activity被銷毀或者成功重啟時(shí)是否保存狀態(tài)
- android:windowSoftInputMode——activity主窗口與軟鍵盤的交互模式,可以用來(lái)避免輸入法面板遮擋問(wèn)題,Android1.5后的一個(gè)新特性。
- 這個(gè)屬性能影響兩件事情:
- 【A】當(dāng)有焦點(diǎn)產(chǎn)生時(shí),軟鍵盤是隱藏還是顯示
- 【B】是否減少活動(dòng)主窗口大小以便騰出空間放軟鍵盤
- 各值的含義:
- 【A】stateUnspecified:軟鍵盤的狀態(tài)并沒(méi)有指定,系統(tǒng)將選擇一個(gè)合適的狀態(tài)或依賴于主題的設(shè)置
- 【B】stateUnchanged:當(dāng)這個(gè)activity出現(xiàn)時(shí),軟鍵盤將一直保持在上一個(gè)activity里的狀態(tài),無(wú)論是隱藏還是顯示
- 【C】stateHidden:用戶選擇activity時(shí),軟鍵盤總是被隱藏
- 【D】stateAlwaysHidden:當(dāng)該Activity主窗口獲取焦點(diǎn)時(shí),軟鍵盤也總是被隱藏的
- 【E】stateVisible:軟鍵盤通常是可見(jiàn)的
- 【F】stateAlwaysVisible:用戶選擇activity時(shí),軟鍵盤總是顯示的狀態(tài)
- 【G】adjustUnspecified:默認(rèn)設(shè)置,通常由系統(tǒng)自行決定是隱藏還是顯示
- 【H】adjustResize:該Activity總是調(diào)整屏幕的大小以便留出軟鍵盤的空間
- 【I】adjustPan:當(dāng)前窗口的內(nèi)容將自動(dòng)移動(dòng)以便當(dāng)前焦點(diǎn)從不被鍵盤覆蓋和用戶能總是看到輸入內(nèi)容的部分
Androidmanifest.xml的結(jié)構(gòu)——(<intent-filter>)
- <intent-filter android:icon="drawable resource"
- android:label="string resource"
- android:priority="integer" >
- <action />
- <category />
- <data />
-
- </intent-filter>
- android:priority(解釋:有序廣播主要是按照聲明的優(yōu)先級(jí)別,如A的級(jí)別高于B,那么,廣播先傳給A,再傳給B。優(yōu)先級(jí)別就是用設(shè)置priority屬性來(lái)確定,范圍是從-1000~1000,數(shù)越大優(yōu)先級(jí)別越高)
- Intent filter內(nèi)會(huì)設(shè)定的資料包括action,data與category三種。也就是說(shuō)filter只會(huì)與intent里的這三種資料作對(duì)比動(dòng)作
- action屬性:
- action很簡(jiǎn)單,只有android:name這個(gè)屬性。常見(jiàn)的android:name值為android.intent.action.MAIN,表明此activity是作為應(yīng)用程序的入口。有關(guān)android:name具體有哪些值,可參照這個(gè)網(wǎng)址:http://hi.baidu.com/linghtway/blog/item/83713cc1c2d053170ff477a7.html
- category屬性:
- category也只有android:name屬性。常見(jiàn)的android:name值為android.intent.category.LAUNCHER(決定應(yīng)用程序是否顯示在程序列表里)
Androidmanifest.xml的結(jié)構(gòu)——data屬性
- <data android:host="string"
- android:mimeType="string"
- android:path="string"
- android:pathPattern="string"
- android:pathPrefix="string"
- android:port="string"
- android:scheme="string"/>
- 每個(gè)<data>元素指定一個(gè)URI和數(shù)據(jù)類型(MIME類型)。它有四個(gè)屬性scheme、host、port、path對(duì)應(yīng)于URI的每個(gè)部分:
- scheme://host:port/path
- scheme的值一般為"http",host為包名,port為端口號(hào),path為具體地址。如:http://com.test.project:200/folder/etc
- 其中host和port合起來(lái)構(gòu)成URI的憑據(jù)(authority),如果host沒(méi)有指定,則port也會(huì)被忽略
- 要讓authority有意義,scheme也必須要指定。要讓path有意義,scheme+authority也必須要指定
- mimeType(指定數(shù)據(jù)類型),若mimeType為'Image',則會(huì)從content Provider的指定地址中獲取image類型的數(shù)據(jù)。還有'video'啥的,若設(shè)置為video/mp4,則表示在指定地址中獲取mp4格式的video文件
- 而pathPattern和PathPrefix主要是為了格式化path所使用的
Androidmanifest.xml的結(jié)構(gòu)——<meta-data>
- <meta-data android:name="string"
- android:resource="resource specification"
- android:value="string"/>
這是該元素的基本結(jié)構(gòu).可以包含在<activity> <activity-alias> <service> <receiver>四個(gè)元素中。
- android:name(解釋:元數(shù)據(jù)項(xiàng)的名字,為了保證這個(gè)名字是唯一的,采用java風(fēng)格的命名規(guī)范,如com.woody.project.fried)
- android:resource(解釋:資源的一個(gè)引用,指定給這個(gè)項(xiàng)的值是該資源的id。該id可以通過(guò)方法Bundle.getInt()來(lái)從meta-data中找到。)
- android:value(解釋:指定給這一項(xiàng)的值。可以作為值來(lái)指定的數(shù)據(jù)類型并且組件用來(lái)找回那些值的Bundle方法:[getString],[getInt],[getFloat],[getString],[getBoolean])
Androidmanifest.xml的結(jié)構(gòu)——<service>
- 【1】service與activity同級(jí),與activity不同的是,它不能自己?jiǎn)?dòng)的,運(yùn)行在后臺(tái)的程序,如果我們退出應(yīng)用時(shí),Service進(jìn)程并沒(méi)有結(jié)束,它仍然在后臺(tái)運(yùn)行。比如聽(tīng)音樂(lè),網(wǎng)絡(luò)下載數(shù)據(jù)等,都是由service運(yùn)行的
- 【2】service生命周期:Service只繼承了onCreate(),onStart(),onDestroy()三個(gè)方法,第一次啟動(dòng)Service時(shí),先后調(diào)用了onCreate(),onStart()這兩個(gè)方法,當(dāng)停止Service時(shí),則執(zhí)行onDestroy()方法,如果Service已經(jīng)啟動(dòng)了,當(dāng)我們?cè)俅螁?dòng)Service時(shí),不會(huì)在執(zhí)行onCreate()方法,而是直接執(zhí)行onStart()方法
- 【3】service與activity間的通信
- Service后端的數(shù)據(jù)最終還是要呈現(xiàn)在前端Activity之上的,因?yàn)閱?dòng)Service時(shí),系統(tǒng)會(huì)重新開(kāi)啟一個(gè)新的進(jìn)程,這就涉及到不同進(jìn)程間通信的問(wèn)題了(AIDL),Activity與service間的通信主要用IBinder負(fù)責(zé)。
Androidmanifest.xml的結(jié)構(gòu)——<receiver>
- receiver的屬性與service一樣
- BroadcastReceiver:用于發(fā)送廣播,broadcast是在應(yīng)用程序之間傳輸信息的一種機(jī)制,而B(niǎo)roadcastReceiver是對(duì)發(fā)送出來(lái)的 Broadcast進(jìn)行過(guò)濾接受并響應(yīng)的一類組件
Androidmanifest.xml的結(jié)構(gòu)——<uses-library>
用戶庫(kù),可自定義。所有android的包都可以引用
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。