Android入门:Activity生命周期

一、Activity生命周期介绍


我们在学Java Web时会学到Servlet的生命周期,因此对生命周期的概念已经有一定了解,简单地说就是某个事物从出生到死亡的过程。

Activity也存在声明周期,从Activity被创建到最后被销毁;Activity运行时可能会受到一些突发事件的影响,例如在使用Activity时突然来了一个电话,则Activity需要在生命周期函数中设置;

下图是Activity生命周期中最经典的图:




7个生命周期方法:


(1)onCreate(Bundle bundle);创建Activity

(2)onStart();开启Activity时调用

(3)onResume();在Activity显示时调用

(4)onPause();在某个Activity被覆盖,但是又没有被完全覆盖时调用

(5)onStop();在某个Activity被覆盖时调用

(6)onRestart();在某个Activity被覆盖后又重新显示时调用

(7)onDestroy();最后销毁时调用


这些方法总结后能够有几个规律:


(1)onCreate()-->onStart()-->onResume()为开始显示Activity的过程

(2)onResume()-->onPause()为此Activity不在最前面,但是还是可见的过程

(3)onResume()-->onPause()-->onStop()为Activity被覆盖的过程

(4)onPause()-->onResume()为Activity从原本可见但不是最前面到重新到最前面的过程

(5)onStop()-->onRestart()-->onStart()-->onResume()为Activity从不可见到显示在最前面的过程


二、非生命周期但重要的方法


当应用遇到意外情况(如内存不足,用户直接按home键等)需要保存一些临时数据,比如你填写EditText写到一半,你按错键了,按成home键,则如果默认情况,会丢失全部的输入信息,但是这样对用户来说就会有损失,因此我们需要下面两个方法:

1.onSaveInstanceState(Bundle bundle);  意外情况下保存数据

当意外发生时保存数据调用

由运行状态进入暂停状态或停止状态调用

屏幕旋转时调用

2.onRestoreInstanceState(Bundle bundle); 恢复数据


比如:



我们要做到保留EditText输入的信息,因此代码为:

[java] view plaincopy
  1. package com.xiazdong.activity.life;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.widget.EditText;  
  6.   
  7. public class MainActivity extends Activity {  
  8.     private EditText editText ;  
  9.     @Override  
  10.     public void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.main);  
  13.         editText = (EditText)this.findViewById(R.id.editText);  
  14.     }  
  15.   
  16.     @Override  
  17.     protected void onRestoreInstanceState(Bundle savedInstanceState) {  
  18.         String name = savedInstanceState.getString("name"); //恢复EditText的数据  
  19.         editText.setText(name);  
  20.         super.onRestoreInstanceState(savedInstanceState);  
  21.     }  
  22.   
  23.     @Override  
  24.     protected void onSaveInstanceState(Bundle outState) {   //保存EditText的数据  
  25.         outState.putString("name", editText.getText()+"");  
  26.         super.onSaveInstanceState(outState);  
  27.     }  
  28.       
  29. }  

三、其他一些设置


<activity android:theme="@android:style/Theme.Dialog"/>可以将Activity设置成窗口模式;

原文地址:https://www.cnblogs.com/sowhat4999/p/4439868.html