------siwuxie95

在项目 ActivityLifeCircle 的 MainActivity.java 中添加方法:

onCreate()  onStart()  onResume()  onPause()  onStop()  onRestart()  onDestroy()

具体代码:

package com.siwuxie095.activitylifecircle;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//日志信息 这里直接输入sout,即可自动补全代码
System.out.println("onCreate"); } @Override
protected void onStart() {
super.onStart();
System.out.println("onStart");
} @Override
protected void onResume() {
super.onResume();
System.out.println("onResume");
} @Override
protected void onPause() {
super.onPause();
System.out.println("onPause");
} @Override
protected void onStop() {
super.onStop();
System.out.println("onStop");
} @Override
protected void onDestroy() {
super.onDestroy();
System.out.println("onDestroy");
} @Override
protected void onRestart() {
super.onRestart();
System.out.println("onRestart");
} }

如果安装了Android Virtual Device的话,就可以直接在控制台观察到Android程序的生命周期变化

1、首先打开程序,执行 onCreate  onStart  onResume

2、点击home键,回到桌面,执行 onPause  onStop (此Activity已不可见)

3、点击多任务键,找到ActivityLifeCircle程序,点击打开,执行 onRestart  onStart  onResume

4、点击返回键,回到桌面,执行 onPause  onStop  onDestroy

5、再次点击多任务键,找到该程序,点击打开,执行 onCreate  onStart  onResume(即一个全新的生命周期)

在两个Activity切换过程中,两个Activity的生命周期变化:

在ActivityLifeCircle中new一个新的Empty Activity:BAty,工程结构如下:

将MainActivity.java中的七个方法中的日志信息改为A,同时为BAty.java添加7个方法,

并输出日志信息为B,如下:

MainActivity.java:

package com.siwuxie095.activitylifecircle;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//日志信息 这里直接输入sout,即可自动补全代码
System.out.println("A onCreate");
//通过按钮启动B Activity
findViewById(R.id.btnStartBAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,BAty.class));
}
}); } @Override
protected void onStart() {
super.onStart();
System.out.println("A onStart");
} @Override
protected void onResume() {
super.onResume();
System.out.println("A onResume");
} @Override
protected void onPause() {
super.onPause();
System.out.println("A onPause");
} @Override
protected void onStop() {
super.onStop();
System.out.println("A onStop");
} @Override
protected void onDestroy() {
super.onDestroy();
System.out.println("A onDestroy");
} @Override
protected void onRestart() {
super.onRestart();
System.out.println("A onRestart");
} }

BAty.java:

package com.siwuxie095.activitylifecircle;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle; public class BAty extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_baty);
System.out.println("B onCreate");
} @Override
protected void onStart() {
super.onStart();
System.out.println("B onStart");
} @Override
protected void onResume() {
super.onResume();
System.out.println("B onResume");
} @Override
protected void onPause() {
super.onPause();
System.out.println("B onPause");
} @Override
protected void onStop() {
super.onStop();
System.out.println("B onStop");
} @Override
protected void onDestroy() {
super.onDestroy();
System.out.println("B onDestroy");
} @Override
protected void onRestart() {
super.onRestart();
System.out.println("B onRestart");
} }

为activity_main.xml添加一个 TextView 和 Button,

为activity_baty.xml添加一个 TextView

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.siwuxie095.activitylifecircle.MainActivity"
android:baselineAligned="false"
android:orientation="horizontal"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是A Activity"
android:layout_weight="1" /> <Button
android:text="启动B Activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_toEndOf="@+id/textView2"
android:layout_marginTop="79dp"
android:id="@+id/btnStartBAty" />
</LinearLayout>

activity_baty.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_baty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.siwuxie095.activitylifecircle.BAty"> <TextView
android:text="这是B Activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:layout_alignParentTop="true" />
</RelativeLayout>

1、打开程序,执行 A onCreate   A onStart   A onResume

2、点击 启动B Activity,执行 A onPause   B onCreate   B onStart   B onResume   A onResume

(即在B呈现出来之前,A还是可以呈现的,所以A 只执行了onPause,在B完全呈现出来之后,A才执行onStop)

这种情况是B是不透明的,完全遮住了A,如果B是透明的或没有遮住A,A的生命周期如下:

在AndroidManifest.xml的BAty:<activity>…</activity>标签中添加dialog类型的theme:

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.siwuxie095.activitylifecircle"> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".BAty"
android:theme="@style/Base.Theme.AppCompat.Dialog" >
</activity>
</application> </manifest>

