Android学习笔记(4)——Activity生命周期

烂漫一生 提交于 2020-03-01 15:00:52

Android应用程序由很多的Activity组成,本例将简单说明Activity的生命周期过程:


new一个Android应用程序,其中先new两个Activity用来演示(FirstActivity、SecondActivity):

FirstActivity:

布局first.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FirstActivity" >

    <Button
        android:id="@+id/myButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_first" />

</RelativeLayout>

对应的FirstActivity.java:

package com.example.activity_04;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class FirstActivity extends Activity {

    private Button myBtn;
    
    class BtnClickListener implements OnClickListener{
        @Override
        public void onClick(View arg0) {
            Intent intent=new Intent();
            intent.setClass(FirstActivity.this, SecondActivity.class);
            FirstActivity.this.startActivity(intent);
        }
    }    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        System.out.println("FirstActivity ---> onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first);
        myBtn=(Button)findViewById(R.id.myButton);
        myBtn.setOnClickListener(new BtnClickListener());
    }

    @Override
    protected void onStart() {
        System.out.println("FirstActivity ---> onStart");
        super.onStart();
    }

    @Override
    protected void onRestart() {
        System.out.println("FirstActivity ---> onRestart");
        super.onRestart();
    }

    @Override
    protected void onResume() {
        System.out.println("FirstActivity ---> onResume");
        super.onResume();
    }

    @Override
    protected void onPause() {
        System.out.println("FirstActivity ---> onPause");
        super.onPause();
    }

    @Override
    protected void onStop() {
        System.out.println("FirstActivity ---> onStop");
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        System.out.println("FirstActivity ---> onDestroy");
        super.onDestroy();
    }
    
}

重写了Activity生命周期内的七个重要事件:onCreate、onStart、onResume、onPause、onStop、onRestart、onDestory

在他们被执行时,分别输出"Activity名 ---> 事件名",

同样的方式new一个SecondActivity

布局second.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SecondActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_second" />

</RelativeLayout>

对应的SecondActivity.java:

package com.example.activity_04;

import android.app.Activity;
import android.os.Bundle;

public class SecondActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        System.out.println("SecondActivity ---> onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
    }

    @Override
    protected void onStart() {
        System.out.println("SecondActivity ---> onStart");
        super.onStart();
    }

    @Override
    protected void onRestart() {
        System.out.println("SecondActivity ---> onRestart");
        super.onRestart();
    }

    @Override
    protected void onResume() {
        System.out.println("SecondActivity ---> onResume");
        super.onResume();
    }

    @Override
    protected void onPause() {
        System.out.println("SecondActivity ---> onPause");
        super.onPause();
    }

    @Override
    protected void onStop() {
        System.out.println("SecondActivity ---> onStop");
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        System.out.println("SecondActivity ---> onDestroy");
        super.onDestroy();
    }
}

需要观察System.out输出的信息,需要添加输出log的过滤器

1.打开DMMS页:

2.添加一个过滤器

3.输入过滤器想要过滤出的内容:

过滤器过滤出的信息将会被显示在LogCat窗口中


启动Android模拟器,运行一下程序,分别执行以下步骤,观察System.out的输出:

1.启动程序,首先打开的是FirstActivity(之前已在AndroidManifest.xml中配置):

观察输出如下:

2.点击FirstActivity中的Button,切换到SecondActivity:

观察输出如下:

3.点击Android模拟器的返回按钮,跳转回FirstActivity:

观察输出如下:

4.再次点击FirstActivity中的Button,切换到SecondActivity:

观察输出如下:


总结如下:

一个Activity的创建顺序执行:onCreate,onStart,onResume

从FirstActivity启动SecondActivity时,顺序调用:FirstActivity的onPause,然后SecondActivity的onCreate,onStart,onResume,最后是FirstActivity的onStop

七大事件:

onCreate:
  当这个Activity第一次被创建的时候调用,在里面去设置布局文件、或者对按钮绑定监听器等一些静态的操作;

onStart:
  当这个Activity能被看到的时候调用;

onResume:
  当这个Activity能获得用户焦点,用户能操作这个Activity的时候调用;

onPause:
  当要启动另一个Activity时调用,例如当你的程序在运行时,有一个来电,系统调用电话,你的程序被遮挡住时调用,一般在里面写一些保存当前Activity操作数据的代码,以便恢复操作时还原数据;

onStop:
  当这个Activity对用户而言不可见的时候调用,如果上一个Activity调用出来的是一个小的对话块,没能完全遮挡住这个Activity,则不会调用上一个Activity的onStop;

onRestart:
  当一个Activity对用户不可见了以后,但是没有被销毁,再次要显示的时候,就最先调用onRestart,而不需要再调用onCreate;

onDestory:
  销毁Activity,如果你在代码里明确调用了finish方法,则会调用销毁,或者当系统资源不够用的时候,也会自动销毁不可见的Activity,如果再启用已经被销毁的Activity时,需要再调用onCreate;


 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!