activity是拥有界面用户可以交互的组件。
应用一般由多个activity组成,他们之间有松散的连接一起。通常,会有一个主activity,它在应用启动后第一个显示。一个activity可以启动
另一个去实现不同的行为。系统用一个栈管理activity,当一个activity启动时,会将它置到栈顶,获得系统焦点,先前的就停止了。它遵守栈的后进先出原则,获得系统焦点的activity销毁后,上一个activity就会恢复。当activity的状态发生改变时,系统就会调用它的一些回调函数做出响应
I 创建activity
你必须创建activity的子类,重写activity一些回调函数,当activity的状态发生改变时,系统会调用相应的回调函数。下面是两个最重要的函数
onCreate() 你必须实现这个函数。但你创建一个activity时系统就会调用这个函数,初始化你activity组件。最重要的是,你必须调用
setContentView()为activity的用户接口定义布局。
onPause() 当这个activity失去用户的焦点,系统将调用这个函数。(并不意味这个activity被销毁了)
实现人机交互接口
视图结构提供了activity的人机用户接口 ,他们派生于View类,每个view控制一个矩形区域,响应用户操作
widget提供button, checkbox, image
Layout提供组建的布局
II 启动一个activity
通过startActivity()(传给它可以匹配后者的intent)启动另外一个activity,
你可以启动一个指定class名的activity如你要启动的activity的class名为demoActivity
Intent intent = new Intent(this, demoActivity.class);
startActivity(intent);
当然也可以让intent(描述某种行为隐示intent)携带额外某些信息去给下一个activity如:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(intent);
recipientArray为你想转递的数据。
III 启动可以返回结果的activity
使用 startActivityForResult() 代替startActivity()去启动activity。为了接收下一个activity返回的结果
你必须在原activity中实现onActivityResult()回调函数。当一下activity完成,它将通过携带结果的intent返回到onActivityResult()。
IIII 关闭activity
调用finish()关闭activity。也可以关闭之前启动的另外activity通过调用finishActivity().
注意 一般情况下,你不应该通过这些函数关闭指定的activity。系统会为你管理activity的生命周期。
管理activity生命周期
通过实现回调函数管理你的activity的生命周期对开发健壮的应用至关重要。它直接关系到其他activity,任务和栈
activity主要存在于三种状态:
1. resumed activity在前台并取得系统焦点(相当于running)。
2. paused 另外的activity在前台并取得系统焦点,但这个activity以显示。这种状态主要在这种情况下
顶端的显示activity没有覆盖全屏幕,paused的activity可见的。但当内存低时会被杀掉
3. stopped 这个activity完全被另外一个activity遮盖,这个stopped的activity扔在内存中。
不在可见,也不附属与窗口管理器。
activity的生命周期
1.完整的生命周期, 调用 onCreate()
和onDestroy()之间
2.显示的生命周期, 调用
onStart()
和onStop()之间
3.在前台的生命周期,调用 onResume() 和
onPause()之间
onPause(), onStop()
, 和onDestroy是三个运行之后系统可以杀死这个进程
Ⅴ保存activity状态
。。。
。。。
。。。
。。。
。。。
Ⅵ 协调activity
当从一个activity启动另外一个activity时,它们有一个状态的转化。
如activityA启动activityB的转化步骤:
1.activityA 的onPause()
2.activityB的 onCreate(),onStart()和onResumed()
3.ifactivityA完全不可见,activityA还需调用onStop()