1. 程式人生 > >關於AndroidManifest中的一些配置

關於AndroidManifest中的一些配置

一:android:configChanges = " orientation | keyboardHidden  | screenSize"

android:configChanges="orientation" 這個屬性指定了要捕獲“螢幕方向”變化這個行為,當捕獲這個行為後就會呼叫Activity的

onConfigurationChanged()方法。然而當我們在手機上除錯的時候就會發現,其實並沒有執行onConfigurationChanged()這個方法,

依舊銷燬當前Activity並建立新的Activity例項。

這是因為android:configChanges只設置了"orientation" 這一個屬性,這樣做在低版本上是可以起到作用的,但是在android 4.0 以上

就不起作用,還要加上"screenSize",才能起效果。

預設情況,當“螢幕方向”或“鍵盤顯示隱藏”變化時都會銷燬當前Activity,建立新的Activity。如果不希望重新建立Activity例項,可以按如下在AndroidManifest.xml中配置Activity:

<activity
android:name=".activity.webview.WebViewActivity"
android:configChanges="orientation|screenSize|keyboardHidden"></activity>
微課專案舉例:把Activity進行如下設定,在自己android6.0的華為手機上,從豎屏切換到橫屏,會呼叫onDestroy,onCreate方法。再切換會豎屏的時候不會再銷燬activity了。
只有豎屏切橫屏的時候才會執行銷燬重新建立的過程。
<activityandroid:name=".activity.common.CommonWebViewActivity"
android:configChanges="orientation"
android:screenOrientation="portrait" />
<activity
關於configChanges的一些其他設定: android:configChanges=["mcc", "mnc", "locale","touchscreen", "keyboard", "keyboardHidden",
"navigation", "screenLayout",
"fontScale", "uiMode","orientation", "screenSize", "smallestScreenSize"]
mcc:IMSI(國際移動使用者識別碼)發生改變,檢測到SIM卡,或者更新MCC
mnc:IMSI網路發生改變,檢測到SIM卡,或者更新MCC
其中mcc和mnc理論上不可能發生變化
locale:語言發生改變,使用者選擇了一個新的語言,文字應該重新顯示
touchscreen:觸控式螢幕發生改變,這通常是不應該發生的
keyboard:鍵盤型別發生改變,例如,使用者使用了外部鍵盤
keyboardHidden:鍵盤發生改變,例如,使用者使用了硬體鍵盤(這裡說的鍵盤是硬鍵盤,自己手機裡彈出的是軟鍵盤)
navigation:導航發生改變,(這通常不應該發生) 舉例:連線藍芽鍵盤,連線後確實導致了navigation的型別發生變化。因為連線藍芽鍵盤後,
我可以使用方向鍵來navigate了
screenLayout:螢幕的佈局發生改變,這可能導致啟用不同的顯示
fontScale:全域性字型大小縮放發生改變
orientation:裝置旋轉,橫向顯示和豎向顯示模式切換。
screenSize: 螢幕大小改變了
smallestScreenSize: 螢幕的物理大小改變了,如:連線到一個外部的螢幕上

二:android:screenOrientation

一般使用者可以自己設定手機的橫豎屏切換,只要點選自己手機的“螢幕旋轉”就可以了。但是這個操作更改的是自己整個手機的橫豎屏切換。當手機沒有關閉橫豎屏切換

功能時,系統一旦觸發橫豎屏切換,預設狀態下,當前活動的App的介面就會進行橫豎屏切換,由於橫豎屏的介面尺寸等引數不同,很多軟體在設計和開發中為了避免橫豎屏

切換時引發不必要的麻煩,通常需要讓App禁止掉橫豎屏的切換,這就需要通過在AndroidManifest.xml中設定activity中的android:screenOrientation屬性值來實現。

該android:screenOrientation屬性,他有以下幾個引數:

"unspecified":預設值 由系統來判斷顯示方向.判定的策略是和裝置相關的,所以不同的裝置會有不同的顯示方向.

"landscape":橫屏顯示(寬比高要長)

"portrait":豎屏顯示(高比寬要長)

"user":使用者當前首選的方向

"behind":和該Activity下面的那個Activity的方向一致(在Activity堆疊中的)

"sensor":有物理的感應器來決定。如果使用者旋轉裝置這螢幕會橫豎屏切換。

"nosensor":忽略物理感應器,這樣就不會隨著使用者旋轉裝置而更改了("unspecified"設定除外)。

比如下列設定

android:screenOrientation="portrait"

則無論手機如何變動,擁有這個屬性的activity都將是豎屏顯示。

android:screenOrientation="landscape",為橫屏顯示。

上述修改也可以在Java程式碼中通過類似如下程式碼來設定

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE),如果你在自己的java程式碼中通過setRequestedOrientation來設定

橫豎屏切換了,那麼你在AndroidManifest中設定的android:screenOrientation屬性就沒有用了

