每天一点Android干货-Activity的生命周期

 Activity

  Activity是这样一个程序组件,它为用户提供一个用于任务交互的画面。

  一个应用程序通常由多个activity组成,它们彼此保持弱的绑定状态。典型的,当一个activity在一个应用程序内被指定为主activity, 那么当程序第一次启动时,它将第一个展现在用户面前。为了展现不同的内容,每一个activity可以启动另外一个。 每当一个新的activity被启动,那么之前的将被停止。但系统将会把它压入一个栈(“back stack”即后退栈),当一个新的activity启动,它将被 放到栈顶并获得用户焦点。后台栈遵循后进先出的栈机制。所以当用户完成当前页面并按下返回按钮时,它将被pop出栈(并销毁),之前的activity将被恢复。

   当一个activity因为另一个activity的启动而被停止,那么其生命周期中的回调方法,将会以状态改变的形式被调用。 activity通过它自身状态的改变可以收到多个回调方法。当系统创建,停止,恢复,销毁它的时候。并且每个回调方法都给你做相应处理工作的机会。 例如,当停止的时候,你的activity应当释放比较大的对象,例如网络连接,数据连接。当你的activity恢复时,你可以请求必须的资源并恢复一些被打断的动作。 这些状态事务的处理就构成了activity的生命周期。

如何在一个应用程序中定义多个Activity?

1.创建一个继承自Activity或其子类的类,

2.在配置文件中声明activity

Activity的切换

  生成一个意图对象(Intent),调用setClass(context, class)方法设置所要启动的Activity,Activity是Context的子类,所以可以这样写intent.setClass(FirstActivity.this, SecondActivity.class);

1.调用startActivity(intent)方法启动Activity;

2.调用startActivityForResult(intent ,1)方法启动Activity并接受第二个Activity回传回来的数据。

   在第一个页面中用onActivityResult(int requestCode, int resultCode, Intent data)方法来接受数据。

   在第二个页面中用setResult(int resultCode, Intent data)方法来设置回传的数据。

back stack 后退栈:存放的是Activity对象;

应用程序显示的是BackStack顶部的Activity,点击后退按钮,移除顶部的Activity。

Activity之间传递数据

Intent是Android应用程序当中的组件之一,Intent就是对意图的抽象。

Intent当中最重要的内容是action与data,action代表切换的动作,data代表切换涉及到哪两个Activity以及传递的数据。

使用putExtra()系列方法向Intent对象当中存储数据,使用getXXXExtra()系列方法从Intent对象当中取出数据。

Activity的生命周期函数:

方法描述之后可否被杀死?下一个方法
onCreate() activity第一次被创建时调用。在这里你应该完成所有常见的静态设置工作——创建view、绑定list数据等等。 本方法传入一个包含了该activity前一个状态的Bundle对象(如果之前已捕获了状态的话,详见后面的保存Activity状态)。

下一个回调方法总是onStart()。

onStart()
onRestart() activity被停止后、又再次被启动之前调用。

下一个回调方法总是onStart()

onStart()
onStart() activity要显示给用户之前调用。

如果activity进入前台,则下一个回调方法是onResume();如果进入隐藏状态,则下一个回调方法是onStop()。

onResume() 或 onStop()
onResume() activity开始与用户交互之前调用。这时activity是在activity栈的顶端,用户可以向其中输入。

下一个回调方法总是onPause()。

onPause()
onPause() 当系统准备启动另一个正在恢复的activity时调用。这个方法通常用于把未保存的改动提交为永久数据、停止动画播放、以及其它可能消耗CPU的工作等等。 它应该非常迅速地完成工作,因为下一个activity在本方法返回前是不会被恢复运行的。

如果activity返回前台,则下一个回调方法是onResume();如果进入用户不可见状态,则下一个是onStop()

可以 onResume() 或 onStop()
onStop() 当activity不再对用户可见时调用。原因可能是它即将被销毁、或者其它activity(已有或新建的)被恢复运行并要覆盖本activity。

如果activity还会回来与用户交互,则下一个回调方法是onRestart();如果这个activity即将消失,则下一个回调方法是onDestroy()

可以 onRestart() 或 onDestroy()
onDestroy() 在本activity被销毁前调用。这是activity收到的最后一个调用。 可能是因为activity完成了工作(有些人在这里调用finish()), 也可能是因为系统为了腾出空间而临时销毁activity的本实例。 可以利用isFinishing() 方法来区分这两种情况。 可以

生命周期函数是由Android操作系统来调用的:

两个Activity之间切换的过程(第一个Activity打开第二个Activity,再返回到第一个Activity)

MainActivity onCreate
MainActivity onStart
MainActivity onResume

//激活第二个Activity

MainActivity onPause
SecondActivity onCreate
SecondActivity onStart
SecondActivity onResume
MainActivity onStop

//返回第一个Activity

SecondActivity onPause
MainActivity onRestart
MainActivity onStart
MainActivity onResume
SecondActivity onStop
SecondActivity onDestroy

Activity对象的状态:

Resumed:Activity对象处于运行状态

Paused:另一个Activity位于前端,但是本Activity还可见,并不一定会释放所占用的内存

Stoped:另一个Activity位于前端,完全遮挡本Activity,并不一定会释放所占用的内存


成对儿的生命周期函数:

onCreate 与 onDestroy方法是一对;

onStart 与 onStop方法是一对;

onResume 与 onPause方法是一对;

————————————————————————————————————————————————————————————

原文地址:https://www.cnblogs.com/cisol/p/5811689.html