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

      联系方式:JohnTsai.Work@gmail.com

      [Android四大组件学习系列Activity篇]

      1.Android四大组件之——Activity(一)定义、状态和后退栈(图文详解)

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

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

  • Activity生命周期的回调方法:
//创建Activity
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}
//Activity快要变成可见的
    @Overrideprotected void onStart() {super.onStart();}
//Activity变成可见的,处于运行状态
    @Overrideprotected void onResume() {super.onResume();}
//其他Activity获得用户焦点,(Activity快要暂停了)
    @Overrideprotected void onPause() {super.onPause();}
//Activity不再可见,处于停止状态
    @Overrideprotected void onStop() {super.onStop();}
//Activity快要被销毁了
    @Overrideprotected 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,"SecondActivity onCreate");
14
15     }
16        @Override
17     protected void onStart() {
18         super.onStart();
19         Log.d(TAG, "SecondActivity onStart");
20     }
21        @Override
22     protected void onResume() {
23         super.onResume();
24         Log.d(TAG, "SecondActivity onResume");
25
26        }
27      @Override
28     protected void onPause() {
29         super.onPause();
30         Log.d(TAG, "SecondActivity onPause");
31     }
32      @Override
33     protected void onStop() {
34         super.onStop();
35         Log.d(TAG, "SecondActivity onStop");
36     }
37      @Override
38     protected void onDestroy() {
39         super.onDestroy();
40         Log.d(TAG, "SecondActivity onDestroy");
41     }
42      @Override
43     protected void onRestart() {
44         super.onRestart();
45         Log.d(TAG, "SecondActivity onRestart");
46     }
47 }

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()

7.Activity处于运行状态,手机此时锁屏。

可以看出,手机锁屏,此时由于Activity不可见,会进入停止状态。

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

8.当应用正在运行时,手机锁屏,然后解锁回到应用界面。

可以看出应用从停止状态恢复到运行状态。

依次调用回调方法:onRestart()->onStart()->onResume()

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

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

如果喜欢,请点推荐!谢谢~

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

  1. 重温Android四大组件(一)—Activity的生命周期

    前言 四大组件对于Android开发者是老生常谈的知识了,相信每个Android开发者对四大组件都已经很熟悉了.但是四大组件作为Android应用的基础,作为开发者不仅要熟悉而且要烂熟于心. 这里以& ...

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

    Activity的七大生命周期 onCrate 不可见不可交互. onStart 可见不可交互 . onResume 可见可交互 . onPause 可见不可交互 .onStop 不可见不可交互 . ...

  3. android 屏幕横竖屏切换时生命周期运行详解,创建横屏layout,has no declaration in the base

    横屏代码 1.配置文件设置 android:screenOrientation="landscape" 2.java代码设置 setRequestedOrientation(Act ...

  4. Android四大组件之Activity(第一篇-简单使用)

    Android四大组件之Activity(第一篇-简单使用) 前言 一.Activity是什么? 二.如何使用 1.继承 2.重写onCreate() 总结 文章目录 前言 一.Activity是什么 ...

  5. Android实验二:Activity的生命周期

    要求 设计如下界面,包括四个按钮,两个文本框.单击对应按钮可以启动对应activity.假 定Activity A为启动Activity. 部分代码 import androidx.appcompat ...

  6. Vue的生命周期过程详解

    Vue的生命周期 Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.销毁等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例从创建到销毁的 ...

  7. android代码查找快捷键是什么,Android Studio搜索功能(查找功能)及快捷键图文详解(示例代码)...

    1.在当前窗口查找文本[Ctrl+F] F3 向下查找关键字出现位置 Shift+F3 向上一个关键字出现位置 2.在当前工程内查找文本[Ctrl+Shift+F] 先会弹出一个对话框,直接点击[fi ...

  8. 【Android 四大组件之Activity】一文吃透Activity 生命周期

    作者:半身风雪 简介:在Android组件中最基本也是最为常见的四大组件: Activity Service服务 Content Provider内容提供者 BroadcastReceiver广播接收 ...

  9. Android组件系列----Activity的生命周期

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

最新文章

  1. 图像处理中的Mask是什么
  2. 小甲鱼python视频解读_小甲鱼python视频弟十二讲(关于字符串的方法及注释下)...
  3. 电信申请固定ip_各个代理ip之间的关系
  4. 取文字_把这4个字母输入word,会得到一段神秘文字,承载着一段历史
  5. 实战:MongoDB 分片集群Shard Cluster 搭建(1台路由节点,3台配置节点,9台分片节点)
  6. 又见程序媛 | 从索引的创建角度分析热门“面试题”
  7. 安全中心登录_放心使用instagram需要做到的5个信息安全设置
  8. 上传伪技术~很多人都以为判断了后缀,判断了ContentType,判断了头文件就真的安全了。是吗?...
  9. 数字图像处理与分析(matlab实现)——实现空域线性及非线性低通平滑滤波
  10. 数据结构个人电话号码查询系统实验报告
  11. “0基础考生考前三小时突破《申论》80分气哭学霸”——公文题(公文基础理论+方案类+总结类)
  12. aliyun短信及短信模板操作
  13. ARM汇编中的:比较指令--CMN / CMP / TEQ / TST
  14. python星星排列_python中怎么实现星星排列
  15. linux版本、查找、重启等命令
  16. 画论88 高秉《指头画说》
  17. 崔辰州:“数据驱动的天文科普”人生
  18. CSS和HTML做的二次元薇尔莉特(伪),新手上路,请多关照!!!!
  19. 连锁药店现状和信息化建设思路
  20. C - Anu Has a Function(div2)

热门文章

  1. 搭建基于hyperledger fabric的联盟社区(九) --检索状态数据库
  2. Mysql CURD复习(数据库、表、数据)
  3. 搞懂 SynchronizationContext
  4. xcode 7.2 怎么在Playground 中加载图片
  5. BAT执行DOS命令查找本地浏览器
  6. iScroll学习笔记
  7. JS中NaN、null、Undefined区别
  8. wireshark1.8捕获无线网卡的数据包——找不到无线网卡!
  9. (转载)Linux编程获取本机IP地址的三种方法
  10. 图像处理的傅里叶变换理解