更多關於橫豎屏的知識:

http://blog.csdn.net/wenzhi20102321/article/details/68941263

三:android:exported

android:exported 是Android的四大元件 Activity,Service,Provider,Receiver 都會有的一個屬性。

總體來說它的主要作用是:是否支援其它應用呼叫當前元件。 
預設值:如果包含有intent-filter 預設值為true; 沒有intent-filter預設值為false。

在Activity中該屬性用來標示:當前Activity是否可以被另一個Application的元件啟動:true允許被啟動;false不允許被啟動。

如果被設定為了false,那麼這個Activity將只會被當前Application或者擁有同樣user ID的Application的元件呼叫。

exported 的預設值根據Activity中是否有intent filter 來定。沒有任何的filter意味著這個Activity只有在詳細的描述了他的class name後

才能被喚醒 .這意味著這個Activity只能在應用內部使用,因為其它application並不知道這個class的存在。所以在這種情況下,它的預設

值是false。從另一方面講,如果Activity裡面至少有一個filter的話,意味著這個Activity可以被其它應用從外部喚起,這個時候它的預設值

是true。

其實,不只有這個屬性可以指定Activity是否暴露給其它應用,也可以使用permission來限制外部實體喚醒當前Activity


四:android:hardwareAccelerated

這個屬性是用來控制硬體加速的,從android3.0開始有這個屬性。 可以在以下四個級別進行硬體加速控制:Application、Activity、Window、View

Application級(針對整個應用的)
  在AndroidManifest檔案中,把以下屬性新增到<application>標籤來對你的整個應用啟用硬加速:

<applicationandroid:hardwareAccelerated="true" ...>

Activity級
  如果你的應用在全域性啟用硬加速時行為不正確,你可以對個別Activities單獨啟用硬加速.欲在actvity級別啟用或禁止硬加速,

你可以對<activity>元素使用android:hardwareAccelerated屬性.

下面的例子在整個應用中啟用了硬加速但對一個activity禁止了硬加速:

<application android:hardwareAccelerated="true">

<activity... />

<activity android:hardwareAccelerated="false" />

</application>

Window級
  如果你需要更高顆粒度的控制,你可以使用以下程式碼為一個window啟用硬加速:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

注:現在你還不能在window級別禁止硬加速.

View級

你可以在執行時使用以下程式碼禁止個別的View的硬加速:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);

注:當前你不能在View級別啟用硬加速.View層有除禁止硬加速之外的其它功能.

判定一個View是否能被硬加速

  有時一個應用瞭解是否啟用了硬體加速是很有用的,對那些自定義View之類的東西尤其重要.在你的應用做了一些不被最新的管線

所支援的自定義繪製時這更加重要.

  有兩種方法可以檢查應用是否被硬加速:

View.isHardwareAccelerated():如果View附加到一個硬加速的window上就返回true.

Canvas.isHardwareAccelerated():如果Canvas被硬加速了就返回true.

  如果你必須在你的繪製程式碼中做這個,應使用Canvas.isHardwareAccelerated()而不是View.isHardwareAccelerated().

當一個view附加到一個硬加速的window上,它仍可以使用非硬體速的Canvas進行繪製操作.

比如當為了快取記憶體而把一個view畫到一個bitmap中.

五:android:windowSoftInputMode

activity主視窗與軟鍵盤的互動模式,可以用來避免輸入法面板遮擋問題,Android1.5後的一個新特性。

這個屬效能影響兩件事情:

1、當有焦點產生時,軟鍵盤是隱藏還是顯示

2、是否減少活動主視窗大小以便騰出空間放軟鍵盤

android:windowSoftInputMode屬性值:

stateUnspecified:軟鍵盤的狀態並沒有指定,系統將選擇一個合適的狀態或依賴於主題的設定

stateUnchanged:當這個activity出現時,軟鍵盤將一直保持在上一個activity裡的狀態,無論是隱藏還是顯示

stateHidden:使用者選擇activity時,軟鍵盤總是被隱藏

stateAlwaysHidden:當該Activity主視窗獲取焦點時,軟鍵盤也總是被隱藏的

stateVisible:軟鍵盤通常是可見的

stateAlwaysVisible:使用者選擇activity時,軟鍵盤總是顯示的狀態

adjustUnspecified:預設設定,通常由系統自行決定是否調整大小

adjustResize:該Activity總是調整螢幕的大小以便留出軟鍵盤的空間

adjustPan:當前視窗的內容將自動移動以便當前焦點從不被鍵盤覆蓋和使用者能總是看到輸入內容的部分

六:android:alwaysRetainTaskState

