Android学习笔记(一)
AndroidManifest.xml文件中<permission>和<uses-permission>的区别和用法
1. <uses-permission>是官方定义的权限,是调用别人的东西的时候自己需要声明的权限;而<permission>是自己定义的权限,是别人要调用这个程序时需要声明的权限。因而一般情况下是不需要为自己的应用程序声明某个权限,除非提供了供其他应用程序调用的代码或者数据,这个时候才需要使用<permission>标签。
2. <uses-permission>和<permission>的作用于不同,两者是在与<application>同级节点的地方声明,但<uses-permission>是作用于整个application中,而<permission>只作用于application内部的各个组件,如<activity>、<service>、<provider>等内部中。
用法示例
在<application>同节点出声明了自己的权限 <permissionandroid:name= “com.notfatboy.project.VIEW_MYDATA”>,则在<application>中的某个<activity>中便可使用这个权限,如下:
<application…>
<activity android:name= “com.notfatboy.project.FileManageActivity”…
Android:permission= “com.notfatboy.project.VIEW_MYDATA”
…
</activity>
当然,还需使用<uses-permission>来声明该应用程序需要这个权限,这样应用程序才能正常工作。如下:
<uses-permission android:name= “com.notfatboy.project.FileManageActivity”>
<permission>语法格式如下:
<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允许在<application>, <activity>, <window>, <view>中启用会禁止硬加速的能力。即添加属性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属性用在<activity>元素中控制切屏(横屏与竖屏之间切换)时,是否重新调用各个声明周期。值为“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配置<activity>的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有未定义的结果。各个值之间用|分开。例如: <activityandroid:windowSoftInputMode= “stateVisible|adjustResize”…>,在这设置的值将覆盖在主题中设置的值。
各值的含义:
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"
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。