您的当前位置:首页正文

Android学习笔记-Activity篇

来源:榕意旅游网
Contents

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中的标签属性;或者传给startActivity()的intent flags来管理。 属性主要有:

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文件方式:

的launchmode属性有如下四种值供选择。

\"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

因篇幅问题不能全部显示,请点此查看更多更全内容