当Activity处于Android应用中运行时,它的活动状态由Android以Activity栈的形式管理。当前活动的Activity位于栈顶。随着不同应用的运行,每个Activity都有可能从活动状态转入飞活动状态,也可从非活动状态准入活动状态。

归纳起来Activity大致会经过如下4个状态。

  • 活动状态:当前Activity位于前台,用户可见,可以获得焦点。
  • 暂停状态:其他Activity位于前台,该Activity依可见,只是不能获得焦点。
  • 停止状态:该Activity不可见,失去焦点。
  • 销毁状态:该Activity结束,或Activity所在的Dalvik进程被结束。

图4.15(该图示Android官方文档图片)显示了Activity生命周期及相关回调方法。

图4.15 Activity生命周期及回调方法

从图4.15可以看出,在Activity的生命周期中,如下方法会被系统回调。

  • onCreate(Bundle savedStatus):创建Activity时被回调。该方法只会被调用一次。
  • onStart():启动Activity时被回调。
  • onRestart():重新启动Activity时被回调。
  • onResume():恢复Activity时被回调,onStart()方法后一定会回调onResume()方法。
  • onPause():暂停Activity时被回调。
  • onStop():停止Activity时被回调。
  • onDestroy():销毁Activity时被回调。该方法只会被调用一次。

下面的Activity覆盖了上面的7个生命周期的方法,并在每个方法中增加了一行记录日志代码。该Activity的界面布局很简单,一个用于启动一个对话框风格的Activity,另一个用于退出该应用。

布局文件如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
> <Button
android:id="@+id/startActivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动对话框风格的Activity" /> <Button
android:id="@+id/finisth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="退出" /> </LinearLayout>

后台Java代码文件如下:

package com.example.studyactivity;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class Lifecycle extends Activity {
final String TAG="--CrazyIt--";
Button finish,startActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lifecycle);
//输出日志
Log.d(TAG,"------------onCreate-----------------");
finish=(Button)findViewById(R.id.finisth);
startActivity=(Button)findViewById(R.id.startActivity);
//为startActivity按钮绑定事件监听器
startActivity.setOnClickListener(new OnClickListener(){ @Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent(Lifecycle.this,DialogActivity.class);
startActivity(intent);
}
});
//为finish按钮绑定事件监听器
finish.setOnClickListener(new OnClickListener(){ @Override
public void onClick(View v) {
// TODO Auto-generated method stub
//结束该Activity
Lifecycle.this.finish();
} }); } @Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
//输出日志
Log.d(TAG, "------------onStart--------------");
} @Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
//输入日志
Log.d(TAG,"---------------onRestart-------------");
} @Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//输入日志
Log.d(TAG,"---------------onResume-------------");
} @Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
//输入日志
Log.d(TAG,"---------------onPause-------------");
} @Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
//输入日志
Log.d(TAG,"---------------onStop-------------");
} @Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//输入日志
Log.d(TAG,"---------------onDestroy-------------");
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.lifecycle, menu);
return true;
} }

Activity的生命周期与加载模式——Activity的生命周期演示的更多相关文章

  1. Activity的生命周期与加载模式——Activity的4种加载模式

    配置Activity时可指定android:launchMode属性,该属性用于配置该Activity的加载模式,该属性支持如下4个属性值. standard:标准模式,这是默认的加载模式. sing ...

  2. Android开发之Activity的生命周期以及加载模式

    本篇博客就来好好的搞一下Activity的生命周期,如果搞过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类似.生命周期,并不难理解.一个人的生命周 ...

  3. Activity 的生命周期与加载模式

    当Activity 处于Android 应用中运行时,它的活动状态由 Android 以 Activity 栈的形式管理.当前活动的Activity位于栈顶.随着不同应用的运行,每个Activity都 ...

  4. Android Activity的加载模式和onActivityResult方法之间的冲突

    前言 今天在调试程序时,发现在某一Activity上点击返回键会调用该Activity的onActivityResult()方法.我一开始用log,后来用断点跟踪调试半天,还是百思不得其解.因为之前其 ...

  5. [转]Android Activity的加载模式和onActivityResult方法之间的冲突

    前言 今天在调试程序时,发现在某一Activity上点击返回键会调用该Activity的onActivityResult()方法.我一开始用log,后来用断点跟踪调试半天,还是百思不得其解.因为之前其 ...

  6. 我的Android进阶之旅------>Android Activity的singleTask加载模式和onActivityResult方法之间的冲突

    今天调试一个bug的时候,情景如下: 一个Activity A,需要用startActivityForResult方法开启Activity B.Activity B的launch mode被设置为si ...

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

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

  8. Android四种Activity的加载模式(转)

    建议首先阅读下面两篇文章,这样才可以更好的理解Activity的加载模式: Android的进程,线程模型: http://www.cnblogs.com/ghj1976/archive/2011/0 ...

  9. Android四种Activity的加载模式

    建议首先阅读下面两篇文章,这样才可以更好的理解Activity的加载模式: Android的进程,线程模型 http://www.cnblogs.com/ghj1976/archive/2011/04 ...

随机推荐

  1. 转:Web测试需要了解的知识

    这里只是介绍Web测试相对于其他类型软件的测试额外需要了解的内容,关于测试方法不是本文的重点,里面谈到的每一项在以后的文章中再说明.大家看到这些内容可能都不陌生,我晒出的内容也许不对或有误导,请大家指 ...

  2. C语言5种存储区域

    C语言5种存储区域 转发至:http://www.mamicode.com/info-detail-927635.html 系统为了管理内存 把内存划分了几个区域 1> 栈区 栈区之中的数据在栈 ...

  3. Bessie Goes Moo

    Bessie Goes Moo 题目描述 Farmer John and Bessie the cow love to exchange math puzzles in their free time ...

  4. CentOS 7 x64 docker 使用点滴

    CentOS 7 安装 docker yum search docker  查看是否 有docker包 yum info docker  版本为1.3.2 yum -y install docker ...

  5. WEB在线预览PDF

    这是我在博客园发表的第一篇文章.以后会陆续把在线预览其他格式文档的解决方案发表出来. 解决思路:把pdf转换成html显示. 在线预览pdf我暂时了解3种解决方案,欢迎大家补充. 方案一: 利用pdf ...

  6. Linux的iptables常用配置范例(1)

    以下是来自 http://wiki.ubuntu.org.cn/IptablesHowTo 上的配置说明 可以通过/sbin/iptables -F清除所有规则来暂时停止防火墙: (警告:这只适合在没 ...

  7. NBUT 1457 Sona

    莫队算法+离散化 1.map会TLE,必须离散化做 2.long long会WA,__int64定义 %I64d输出输出能AC 3.注意输入的序列会爆int #include<cstdio> ...

  8. Nginx rewrite 规则 与 proxy_pass 实现

    Nginx rewrite 规则  与 proxy_pass 实现     -------------------------------------------------------------- ...

  9. ZOJ 3930 Dice Notation

    简单模拟题.一个int写成了char,搞了4个多小时.真垃圾.. #include<stdio.h> #include<string.h> +],s[+]; +]; +]; i ...

  10. linux 文件类型识别

    使用 ls -aldrwxr-xr-x. 4 root root 100 Apr 26 15:05 cpulrwxrwxrwx. 1 root root 13 Apr 26 15:05 fd -> ...