您的位置:首页 > Web前端

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赋值.
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息