- Activity的创建和配置
要创建 Activity 可以继承Activity类或者现有的子类,并且实现Acivity在其生命周期的各种状态之间转变时(例如创建 Activity、停止 Activity、恢复 Activity 或销毁 Activity 时)系统调用的回调方法,必须实现
onCreate()
方法,必须在此方法内调用setContentView()
来为Activity指定一个布局,比如setContentView(R.layout.my_activity);
在配置Activity的时候一定要记得在AndroidManifest.xml中进行注册和配置,比如
<manifest ... >
<application ... >
<activity android:name=".MyActivity" />
...
</application ... >
...
</manifest >
在Activity元素中,可以设置标签,图标,风格主题等,但是android:name
标签是必须要指定一个类名,其中的.
表示该类在当前程序所在的包下,如果该类不在当前包下,则需要用完成的包名+类名
- Android开发者官网关于Activity标签的介绍(此处 上网姿势要对)
以下标签后的注释仅供您参考下,毕竟英语水平有限,还有就是我还是个新手,对于以下标签的理解还不是很透彻,可能会误导大家,所以具体的使用方法请参照官网相关API指南
<activity android:allowEmbedded=["true" | "false"] //
android:allowTaskReparenting=["true" | "false"]
android:alwaysRetainTaskState=["true" | "false"]
android:autoRemoveFromRecents=["true" | "false"] //true 任务将会自动的从overview screen中移除
android:banner="drawable resource"
android:clearTaskOnLaunch=["true" | "false"] //个属性用来标记是否从task清除除根Activity之外的所有的Activity,“true”表示清除,“false”表示不清除,默认为“false”。同样,这个属性也只对根Activity起作用,其他的Activity都会被忽略。 如果设置了这个属性为“true”,每次用户重新启动这个应用时,都只会看到根Activity,task中的其他Activity都会被清除出栈。如果我们的应用中引用到了其他应用的Activity,这些Activity设置了allowTaskReparenting属性为“true”,则它们会被重新宿主到有共同affinity的task中。 每次home后,启动都会清除task中的其他activity。
android:configChanges=["mcc", "mnc", "locale",
"touchscreen", "keyboard", "keyboardHidden",
"navigation", "screenLayout", "fontScale",
"uiMode", "orientation", "screenSize",
"smallestScreenSize"]
android:documentLaunchMode=["intoExisting" | "always" |
"none" | "never"]
android:enabled=["true" | "false"] //是否可以被实例化
android:excludeFromRecents=["true" | "false"]
android:exported=["true" | "false"] //Activity 是否能被其他程序的启动,True 表示可以,false 表示只能被同一程序的组件或者拥有相同用户签名的程序启动,默认值取决于该Activity intent filters
android:finishOnTaskLaunch=["true" | "false"]
android:hardwareAccelerated=["true" | "false"] //是否开启硬件加速
android:icon="drawable resource" //程序的图标
android:label="string resource" //Activity标题显示的文字
android:launchMode=["multiple" | "singleTop" |
"singleTask" | "singleInstance"]//Activity的四种启动模式,默认为standard
android:maxRecents="integer" //设置该Activity在总览屏幕(overview screen)的最大任务数 有效值介于1-50 默认为16,低内存设备上限为25
android:multiprocess=["true" | "false"]
android:name="string" //Activity对应的类名
android:noHistory=["true" | "false"] // true 表示当用户离开当前Activity并且不在屏幕上显示该Activity时,会从堆栈中移除该Activity并且调用finish()销毁.默认值为false 当为true时 onActivityResult() 该方法将不会被调用
android:parentActivityName="string" //设置启动权限 可用来完成向上导航(Up navigation)
android:permission="string" //权限
android:process="string"
android:relinquishTaskIdentity=["true" | "false"]
android:screenOrientation=["unspecified" | "behind" |
"landscape" | "portrait" |
"reverseLandscape" | "reversePortrait" |
"sensorLandscape" | "sensorPortrait" |
"userLandscape" | "userPortrait" |
"sensor" | "fullSensor" | "nosensor" |
"user" | "fullUser" | "locked"]
android:stateNotNeeded=["true" | "false"]
android:taskAffinity="string"
android:theme="resource or theme" // Activity 的主题样式
android:uiOptions=["none" | "splitActionBarWhenNarrow"]
android:windowSoftInputMode=["stateUnspecified",
"stateUnchanged", "stateHidden",
"stateAlwaysHidden", "stateVisible",
"stateAlwaysVisible", "adjustUnspecified",
"adjustResize", "adjustPan"] >
. . .
</activity>
2.Activity的启动和关闭
Activity两种启动方式
-
startActivity(Intent intent)
启动其他Activity -
startActivityForResult(Intent intent ,int requestCode)
Activity 将通过回调onActivityResult()
方法得到新启动Activity的结果,requestCode参数代表启动Activity的请求码
Activity 结束方式
-
finish()
结束当前Activity -
finishActivity(int requestCode)
结束以startActivityForResult(Intent intent,int requestCode)
方法启动的Activity
3.Activity的生命周期
在Activity的生命周期中主要有以下几个方法
-
onCreate(Bundle savedStatus)
创建Activity时调用 -
onStart()
启动Activity时调用 -
onResume()
恢复Activity时调用 -
onPause()
暂停Activity时调用 -
onStop()
停止Activity时调用 -
onDestroy()
销毁Activity时调用 -
onRestart()
在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了
Resumed:已恢复状态,此时Activity位于前台,并且获得用户焦点
pasued : 暂停状态, 其他Activity获得用户焦点,但该Activity仍然可见,仍存在与内存中
Stoped : 停止状态,该Activity完全被其他Activity覆盖,仍存在于内存中,可随时被系统杀死
整个生命周期: 从onCreate()
开始到onDestroy()
结束
可见生命周期: 从onStart()
到onStop()
可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互,在这两个方法之间,需要保持显示给用户的UI数据和资源等.
前台生命周期: 从onResume()
到onPase()
该Activity处于所有Activity的最前面,和用户交互.
4.Activity的启动模式
android:launchMode=["multiple" | "singleTop" |
"singleTask" | "singleInstance"]//Activity的四种启动模式,默认为standard
- standard: 在standard模式下,每当启动一个新的活动,它就会在返回栈中入栈,并处栈顶的位置。对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中存在每次启动都会创建新的实例,Activity 可以多次实例化,而每个实例均可属于不同的任务,并且一个任务可以拥有多个实例。
- singleTop :该模式下在启动活动时如果发现返回栈的栈顶已经是该活动时,则认为可以直接使用它,不会再创建新的活动实例,如果不在栈顶则会创建新的实例。Activity 可以多次实例化,而每个实例均可属于不同的任务,并且一个任务可以拥有多个实例(但前提是位于返回栈顶部的 Activity 并不是 Activity 的现有实例)
- singleTask :每次启动该活动时系统首先在返回栈中检测是否存在该活动的实例,如果已经存在则会直接使用该实例,并把在这个活动之上的所有活动统统出栈,在如果没有则会创建一个新的活动实例
- singleInstance :会启用一个新的返回栈来管理这个活动