Activity生命周期(二)
------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生命周期(二)的更多相关文章
- Android之Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...
- Activity生命周期以及启动模式对生命周期的影响(二)
前面一篇文章概述了Android四大组件之一的Activity生命周期方法的调用先后顺序,但对于非标准启动模式下Activity被多次调用时的一些生命周期方法并未详细阐述,现在针对该情况着重记录. 现 ...
- Android学习路线(十二)Activity生命周期——启动一个Activity
DEMO下载地址:http://download.csdn.net/detail/sweetvvck/7728735 不像其他的编程模式那样应用是通过main()函数启动的.Android系统通过调用 ...
- Activity生命周期 onCreate onResume onStop onPause (转)
Android应用开发提高系列(6)——Activity生命周期 onCreate 和 onResume 在程序启动时候都会启动, 所有有些需要在onCreate onResume中都要实现的功能,之 ...
- Android体系结构及activity生命周期
Android的系统架构采用了分层架构的思想,如图1所示.从上层到底层共包括四层,分别是应用程序程序层.应用框架层.系统库和Android运行时和Linux内核 Android的系统架构图 每层 ...
- Android学习整理之Activity生命周期篇
一.Activity生命周期说明 Activity的四种状态: ⒈活动状态(Active or Running):也称为运行状态,处于Activity栈顶,在用户界面中最上层,完全能被用户看到,能 ...
- onAttachedToWindow()在整个Activity生命周期的位置及使用
onAttachedToWindow在整个Activity的生命周期中占据什么位置? 为什么要在onAttachedToWindow中修改窗口尺寸? 一.onAttachedToWindow在Acti ...
- Activity生命周期,状态保存恢复(经典)
一.整体框架 二.main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...
- Android查缺补漏--Activity生命周期和启动模式
一.生命周期 onCreate():启动Activity时,首次创建Activity时回调. onRestart():再次启动Activity时回调. onStart():首次启动Activity时在 ...
- 【Android 应用开发】Activity生命周期 与 Activity 之间的通信
一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...
随机推荐
- SQL server数据缓存依赖
SQL server数据缓存依赖有两种实现模式,轮询模式,通知模式. 1 轮询模式实现步骤 此模式需要SQL SERVER 7.0/2000/2005版本以上版本都支持 主要包含以下几 ...
- 清华申请退学博士作品:完全用Linux工作
http://www.cnblogs.com/cbscan/articles/3252872.html 下文地址 http://blog.oldboyedu.com/use-linux/ 按: 尽管我 ...
- 【python】*与** 参数问题
可变参数 在Python函数中,还可以定义可变参数.顾名思义,可变参数就是传入的参数个数是可变的,可以是1个.2个到任意个,还可以是0个. 我们以数学题为例子,给定一组数字a,b,c……,请计算a2 ...
- 一、Spring——IoC
IOC概述 Spring中IOC的概念,控制反转概念其实包含两个层面的意思,"控制"是接口实现类的选择控制权:而"反转"是指这种选择控制权从调用者转移到外部第三 ...
- [Linux] LVM的条带化
一.什么是条带化 当多个进程同时访问一个磁盘时,可能会出现磁盘冲突.磁盘系统对访问次数(每秒的IO操作,IOPS)和数据传输速率(读写速率,TPS)有限制. 当达到这些限制时,后面需要访问磁盘的进程就 ...
- 不是技术牛人,如何拿到国内IT巨头的Offer(转载)
转载的文章,中间有几段需要去学习. byvoid 面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这些牛人,NOI金牌,开源社区名人,三年级开始写Basic-在跪拜之余我们不禁要想,和 ...
- 浅谈可扩展性框架:MEF
之前在使用Prism框架时接触到了可扩展性框架MEF(Managed Extensibility Framework),体验到MEF带来的极大的便利性与可扩展性. 此篇将编写一个可组合的应用程序,帮助 ...
- Java锁 到底锁的是哪个对象?
更新:在一次和一位专家的交谈中,他对一下代码能否能够成功同步,给予了否定的答案, 他的理由是”以构造函数的成员变量作为synchronized的锁,在多线程的情况下,每一个线程都持有自己私有变量的锁, ...
- 34. Convert Sorted List to Binary Search Tree && Convert Sorted Array to Binary Search Tree
Convert Sorted List to Binary Search Tree OJ: https://oj.leetcode.com/problems/convert-sorted-list-t ...
- weblogic 优化设置 http://wenku.baidu.com/view/c42e7a5bbe23482fb4da4cf2.html
引自:http://wenku.baidu.com/view/c42e7a5bbe23482fb4da4cf2.html