zoukankan      html  css  js  c++  java
  • 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设置成窗口模式;

  • 相关阅读:
    241. Different Ways to Add Parentheses java solutions
    89. Gray Code java solutions
    367. Valid Perfect Square java solutions
    46. Permutations java solutions
    116. Populating Next Right Pointers in Each Node java solutions
    153. Find Minimum in Rotated Sorted Array java solutions
    判断两颗树是否相同
    求二叉树叶子节点的个数
    求二叉树第k层的结点个数
    将二叉排序树转换成排序的双向链表
  • 原文地址:https://www.cnblogs.com/sowhat4999/p/4439868.html
Copyright © 2011-2022 走看看