此时点击 启动B Activity,执行A onPause   B onCreate   B onStart   B onResume

没有执行A onStop

回到A Activity(回到A Activity只需点击周围空白即可),执行B onPause

A onResume   B onStop   B onDestroy (B onPause之后,A立马就 onResume,

然后才是B的onStop和onDestroy)

【made by siwuxie095】

Activity生命周期(二)的更多相关文章

  1. Android之Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...

  2. Activity生命周期以及启动模式对生命周期的影响(二)

    前面一篇文章概述了Android四大组件之一的Activity生命周期方法的调用先后顺序,但对于非标准启动模式下Activity被多次调用时的一些生命周期方法并未详细阐述,现在针对该情况着重记录. 现 ...

  3. Android学习路线(十二)Activity生命周期——启动一个Activity

    DEMO下载地址:http://download.csdn.net/detail/sweetvvck/7728735 不像其他的编程模式那样应用是通过main()函数启动的.Android系统通过调用 ...

  4. Activity生命周期 onCreate onResume onStop onPause (转)

    Android应用开发提高系列(6)——Activity生命周期 onCreate 和 onResume 在程序启动时候都会启动, 所有有些需要在onCreate onResume中都要实现的功能,之 ...

  5. Android体系结构及activity生命周期

    Android的系统架构采用了分层架构的思想,如图1所示.从上层到底层共包括四层,分别是应用程序程序层.应用框架层.系统库和Android运行时和Linux内核 Android的系统架构图    每层 ...

  6. Android学习整理之Activity生命周期篇

    一.Activity生命周期说明   Activity的四种状态: ⒈活动状态(Active or Running):也称为运行状态,处于Activity栈顶,在用户界面中最上层,完全能被用户看到,能 ...

  7. onAttachedToWindow()在整个Activity生命周期的位置及使用

    onAttachedToWindow在整个Activity的生命周期中占据什么位置? 为什么要在onAttachedToWindow中修改窗口尺寸? 一.onAttachedToWindow在Acti ...

  8. Activity生命周期,状态保存恢复(经典)

    一.整体框架 二.main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...

  9. Android查缺补漏--Activity生命周期和启动模式

    一.生命周期 onCreate():启动Activity时,首次创建Activity时回调. onRestart():再次启动Activity时回调. onStart():首次启动Activity时在 ...

  10. 【Android 应用开发】Activity生命周期 与 Activity 之间的通信

    一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...

随机推荐

  1. Updatepanel 注册javascript 方法

    ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "test", "alert ...

  2. Centos 6.5安装redis

    1.下载 wget http://download.redis.io/releases/redis-2.8.13.tar.gz 2.解压 tar zxvf redis-2.8.13.tar.gz 3. ...

  3. X5的UI部分和传统Web页面开发的差异

    http://doc.wex5.com/different-with-std-web-ui/#1 X5的UI部分和传统Web页面开发的差异 WeX5是跨端移动开发框架,BeX5是基于WeX5的企业快速 ...

  4. mysql:字符串转换为日期类型

    函数:DATE_FORMAT http://www.w3school.com.cn/sql/func_date_format.asp

  5. css如何实现多行文本时,内容溢出,出现省略号

    一:单行文本出现省略号: .oneLine{ white-space: nowrap; text-overflow: ellipsis; overflow: hidden; width: 100px; ...

  6. set JAVA_HOME in RHEL/CentOS

    3.3. Install OpenJDK on Red Hat Enterprise Linux Introduction OpenJDK is one of many Java Developmen ...

  7. Linux 使用 su 切换用户提示 Authentication Failure 的解决方法

    Ubuntu v14.04,使用 su 命令切换用户时报验证失败的错误 这个问题产生的原因是由于 ubuntu 系统默认是没有激活 root 用户的,需要我们手工进行操作,在命令行界面下,或者在终端中 ...

  8. VBS在指定范围内生成不重复的随机数

    Dim Z()ReDim Z(15)For i=0 To UBound(Z)    Z(i)=GetRndNum(i-1,UBound(Z))    WScript.Echo Z(i)Next Fun ...

  9. NHibernate系列文章五:NHibernate配置

    摘要 NHibernate有多种配置方法,代码,xml文件,以及Fluent NHibernate.这里只介绍最常用的两种NHibernate配置方法:通过代码和通过配置文件. 1. 通过代码配置 通 ...

  10. 【EF学习笔记10】----------主从表级联操作

    主从表 级联新增 Console.WriteLine("=========主从表 级联新增=========="); using (var db = new Entities()) ...