Android學習筆記(一)

AndroidManifest.xml文件中和的區別和用法

1. 是官方定義的權限,是調用別人的東西的時候自己需要聲明的權限;而是自己定義的權限,是別人要調用這個程序時需要聲明的權限。因而一般情況下是不需要為自己的應用程序聲明某個權限,除非提供瞭供其他應用程序調用的代碼或者數據,這個時候才需要使用標簽。

2. 和的作用於不同,兩者是在與同級節點的地方聲明,但是作用於整個application中,而隻作用於application內部的各個組件,如、、等內部中。

用法示例

在同節點出聲明瞭自己的權限 ,則在中的某個中便可使用這個權限,如下:

Android:permission= “com.notfatboy.project.VIEW_MYDATA”

當然,還需使用來聲明該應用程序需要這個權限,這樣應用程序才能正常工作。如下:

語法格式如下:

<permission android:description= “string resource”

android:icon= “drawableresource”

android:label= “string resource”

android:name= “string”

android:permissionGroup= “string”

android:protectionLevel= [“normal”| “dangerous” | “signature” | “signatureOrSystem”] />

其中,android:name是描述權限的名稱;androidLprotectionLevel屬性是必須要聲明的,用於告訴系統通知用戶的應用的許可要求;permissionGroup屬性是可選的,用於協助系統向用戶顯示權限,很少自定義,最好使用已經定義的,使用起來更方便。

Android控制硬加速hardwareAccelerated

從Android 3.0 (API level 11)開始,Android的2D顯示管道被設計成更加支持硬加速,硬加速使用GPU承擔所有在View的canvas上執行的繪制操作。啟用硬加速最簡單的方法是對整個應用啟用硬件加速。如果你的應用程序隻使用標準的view和Drawable,全局啟用硬加速不會帶來任何負面影響。然而,硬加速不是被所有的2D繪制支持,所以啟用它時可能對自定義繪制產生影響。出現的問題經常是不可見的,可能是異常,也可能是錯誤地顯示瞭像素。為避免這些問題,Android允許在,
, , 中啟用會禁止硬加速的能力。即添加屬性android:hardwareAccelerated=“true”。

Window級別是比application和activity級別更高粒度的控制,用以下方法為一個window啟用硬加速:

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

WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

但不能在window級別禁止硬加速。

View級別是比application,activity和window級別更高粒度的控制,可以在運行時使用以下代碼禁止個別view的硬加速:myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null),但不能在view級別啟用硬件加速。

如何判定一個View是否被硬加速: 有時一個應用瞭解是否啟用瞭硬件加速是很有用的,對那些自定義View之類的東西尤其重要。在應用中做瞭一些不被最新的管線所支持的自定義繪制時這更加重要。有兩種方法可以檢查應用是否被硬加速: View.isHardwareAccelerated(): 如果View附加到一個硬加速的window上就返回true;Canvas.isHardwareAccelerated(): 如果Canvas被硬加速瞭就返回true。如果你必須在你的繪制代碼中做這個,應使用Canvas.isHardwareAccelerated()而不是
View.isHardwareAccelerated()。當一個view附加到一個硬加速的window上,它仍可以使用非硬件速的Canvas進行 繪制操作.比如當為瞭高速緩存而把一個view畫到一個bitmap中。

Android:configChanges屬性

android:configChanges屬性用在元素中控制切屏(橫屏與豎屏之間切換)時,是否重新調用各個聲明周期。值為“orientation|screenSize”表示切屏時可以阻止程序在運行時重新加載Activity;值為“orientation”表示切屏時會重新調用各個生命周期,切橫、豎屏時隻會執行一次;不設置android:configChanges屬性,切屏會重新調用各個生命周期,切橫屏時會執行一次,切豎屏時會執行兩次。

android:screenOrientation屬性

該屬性用於限制橫豎屏的切換,屬性值為“portrait”表示限制該頁面隻顯示豎屏,屬性值為“landscape”表示限制該頁面隻顯示橫屏。

android:launchMode屬性

launchMode在多個Activity跳轉的過程中扮演著重要的角色,它可以決定是否生成新的Activity實例,是否重用已存在的Activity實例,是否和其他Activity實例共用一個task。這裡簡單介紹下task的概念,task是一個具有棧結構的對象,一個task可以管理多個Activity。啟動一個應用,也就創建瞭一個與之對應的task。

Activity一共有四種launchMode:standard, singleTop, singleTask, singleInstance。我們可以在AndroidManifest.xml配置的android:launchMode屬性為以上四種之一。下面分別介紹四個值:

1. standard: standard模式是默認的啟動模式,不管task中有沒有已存在的Activity實例,當加載Activity實例時,系統都會生成新的實例放在task的棧頂。

2. singleTop: 從Activity1跳到Activity2,再從Activity2跳到Activity1,如果此時task棧頂為Activity1實例,則不創建新的實例,直接使用該實例;如果棧頂不是Activity1的實例,則需要創建Activity1的新的實例。

3. singleTask: 從Activity1跳到Activity2,再從Activity2跳到Activity1時,隻要task棧中Activity1的實例,不管是在棧頂還是棧底,都不會創建Activity1的新實例,而是直接使用已存在的Activity1實例。

4. singleInstance: 在全局范圍內一個Activity隻有一個對應的實例,即便是在不同的apk中調用。

android:windowSoftInputMode屬性

用於定義activity主窗口與軟鍵盤的交互模式,可以用來避免輸入法面板遮擋的問題,Android1.5後新增加的一個特性。該屬性能影響兩件事:

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

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

它的設置必須是下面列表中的一個值,或者是一個“state…”值加一個“adjust…”值的組合。在任一組設置多個值—多個“state…”values,例如&mdash有未定義的結果。各個值之間用|分開。例如: ,在這設置的值將覆蓋在主題中設置的值。

各值的含義:

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

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

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

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

stateVisible:軟鍵盤通常是可見的

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

adjustUnspecified:默認設置,通常由系統自行決定是隱藏還是顯示

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

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

android:exported屬性

這個屬性用於指示該服務是否能夠被其他應用程序組件調用或跟它交互。如果設置為true,則能夠被調用或交互,否則不能。設置為false時,隻有同一個應用程序的組件或帶有相同用戶ID的應用程序才能啟動或綁定該服務。它的默認值依賴與該服務所包含的過濾器。沒有過濾器則意味著該服務隻能通過指定明確的類名來調用,這樣就是說該服務隻能在應用程序的內部使用(因為其他外部使用者不會知道該服務的類名),因此這種情況下,這個屬性的默認值是false。另一方面,如果至少包含瞭一個過濾器,則意味著該服務可以給外部的其他 應用提供服務,因此默認值是true。這個屬性不是限制把服務暴露給其他應用程序的唯一方法。還可以使用權限來限制能夠跟該服務交互的外部實體。

android:authorities屬性

用於表明content的提供商,值為provider所在包的名字+provider本身。例如: android:authorities=”com.bbk.VoiceAssistant.provider”

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。