Android学习笔记-Activity篇 .......................................................................................................... 1
一、activity创建: .................................................................................................................. 1 二、在manifest.xml中声明activity: ...................................................................................... 1 三、启动activity ...................................................................................................................... 2
3.1 启动不带返回结果的Activity ................................................................................... 2 3.2 启动带有返回结果的activity ................................................................................... 2 四、关闭activity ...................................................................................................................... 2 五、管理Activity的生命周期 ................................................................................................. 2
5.1 生命周期简介 ............................................................................................................ 2 5.2 保存activity状态 ...................................................................................................... 4 5.3 处理配置文件的改变 ................................................................................................ 4 5.4 Activity之间的合作 .................................................................................................... 4
Tasks and Back Stack ......................................................................................................................... 4
一、管理Task ........................................................................................................................... 5
1.1 定义launch模式 ....................................................................................................... 5 1.2 设置affinities ............................................................................................................. 5 1.3 清空the back stack .................................................................................................... 5 1.4 开始task .................................................................................................................... 6
Android学习笔记-Activity篇
一、activity创建:
activity被放入堆栈 必须实现Activity子类,以及覆盖一系列的返回方法如onCreate():setContentView()定义layout,onPause()
二、在manifest.xml中声明activity:
三、启动activity
3.1 启动不带返回结果的Activity
startActivity()启动activity并传给activity一个描述意图的intent。 The intent 或者是定义了一个额外的activity或者是描述了你想让activity执行的action类型。 启动另一个activity的例子: Intent intent = new Intent(this, SignInActivity.class); startActivity(intent); Intent还可以定义action(比如发邮件、发信息等应用本身没有的功能),来调用其他应用的action。 比如发邮件:
Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_EMAIL, recipientArray); startActivity(intent);
3.2 启动带有返回结果的activity
startActivityForResult()启动activity并实现onActivityResult()返回方法。当activity执行结束,会在onActivityResult方法中返回一个带有结果的intent。
四、关闭activity
finish():关闭当前activity;
finishActivity():强制关闭用startActivityForResult(Intent, int)打开的另一个activity;
五、管理Activity的生命周期 5.1 生命周期简介
Activity有三个基本的状态:
Resumed(running):在前台并获得用户焦点;
Paused:其它activity在前台并获得用户焦点,但并未完全覆盖此activity的界面,
此activity仍是alive的;
Stopped:此activity被完全覆盖但仍旧是alive的; entire lifetime:onCreate() ----------- onDestroy()
visible lifetime:onStart() _______ onStop();可见并可交互;
foreground lifetime:onResume() ________ onPause();activity处于前台并获得用户输入焦
点; 示例代码:
public class ExampleActivity extends Activity { @Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // The activity is being created. }
@Override
protected void onStart() { super.onStart();
// The activity is about to become visible. }
@Override
protected void onResume() { super.onResume();
// The activity has become visible (it is now \"resumed\"). }
@Override
protected void onPause() { super.onPause();
// Another activity is taking focus (this activity is about to be \"paused\"). }
@Override
protected void onStop() { super.onStop();
// The activity is no longer visible (it is now \"stopped\") }
@Override
protected void onDestroy() { super.onDestroy();
// The activity is about to be destroyed. } }
5.2 保存activity状态
使用回调方法onSaveInstanceState()来保存状态。系统将在activity即将被销毁时调用该方法并回传一个Bundle对象,该Bundle使用键值对(putstring())来存储状态信息。当activity重新返回时系统将bundle对象给onCreate()方法,以还原状态。
*onSaveInstanceState()不能保证一定被调用,但如果调用一定会在onStop()之前也可能在onPause()之前。系统也有默认的该方法,来保存一些必要状态,因此如果要覆盖该方法时一定要先调用父类的实现。
我们应该在onPause()中进行数据持久化。
可通过旋转设备来测试数据存储能力,旋转时会destroy recreate
5.3 处理配置文件的改变
当设备配置改变时(如横竖屏切换、键盘可用、语言等),activity将会destroy() 然后onCreate(),因此需要onSaveInstanceState() and onRestoreInstanceState()来处理状态。
5.4 Activity之间的合作
当一个activity启动另外一个activity时,两者的生命周期会产生交互。例如当A启动B时:
1. Activity A's onPause() method executes.
2. Activity B's onCreate(),onStart(), and onResume() methods execute in sequence. (Activity B
now has user focus.)
3. Then, if Activity A is no longer visible on screen, its onStop() method executes.
Tasks and Back Stack
A task is a collection of activities that users interact with when performing a certain job
(Task是当执行某项工作时用户与之交互的activity的集合)。 系统默认的Activity和Task规则:
当Activity A启动B,A状态stop(),后系统仍然保持其状态(例如滚动条位置、输入框的
输入等);
当按下“home”键,离开某个Task后,当前的activity会stop,并且task转入后台,
系统将保持task中的每一个activity的状态。如果用户再次返回task,系统将resume() stack中最上面的activity。
当用户按下“BACK”键,当前activity会弹出堆栈,并destroy()。 Activity可以被实例化多次。
一、管理Task
主要通过mainfest.xml中的 taskAffinity launchMode allowTaskReparenting clearTaskOnLaunch alwaysRetainTaskState finishOnTaskLaunch intent flags主要有: FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_SINGLE_TOP *尽量不要打破系统默认的操作,除非真的必要。 1.1 定义launch模式 Launch的模式允许用户定义一个新的activity实例怎么样与当前的task结合。 可通过Manifest文件定义或者当调用startActivity()时,在intent中增加一个flag。 Manifest文件方式: \"standard\" (the default mode):每个activity可以有多个实例,每个task也可以有多个实例。 \"singleTop\":只有堆栈的top activity单实例,其它activity可以有多个实例。Task可以多实例。 \"singleTask\":每次只有一个activity的实例存在。 \"singleInstance\" Flag方式参数类似 1.2 设置affinities 略 1.3 清空the back stack 系统会在用户离开某个task一定时间后清空除了root activity之外的所有activity。 可以通过设置activity标签属性来改变这一默认操作。 alwaysRetainTaskState一直不清空。 clearTaskOnLaunch与alwaysRetainTaskState相反。 finishOnTaskLaunch略 1.4 开始task 因篇幅问题不能全部显示,请点此查看更多更全内容