• 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设置成窗口模式;

  • 相关阅读:
    浅析NetFilter和iptables
    关于skb_header_pointer函数
    Linux kernel 绝对路径之d_path篇
    几个内核函数:filp_open、filp_read、IS_ERR、ERR_PTR、PTR_ERR
    一文读懂数字签名
    Nginx配置文件nginx.conf中文详解(总结)
    nginx 重写 rewrite 基础及实例
    最完美解决Nginx部署ThinkPHP项目的办法
    nginx中的try_files指令解释
    js电话号码正则校验--座机和手机号
  • 原文地址:https://www.cnblogs.com/sowhat4999/p/4439868.html
Copyright © 2020-2023  润新知