Activity篇之生命周期(LifeCircle)
2016-11-26 21:28
316 查看
Activity是什么?
Activity作为Android四大组件之一,Activity简单的说就是一个用户和系统交互的媒介,它直接面向的就是用户,因此它拥有自己的界面,逻辑处理能力.我们可以继承Activity来实现定制化的个性需求或者操作.
Activity有什么特点呢?
Activity是基于栈管理,栈的道理类似与积木的过程,采用"后进先出"或者说"先进后出"的原则.最顶层的Activity才能被用户直接交互.
Activity相关知识点也有不少,有生命周期,启动模式,状态保存及数据存储与恢复,栈,Activity与Activity之间的通信和传值,Activity与Fragment之间的通信,Activity与BroadCastReciver之间的通信,Activity与Service之间的通信.后面的文章会详细讲解。
今天主要讲解Activity生命周期相关函数及使用时机。
通常情况下我们说到Activity的生命周期一般大家知道的也就这副图(网上找的)。
onCreate():Activity栈中不存在当前Activity时(第一次创建/系统回收了重新创建时)调用。
onStart():Activity被激活,此状态Activity为不可见并且不能和用户交互。
onResume():Activity已经可见且可以和用户进行交互了。
onPause():Activity被暂停活动,此状态Activity已经失去用户焦点,无法进行交互但是任然可见。
onStop():Activity被完全停止,无法和用户交互并且不可见。
onDestory():Actiivty被销毁了,并从Activity栈中压出。
onRestart():Activity被重新激活,一般出现在重新回到前台时调用。
onSaveInstanceState():它的调用时机处在onPause-onStop之间,主要用户存储Activity被系统强制回收时需要保存的数据信息。
onRestoreInstanceState():它的调用时机处在onStart-onResume之间,主要用来恢复被系统强制回收时保存的数据信息。通常我们用这个函数来取出数据,然后重新赋值到界面上,从而达到数据恢复。
onNewIntent():这个函数主要在重复用到当前Activity实例会调用。这个在LaunchModel中的singleTop,SingleTask,SingleInstance会有体现。
另外还有2个不常用的:
onPostCreate():文档上说的,是在Activity完全被创建出来时调用。
onPostResume():Activity完全展示到前台时调用。
下面通过代码实例来形象描述下各生命周期特征.
1.新建BaseActivity,主要用于处理Log和Textview赋值.
从上图中我们看出:
Activity1创建时:onCreate-onStart-onResume
当启动Activity2时:先pause当前Activity1,然后执行待启动Activity2的创建(onCreate-onStart-onResume),之后再执行Activity1的onSaveInstanceStart-onStop.
当重新回到Activity1时:先pause当前Activity2,然后执行待启动Activity1的前台操作(onRestart-onStart-onResume),之后执行Activity2的onStop-onDestory
当Activity退出栈时:onPause-onStop-onDestory
这里还有一种情况就是Activity被系统回收,怎么模拟呢?使用Androidstudio里的Stop Process
我们先将打开Activity,然后按Home键退到后台,点击Stop Process后,从最近打开应用中再次进入,Log日志如下:
我们可以看到因为Activity被回收了,因此要重新创建,另外执行了onRestoreInstanceState,这里我们就可以做一些数据恢复操作。
下面附上数据存储与恢复的Demo
Activity作为Android四大组件之一,Activity简单的说就是一个用户和系统交互的媒介,它直接面向的就是用户,因此它拥有自己的界面,逻辑处理能力.我们可以继承Activity来实现定制化的个性需求或者操作.
Activity有什么特点呢?
Activity是基于栈管理,栈的道理类似与积木的过程,采用"后进先出"或者说"先进后出"的原则.最顶层的Activity才能被用户直接交互.
Activity相关知识点也有不少,有生命周期,启动模式,状态保存及数据存储与恢复,栈,Activity与Activity之间的通信和传值,Activity与Fragment之间的通信,Activity与BroadCastReciver之间的通信,Activity与Service之间的通信.后面的文章会详细讲解。
今天主要讲解Activity生命周期相关函数及使用时机。
通常情况下我们说到Activity的生命周期一般大家知道的也就这副图(网上找的)。
onCreate():Activity栈中不存在当前Activity时(第一次创建/系统回收了重新创建时)调用。
onStart():Activity被激活,此状态Activity为不可见并且不能和用户交互。
onResume():Activity已经可见且可以和用户进行交互了。
onPause():Activity被暂停活动,此状态Activity已经失去用户焦点,无法进行交互但是任然可见。
onStop():Activity被完全停止,无法和用户交互并且不可见。
onDestory():Actiivty被销毁了,并从Activity栈中压出。
onRestart():Activity被重新激活,一般出现在重新回到前台时调用。
onSaveInstanceState():它的调用时机处在onPause-onStop之间,主要用户存储Activity被系统强制回收时需要保存的数据信息。
onRestoreInstanceState():它的调用时机处在onStart-onResume之间,主要用来恢复被系统强制回收时保存的数据信息。通常我们用这个函数来取出数据,然后重新赋值到界面上,从而达到数据恢复。
onNewIntent():这个函数主要在重复用到当前Activity实例会调用。这个在LaunchModel中的singleTop,SingleTask,SingleInstance会有体现。
另外还有2个不常用的:
onPostCreate():文档上说的,是在Activity完全被创建出来时调用。
onPostResume():Activity完全展示到前台时调用。
下面通过代码实例来形象描述下各生命周期特征.
1.新建BaseActivity,主要用于处理Log和Textview赋值.
package com.activitylifecircle.cn; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; public class BaseActivity extends Activity { private TextView textView; private String TAG=this.getClass().getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activit); textView=(TextView) findViewById(R.id.textview); textView.setText(TAG); Log.e(TAG, "onCreate: " ); } @Override protected void onRestart() { super.onRestart(); Log.e(TAG, "onRestart: " ); } @Override protected void onStart() { super.onStart(); Log.e(TAG, "onStart: " ); } @Override protected void onResume() { super.onResume(); Log.e(TAG, "onResume: " ); } @Override protected void onPause() { super.onPause(); Log.e(TAG, "onPause: " ); } @Override protected void onStop() { super.onStop(); Log.e(TAG, "onStop: " ); } @Override protected void onDestroy() { super.onDestroy(); Log.e(TAG, "onDestroy: " ); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log.e(TAG, "onSaveInstanceState: " ); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); Log.e(TAG, "onRestoreInstanceState: " ); } public void gotoNext(View view) { } }
package com.activitylifecircle.cn; import android.content.Intent; import android.os.Bundle; import android.view.View; /** * Created by Administrator on 2016/11/25 0025. */ public class Activity1 extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void gotoNext(View view) { super.gotoNext(view); Intent intent=new Intent(this,Activity2.class); startActivity(intent); } }
package com.activitylifecircle.cn; import android.os.Bundle; import android.util.Log; import android.view.View; /** * Created by Administrator on 2016/11/25 0025. */ public class Activity2 extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void gotoNext(View view) { super.gotoNext(view); Log.e("ad", "gotoNext: " ); } }
从上图中我们看出:
Activity1创建时:onCreate-onStart-onResume
当启动Activity2时:先pause当前Activity1,然后执行待启动Activity2的创建(onCreate-onStart-onResume),之后再执行Activity1的onSaveInstanceStart-onStop.
当重新回到Activity1时:先pause当前Activity2,然后执行待启动Activity1的前台操作(onRestart-onStart-onResume),之后执行Activity2的onStop-onDestory
当Activity退出栈时:onPause-onStop-onDestory
这里还有一种情况就是Activity被系统回收,怎么模拟呢?使用Androidstudio里的Stop Process
我们先将打开Activity,然后按Home键退到后台,点击Stop Process后,从最近打开应用中再次进入,Log日志如下:
我们可以看到因为Activity被回收了,因此要重新创建,另外执行了onRestoreInstanceState,这里我们就可以做一些数据恢复操作。
下面附上数据存储与恢复的Demo
相关文章推荐
- Servlet生命周期与工作原理
- Servlet生命周期与工作原理
- 详解Python 实现元胞自动机中的生命游戏(Game of life)
- Servlet生命周期小结
- 【iOS开发-72】设置状态栏的两种方式、程序生命周期以及更好地理解几大类(对象)之间的关系
- 生命中的五个球 Five Balls of Life
- Android学习之生命周期
- Android activity生命周期
- Android开发_Activity生命周期
- activity生命周期中方法解析
- C++对象生命周期(未完)
- Servlet生命周期与工作原理
- 一 管理生命活动周期
- 《深入Java虚拟机》导读之六: 类和对象生命周期
- Servlet生命周期与工作原理
- Servlet生命周期与工作原理
- LeetCode 289. Game of Life(生命游戏)
- 关于Activity生命周期的理解 一(直白高效版)
- Activity生命周期图
- Servlet生命周期与工作原理