alwaysRetainTaskState翻譯過來就是“總是保留任務棧狀態”,就是AndroidManifest中設定 android:alwaysRetainTaskState = true 的那個Activity所在的任務棧,在我們按下HOME鍵回到桌面後, 保留此任務棧的狀態,當我們點選應用圖片再次開啟APP時,系統會判斷是否已經存在以這個Activity為 根Activity的任務棧,如果有就直接使用該棧,並顯示棧頂的Activity。 Activity中有一個方法,moveTaskToBack
<activity
android:name=".activity.frame.FrameActivity"
android:alwaysRetainTaskState="true"
android:configChanges="orientation|keyboardHidden"
android:exported="false"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan"></activity>
Task是任務棧,是用來記錄Activity開啟順序、儲存狀態等的。 比例這裡,我們在AndroidManifest中設定FrameActivity為根Activity(就是應用預設啟動的Activity)。我們開啟應用後就進入到FrameActivity介面,在一次開啟ChatActivity、ChatSetingActivity。這個時候從棧底到棧頂一次是FrameActivity、ChatActivity、ChatSetingActivity,然後點選HOME鍵返回桌面,再點選APP圖示回到應用, 這個時候系統就會直接使用有FrameActivity這個根Activity所在的任務棧了,並顯示棧頂的Activity,也就是ChatSetingActivity。

七:android:launchMode

launchMode在多個Activity跳轉的過程中扮演著重要的角色,它可以決定是否生成新的Activity例項, 是否重用已存在的Activity例項,是否和其他Activity例項公用一個task裡。

Activity一共有以下四種launchMode:

1、standard預設啟動模式,每次跳轉 系統都會在task中生成一個新的Activity例項,並且放於棧

結構的頂部。不管這個Activity例項在Task中是否已經存在,都建立新的例項。

2、singleTop如果發現有對應的Activity例項正位於棧頂,則重複利用,如果棧頂沒有就生成新的例項。

3、singleTask 如果發現有對應的Activity例項,則使此Activity例項之上的其他Activity例項統統出棧,

是此Activity例項成為棧頂物件,顯示到幕前。

4、singleInstance 會啟用一個新的棧結構,將Acitvity放置於這個新的棧結構中,並保證不再有

其他Activity例項進入。

八:android:noHistory

設定 android:noHistory=true後,該Activity在statck中不留歷史痕跡。預設的值是false。

舉例說明,假設有三個Activity分別是:A,B,C。這三個Activity可以依次順序啟動下一個Activity,
A——> B——>C 在AndroidManifest.xml中配置B的屬性為:android:noHistory=true。其他兩個不做特別設定, 僅僅作為一般的Activity處理。可以觀察到,A啟動後,從A跳轉到B,再從B跳轉到C,進入C後, 此時如果按返回鍵,將直接進入A,而不是B。簡單的跳轉邏輯路線: A –> B –> C –> 按返回鍵 –> A
綜上,可以這麼理解android:noHistory=true對Activity行為的影響:當該Activity螢幕不可見時,
相當於Android系統呼叫Activity的finish()方法結束了該Activity。

九:android:allowBackup

Android屬性allowBackup安全風險源於adb backup容許任何一個能夠開啟USB 除錯開關的人從Android手機中 複製應用資料到外設,一旦應用資料被備份之後,所有應用資料都可被使用者讀取;adb restore容許使用者指定一個 恢復的資料來源(即備份的應用資料)來恢復應用程式資料的建立。因此,當一個應用資料被備份之後,使用者即 可在其他Android手機或模擬器上安裝同一個應用,以及通過恢復該備份的應用資料到該裝置上,在該裝置上開啟 該應用即可恢復到被備份的應用程式的狀態。
尤其是通訊錄應用,一旦應用程式支援備份和恢復功能,攻擊者即可通過adb backup和adb restore進行恢復新安裝
的同一個應用來檢視聊天記錄等資訊;對於支付金融類應用,攻擊者可通過此來進行惡意支付、盜取存款等;因此 為了安全起見,開發者務必將allowBackup標誌值設定為false來關閉應用程式的備份和恢復功能,以免造成資訊洩露 和財產損失。 當allowBackup標誌值為true時,即可通過adb backup和adb restore來備份和恢復應用程式資料; adb(android debug bridge)除錯橋

相關推薦

struts2一些配置

com 分享 自己 es2017 命名空間 9.png blog alt 中一 包的配置:就和平時java包一樣,訪問時要加上命名空間所定義的名字,這樣就可以寫自己負責的模塊 struts2中一些配置

關於AndroidManifest一些配置

一:android:configChanges = " orientation | keyboardHidden  | screenSize" android:configChanges="orie

5、xamarin.android 如何對AndroidManifest.xml 進行配置和調整

receive custom 5.1 包裝 view 調整 加權 啟動 callable 我們在翻看一些java的源碼經常會說我們要在AndroidManifest.xml 中添加一些東西。而我們使用xamarin裏面實際上是通過C#的特性Attribute進行標記實現的

