Android四大组件之——Activity的生命周期(图文详解)

上一篇文章讲了Activity的定义、状态和后退栈,现在讲讲Activity的重点和难点——Activity的生命周期。

  • Activity生命周期的回调方法:
//创建Activity
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
//Activity快要变成可见的
    @Override
    protected void onStart() {
        super.onStart();
    }
//Activity变成可见的,处于运行状态
    @Override
    protected void onResume() {
        super.onResume();
    }
//其他Activity获得用户焦点,(Activity快要暂停了)
    @Override
    protected void onPause() {
        super.onPause();
    }
//Activity不再可见,处于停止状态
    @Override
    protected void onStop() {
        super.onStop();
    }
//Activity快要被销毁了
    @Override
    protected void onDestroy() {
        super.onDestroy();   }
  }

这些方法定义了Activity完整的生命周期,实现这些方法,我们能监控Activity生命周期中的三个嵌套循环(monitor three nested loops in the activity lifecycle)

1.Activity的entire lifetime(全部的生命期)发生在

                              调用onCreate()和调用onDestory()之间。

        在onCreate()方法中执行全局状态的建立(例如定义布局),在onDestroy()方法中释放所有保存的资源。

       

 

       2.Activity的visible lifetime(可见的生命期)发生在

                              调用onStart()onStop()之间。

         在这个期间,用户能在屏幕上看见Activity,和它进行交互。

        系统在Activity的完整寿命中可能多次调用onStart()和onStop(),正如Activity交替地对用户可见或隐藏。

 

      3Activity的foreground lifetime (前台的生命期)发生在

                               调用onResume()onPause()之间。

       在这期间,Activity在屏幕上所有其他Activity的前面,有用户输入焦点。

       一个Activity能频繁的在前台进入和出去之间转变。

下面这张图很好的讲解了Activity的生命周期和上面说的三种生命期:

下面通过一个Demo来学习以下Activity的生命周期:

Demo很简单,就只有两个Activity,MainActivity和SecondActivity和一个按钮。点击按钮,由MainActivity跳转到SecondActivity。

MainActivity:

 1 package com.example.activitytest;
 2
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.util.Log;
 7 import android.view.View;
 8 import android.view.View.OnClickListener;
 9 import android.widget.Button;
10
11 public class MainActivity extends Activity {
12
13     private Button btn;
14     private static final String TAG = "ActivityTest";
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         Log.d(TAG, "MainActivity onCreate");
19         setContentView(R.layout.activity_main);
20         btn = (Button)findViewById(R.id.btn);
21         btn.setOnClickListener(new OnClickListener() {
22
23             @Override
24             public void onClick(View v) {
25                    Intent intent = new Intent(MainActivity.this,SecondActivity.class);
26                    startActivity(intent);
27             }
28         });
29
30     }
31     @Override
32     protected void onPause() {
33         Log.d(TAG, "MainActivity onPause  ");
34         super.onPause();
35     }
36     @Override
37     protected void onResume() {
38         Log.d(TAG, "MainActivity onResume  ");
39         super.onResume();
40     }
41     @Override
42     protected void onStart() {
43         super.onStart();
44         Log.d(TAG,"MainActivity onStart  ");
45     }
46     @Override
47     protected void onStop() {
48         super.onStop();
49         Log.d(TAG, "MainActivity onStop  ");
50     }
51     @Override
52     protected void onDestroy() {
53         super.onDestroy();
54         Log.d(TAG, "MainActivity onDestroy  ");
55     }
56     @Override
57     protected void onRestart() {
58         super.onRestart();
59         Log.d(TAG, "MainActivity onRestart  ");
60     }
61 }

