Android-Activity的生命周期
1.Activity的生命周期
周期即活动从开始到结束所经历的各种状态。生命周期即活动从开始到结束所经历的各个状态。从一个状态到另一个状态的转变,从无到有再到无,这样一个过程中所经历的状态就叫做生命周期。
2.生命周期的四种活动状态
- 运行状态:当一个活动位于一个返回栈的栈顶时,这时候的活动就位于运行状态
- 暂停状态:当一个活动不再位于一个返回栈的栈顶时,但任然可见时,这是的活动就位于暂停状态
- 停止状态:如果一个活动被另一个全屏活动完全覆盖,那么该活动处于停止状态
- 销毁状态:当一个活动从返回栈移除时,那么该活动就处于销毁的状态
3..正常情况下的生命周期(Activity类中定义的7中回调方法)
- onCreate():该方法是在Activity被创建时回调,它是生命周期第一个调用的方法,我们在创建Activity时一般都需要重写该方法,然后在该方法中做一些初始化的操作。
- onStart():该方法在活动由不可见变为可见是调用。
- onResume():该方法在活动可与用户交互时被调用,此时活动一定位于返回栈的栈顶并且处于运行状态。
- onPause():此方法被回调时则表示Activity正在停止(Paused形态),一般情况下onStop方法会紧接着被回调
- onStop():这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框式的activity,那么,onPause()方法会得到执行,而onStop()方法并不会执行。
- onDestroy():这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
-
onRestart():这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
活动生命周期的运行流程
4.生命周期的实例演示
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.dfcn.myapplication.MainActivity"
android:orientation="vertical">
<Button
android:id="@+id/b1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="启动"/>
<Button
android:id="@+id/b2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="关闭"/>
</LinearLayout>
package com.example.dfcn.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG ="a" ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b1,b2;
b1=findViewById(R.id.b1);
b2=findViewById(R.id.b2);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.b1:
Intent intent=new Intent(this,ChatActivity.class);
break;
case R.id.b2:
onStop();
break;
}
}
@Override
/**
* activity从后台重新回到前台(由不可见变为可见)时被调用
*/
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart: " );
}
@Override
/**
* Activity准备好和用户进行交互的时候被调用
*/
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume: ");
}
@Override
/**
* Activity准备去启动或者恢复另一个Activity的时候调用
*/
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause: ");
}
@Override
/**
* 退出当前Activity或者跳转到新Activity时被调用,Activity完全不可见的时候调用
*/
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop: ");
}
@Override
/**
* 退出当前Activity时被调用,调用之后Activity就结束了
*/
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
@Override
/***
* Activity从后台重新回到前台时被调用
*/
protected void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart: ");
}
}
//。。。由于截图太过麻烦,在这里我就不截图了
当程序运行时logcat
06-04 11:01:14.525 31640-31640/? D/a: onStart:
06-04 11:01:14.525 31640-31640/? D/a: onResume:
我们在Activity创建完成后,点击Home回调主界面时,可以发现此时onPause方法和onStop方法被执行,也就是点击Home键回到主界面(Activity不可见)–>onPause()–>onStop()依次被调用
我们可以发现重新回到Activity时,调用了onRestart方法,onStart方法,onResume方法。因此,
当我们再次回到原Activity时–>onRestart()–>onStart()–>onResume()依次被调用
在原Activity的基础上开启新的Activity,原Activity生命周期执行方法顺序为–>onPause()–>onStop()
5.总结
小结:到这里我们来个小结,当Activity启动时,依次会调用onCreate(),onStart(),onResume(),而当Activity退居后台时(不可见,点击Home或者被新的Activity完全覆盖),onPause()和onStop()会依次被调用。当Activity重新回到前台(从桌面回到原Activity或者被覆盖后又回到原Activity)时,onRestart(),onStart(),onResume()会依次被调用。当Activity退出销毁时(点击back键),onPause(),onStop(),onDestroy()会依次被调用,到此Activity的整个生命周期方法回调完成。现在我们再回头看看之前的流程图,应该是相当清晰了吧。嗯,这就是Activity整个典型的生命周期过程
下一篇: 华科2018年笔试题大概