解決maven工程 子工程一些配置讀取進來的問題

ava col lse onf compile XML pat cat -c 方案:在父工程中手動配置一些節點 <build> <!-- 插件 --> <plugins> <

Djangosetting一些配置

1.連線到pymysql資料庫的配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'BBSS', 'HOST': '127.0.0.1',

java讀取配置檔案的一些方法 getResourceAsStream 和 直接 FileInputStream 以及 配置System.getProperty("user.dir")所得的工作目錄

配置檔案位於 /src/ 下的情況已經由上述博主列出,需要的可以移步檢視,即以下幾個情況 1.路徑:src/aa.xml 2.位於src下同一個包下 3.位於src下不同包 不過本博主的專案是web專案,而配置檔案放在src檔案下容易因為快取導致更新不及時,

Linux系統一些常用的配置檔案

        Linux系統下有一些重要的配置檔案,例如配置防火牆過濾的檔案iptables,該檔案在CentOS下的路徑為/etc/sysconfig/iptables。如果我們要配置防火牆,那必須編輯它,但是Linux系統這些配置檔案比較多,不可以記住每一個配置檔案的

應用程式一些配置(許可權)

給應用配置許可權: <uses-permission android:name="android.permission.CALL_PHONE" />//打電話的許可權<uses-permission android:name="android.permis

stm32一些常用基本庫函式以及串列埠配置步驟

常用基本庫函式:void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)//使能埠時鐘 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_In

Hadoopnamenode/secondarynamenode/yarn的一些配置

Hadoop在進行namenode -format的前(偽分佈)一般會選擇預設的配置,除了指定備份和tmp目錄。 還有一些其他的配置在真正叢集的時候也是一定要進行配置的。 簡單記錄一下hadoop的主要配置檔案中core-site.xml  / hdfs-sit

MyEclipce一些配置

1、安裝 2、註冊 3、配置    window ----> preferences    (1)配置 JDK       java--->Installed JREs --> Add ---> JRE name ---> JRE home di

eclipse一些配置

分享 顯示 info clip nbsp resource bsp oms 9.png 1.顯示.setting 點擊三角號 選擇customsize view 取消.*resources eclipse中的一些配置

numpy一些常用函數的用法總結

num matrix 空白 記錄 維數 補充 結果 創建 array 先簡單記錄一下,後續補充詳細的例子 1. strip()函數 s.strip(rm):s為字符串,rm為要刪除的字符序列 只能刪除開頭或是結尾的字符或者字符串。不能刪除中間的字符或是字符串 當rm為空

redis 配置文件redis.conf 相關配置信息

redis.conf redis配置文件 知識點有點分散,一點一點記錄把:(嘿,這需要極大耐性呢)1、需要註意:當相關配置中的內存大小需要指定時,通過可能指定的格式為 1k 、 5GB、4M等,大小寫可以不區分。2、Redis 默認不是守護進程的方式進行,可以通過該配置項修改,使用 yes 啟用守護進

老男孩教育每日一題-2017年5月12日-磁盤知識點:linux系統LVM配置實現方法?

邏輯卷管理 磁盤 每日一題 1.題目老男孩教育每日一題-2017年5月12日-磁盤知識點:linux系統中LVM配置實現方法?2.參考答案01:將一個或多個物理分區創建為一個PV# pvcreate /dev/sdb{1,2} Physical volume "/dev/sdb1" success

gdb一些常用的調試命令

== 指定 函數名 filename expr ons 函數 pre 調用 show version :顯示gdb版本信息 info functions :列出可執行文件的所有函數名稱 step(縮寫s):進入函數(函數必須有調試信息) next(縮寫n):不進入函數,g

總結Selenium WebDriver一些鼠標和鍵盤事件的使用

ict 效果 control window 只需要 html 執行 text keyevent 在使用 Selenium WebDriver 做自動化測試的時候,會經常模擬鼠標和鍵盤的一些行為。比如使用鼠標單擊、雙擊、右擊、拖拽等動作;或者鍵盤輸入、快捷鍵使用、組合鍵使用

java讀取配置文件

eclips current base ips extc eas lac true ava 若是Java web項目,項目運行於tomcat或其他容器時,可以使用下面方式來獲取文件的輸入流 1、當屬性文件放在src下面時 InputStream is = Thread.c

Java一些jar包的作用

span 緩存 cxf 6.0 pri tag like servlet license axis.jar SOAP引擎包 commons-discovery-0.2.jar 用來發現、查找和實現可插入式接口,提供一些一般類實例化、單件的生命周期管理的常用方法. j

ubuntupycharm配置opencv2環境

rect ins oca 使用 code 後來 table 之間 sharp 在ubuntu中安裝pycharm、opencv2後。在pycharm環境中無法使用opencv,後來查資料顯示OpenCV is not pip-installable. You’ll nee