SecondActivity:

 1 package com.example.activitytest;
 2
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.util.Log;
 6
 7 public class SecondActivity extends Activity {
 8     private static final String TAG = "ActivityTest";
 9        @Override
10     protected void onCreate(Bundle savedInstanceState) {
11            setContentView(R.layout.second_layout);
12            super.onCreate(savedInstanceState);
13            Log.d(TAG,"onCreate");
14     }
15        @Override
16     protected void onStart() {
17         super.onStart();
18         Log.d(TAG, "onStart");
19     }
20        @Override
21     protected void onResume() {
22         super.onResume();
23         Log.d(TAG, "onResume");
24     }
25      @Override
26     protected void onPause() {
27         super.onPause();
28         Log.d(TAG, "onPause");
29     }
30      @Override
31     protected void onStop() {
32         super.onStop();
33         Log.d(TAG, "onStop");
34     }
35      @Override
36     protected void onDestroy() {
37         super.onDestroy();
38         Log.d(TAG, "onDestroy");
39     }
40      @Override
41     protected void onRestart() {
42         super.onRestart();
43         Log.d(TAG, "onRestart");
44     }
45 }

SecondActivity

使用Activity需要在Manifest.xml文件中注册:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.activitytest"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6
 7     <uses-sdk
 8         android:minSdkVersion="8"
 9         android:targetSdkVersion="21" />
10
11     <application
12         android:allowBackup="true"
13         android:icon="@drawable/ic_launcher"
14         android:label="@string/app_name"
15         android:theme="@style/AppTheme" >
16         <activity
17             android:name=".MainActivity"
18             android:label="@string/app_name" >
19             <intent-filter>
20                 <action android:name="android.intent.action.MAIN" />
21                  <category android:name="android.intent.category.LAUNCHER" />
22
23             </intent-filter>
24         </activity>
25         <activity
26             android:name=".SecondActivity"
27             android:label="SecondActivity"
28             android:theme="@android:style/Theme.Dialog"
29             >
30         </activity>
31     </application>

Manifest.xml

1. 运行应用,MainActivity运行。

可以看出一个Activity运行调用的回调方法是:onCreate()->onStart()->onResume()

2. 点击跳转按钮,由MainActivity跳转到SecondActivity:

1>SecondActivity是Dialog。

由于SecondActivity是Dialog,所以MainActivity依然可见,所以只调用了它的onPause()方法。

2>若将SecondActivity改为不是Dialog(只需在Manifest.xml文件中删掉 android:theme="@android:style/Theme.Dialog"这一行即可)

再点击跳转按钮:

对于MainActivity,由于不可见,状态由运行变为停止。

依次调用了它的回调方法:onPause()->onStop()

3.Activity处于运行状态时,点击返回按钮。

点击返回按钮,Activity由运行状态变为死亡状态,依次调用它的回调方法:onPause()->onStop()->onDestroy()

4.Activity处于运行状态,点击主页按钮,返回桌面。

Activity由运行状态变为停止状态,依次调用它的回调方法:onPause()->onStop()

5.Activity处于停止状态,即由桌面返回到Activity。

停止->运行,依次调用回调方法:onRestart()->onStart()->onResume()

6.Activity处于运行状态,旋转屏幕:

可以看出,旋转屏幕是一个销毁Activity然后重新创建Activity的过程。

运行->暂停->停止->死亡->运行

依次调用回调方法:onPause()->onStop->onDestroy()->onCreate()->onStart()->onResume()

本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论。

欢迎转载,转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai

如果喜欢,请点推荐!

时间: 2024-10-26 08:24:16

Android四大组件之——Activity的生命周期(图文详解)的相关文章

Android四大组件之Activity的生命周期

Activity作为Android程序中的四大组件之一,它和大部分的组件一样都是有自己的生命周期,而Activity的生命周期总的分为五种状态以及七个方法! 只大致讲 五种状态 和 七个方法 五种状态: 在Activity生命周期即从创建到销毁全过程中,分为五种状态分为启动.运行.暂停.停止和销毁. 需要注意的是:Activity活动时不会在 启动 和 销毁 这两种状态下停留下来有活动,因为这两种状态作为Activity活动的过渡状态.所以在Activity触发启动操作之后马上就会进入运行状态不

