Activity的生命周期与加载模式——Activity的生命周期演示
当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的生命周期演示的更多相关文章
- Activity的生命周期与加载模式——Activity的4种加载模式
配置Activity时可指定android:launchMode属性,该属性用于配置该Activity的加载模式,该属性支持如下4个属性值. standard:标准模式,这是默认的加载模式. sing ...
- Android开发之Activity的生命周期以及加载模式
本篇博客就来好好的搞一下Activity的生命周期,如果搞过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类似.生命周期,并不难理解.一个人的生命周 ...
- Activity 的生命周期与加载模式
当Activity 处于Android 应用中运行时,它的活动状态由 Android 以 Activity 栈的形式管理.当前活动的Activity位于栈顶.随着不同应用的运行,每个Activity都 ...
- Android Activity的加载模式和onActivityResult方法之间的冲突
前言 今天在调试程序时,发现在某一Activity上点击返回键会调用该Activity的onActivityResult()方法.我一开始用log,后来用断点跟踪调试半天,还是百思不得其解.因为之前其 ...
- [转]Android Activity的加载模式和onActivityResult方法之间的冲突
前言 今天在调试程序时,发现在某一Activity上点击返回键会调用该Activity的onActivityResult()方法.我一开始用log,后来用断点跟踪调试半天,还是百思不得其解.因为之前其 ...
- 我的Android进阶之旅------>Android Activity的singleTask加载模式和onActivityResult方法之间的冲突
今天调试一个bug的时候,情景如下: 一个Activity A,需要用startActivityForResult方法开启Activity B.Activity B的launch mode被设置为si ...
- Android之Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...
- Android四种Activity的加载模式(转)
建议首先阅读下面两篇文章,这样才可以更好的理解Activity的加载模式: Android的进程,线程模型: http://www.cnblogs.com/ghj1976/archive/2011/0 ...
- Android四种Activity的加载模式
建议首先阅读下面两篇文章,这样才可以更好的理解Activity的加载模式: Android的进程,线程模型 http://www.cnblogs.com/ghj1976/archive/2011/04 ...
随机推荐
- Git 学习资源
在线教程 Try Git: Git初学者绝不能错过的Git上手资源. 廖雪峰Git教程: 比较系统的中文在线教程 易百Git教程 : 另一个比较全的中文在线教程 Git Immersion : A V ...
- 你真的会使用XMLHttpRequest吗?
看到标题时,有些同学可能会想:“我已经用xhr成功地发过很多个Ajax请求了,对它的基本操作已经算挺熟练了.” 我之前的想法和你们一样,直到最近我使用xhr时踩了不少坑儿,我才突然发现其实自己并不够了 ...
- zookeeper系列之异步通知模式-Watcher
1 watcher种类和事件种类 Watcher种类 1. zookeeper实例化时注入的默认Watcher 2. dataWatchers 一个Map<string Set<Watch ...
- 轻量级sqlite是增删改查
--创建数据库 create database ios --使用数据库 use ios --创建数据表 create table student ( stuid int primary key aut ...
- php单元测试到底是什么东西呢?
前言: 真正写php代码也有3年时间了,勉强算是一个php程序员, 但是,心底却一直没有底气. 都说测试驱动开发,可我连程序开发中什么是单元测试?这种基本的程序员的素养都 还不是很清楚,痛定思痛,决定 ...
- SpringMVC轻松学习-注解的使用(三)
根据上一讲的例子,我们下面就注解的使用进行详细说明. 我们采用sprng MVC开发项目时,通常都会采用注解的方式,这样可以大大提高我们的开发效率.实现零配置.下面我们从零开始重新做一个spring ...
- 缩短url-url短地址链接
之前给合作方二维码时隐藏的url过长,导致合作方提出在打印的时候打印不出来的问题,要求url长度在50字节内,所以写了缩短url功能. var url = string.Format("{0 ...
- 基于Keepalvied的Mysql主主漂移(切换)
Keepalived实现原理:Keepalived详细介绍简介 实验环境 Master1.Amoeba--IP:192.168.1.5 Master2---IP:192.168.1.10 同时安装ke ...
- jquery toggle 替换的实现
$('#example').click(function(){$("#exampleBox").toggle();}) 改为 $('#example').click(functio ...
- 把View转化成Image
+ (UIImage *) imageWithView:(UIView *)view { UIGraphicsBeginImageContextWithOptions(view.bounds.size ...