编程知识 购物 网址 新闻 笑话 | 软件 日历 阅读 图书馆 China 头条阅读 学淘股 China Travel
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
   -> Android开发 -> Android四大组件之——Activity的生命周期(图文详解) -> 正文阅读

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

      转载请在文章开头处注明本博客网址: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快要变成可见的
    @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,"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开发 最新文章
Android动态权限申请
使用Kotlin,抛弃findViewById
.net程序员做的第一个安卓APP
Android学习笔记
计算机毕业设计源码分享
计算机毕业设计源码分享
ELF Format 笔记(一)—— 概述
Fragment学习笔记
Android复制Assets目录下的文件到指定目录
Android网络请求框架AsyncHttpClient实例详
上一篇文章      下一篇文章      查看所有文章
加:2015-03-30 07:50:33  更:2017-05-16 20:32:51 
 
360图书馆 软件开发资料 购物精选 新闻资讯 Chinese Culture 三丰软件 开发 中国文化 阅读网 头条阅读 学淘股 China Travel 日历 万年历 2020年7日历
2020-7-6 17:34:14
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程知识