Android 四大组件之Service 的生命周期和使用

Service简介: Service 是Android的四大组件之一,一般用于没有UI界面,长期执行的后台任务,即使程序退出时,后台任务还在执行.比如:音乐播放. Service的误区: 1.service在UI线程中执行. 2.不可以在service中执行耗时任务,因为service是在UI线程中运行的. 3.如果需要执行后台的耗时任务,必须在Service中开启一个线程来执行. Service的生命周期: 启动和停止Service的两种方式 1.context.startService():

Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)

            如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:[email protected]       [Android四大组件学习系列Activity篇]        1.Android四大组件之——Activity(一)定义.状态和后退栈(图文详解) 2.Android四大组件之——Activity的生命周期(图文详解) 3.Android四大组件之——Activity的开启StartActivit

【Android的从零单排开发日记】之入门篇(四)——Android四大组件之Activity

在Android中,无论是开发者还是用户,接触最多的就算是Activity.它是Android中最复杂.最核心的组件.Activity组件是负责与用户进行交互的组件,它的设计理念在很多方面都和Web页面类似.当然,这种相似性主要体现在设计思想上.在具体实现方面,Android的Activity组件有自己的设计规范,同时,它能够更简便地使用线程.文件数据等本地资源. 一.Activity 的生命周期 Activity 的生命周期是被以下的函数控制的. 1 public class Activity

Android四大组件之Activity详解 &middot; yclog

Activity生命周期: onCreate:在Acitivty第一次创建时调用,用于做初始化的工作onStart:onCreate调用后调用,此次界面对用户来说无法看见onResume:此次界面可见并显示到前台,且当前Acitvity位于当前栈顶,并且处于运行状态onPause:表示当前Activity正在停止,常做一些存储数据.停止动画等工作(不做耗时操作)onStop:表示当前Activity即将停止,一般做微量级的回收工作onDestory:表示当前Activity即将被销毁,可做一些回

Android四大组件之Activity(活动)及其布局的创建与加载布局

Android四大组件之Activity(活动)及其布局的创建与加载布局 什么是Activity ? 活动(Activity)是包含用户界面的组件,主要用于和用户进行交互的,一个应用程序中可以包含零个或多个活动. 手动创建Activity的过程详解 到现在为止,你还没有手动创建过活动呢,在第一个安卓工程中,HelloWorldActivity是ADT帮我们创建的,手动创建活动可以加深我们的理解,因此现在是时候应该自己动手了. 首先,你需要再新建一个 Android 项目,项目名可以叫做 Acti

Android学习之路——Android四大组件之activity(二)

上一篇讲了activity的创建和启动,这一篇,我们来讲讲activity的数据传递 activity之间的数据传递,这里主要介绍的是activity之间简单数据的传递,直接用bundle传递基本数据类型的数据.还有一种数据类型是parcelable和serialable 用bundle 传递数据有两种情况,这篇文章就分别从两个方面说明一下. 一.利用bundle传递基本数据类型 1.启动时传递数据,使用intent的put方法,将数据写入bundle中,然后startActivity(inte

Android学习之路——Android四大组件之activity(一)

一.什么是Activity? Activity简单的说就是一个界面,我们在Android手机上看到的每一个界面就是一个activity. 二.Activity的创建 1.定义一个类继承activity,然后在清单文件manifest.xml文件的application节点下注册activity,这个activity就创建成功了. public class MyActivity extends Activity { } 2.清单文件注册activity <application android:a

Android系列教程之Activity的生命周期

通过上一节"Android系列教程之Android项目的目录结构"我们已经知道了什么是Activity,那么为什么我们创建一个Activity的导出类的时候为什么都要覆盖Activity的onCreate方法呢,为什么会在onPause()方法中保存一些当前Activity中的变化,要弄明白这些就要先了解Activity的生命周期,也就是一个Activity才开始到结束都要经过那些状态,下面通过一个例子了解Activity的声明周期. 一:Activity的生命周期方法 Android