Android中主要组件之Activity的生命周期,基本都是翻译Android API和个人的理解。

首先看一下Android api中所提供的Activity生命周期图:

Activity其实是继承了ApplicationContext这个类,我们可以重写以下方法,如下代码:

  public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy();
}

下面是一个简单的Demo,可以加深理解Activity周期。

第一步:新建一个Android工程,我这里命名为ActivityDemo.

第二步:修改ActivityDemo.java(我这里重新写了以上的七种方法,主要用Log打印),代码如下:

 package com.tutor.activitydemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class ActivityDemo extends Activity { private static final String TAG = "ActivityDemo"; public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); Log.e(TAG, "start onCreate~~~");
} @Override
protected void onStart() {
super.onStart();
Log.e(TAG, "start onStart~~~");
} @Override
protected void onRestart() {
super.onRestart();
Log.e(TAG, "start onRestart~~~");
} @Override
protected void onResume() {
super.onResume();
Log.e(TAG, "start onResume~~~");
} @Override
protected void onPause() {
super.onPause();
Log.e(TAG, "start onPause~~~");
} @Override
protected void onStop() {
super.onStop();
Log.e(TAG, "start onStop~~~");
} @Override
protected void onDestroy() {
super.onDestroy();
Log.e(TAG, "start onDestroy~~~");
} }

第三步:运行上述工程,效果图如下(没有任何异样):

问题主要显示在Logcat视窗里 ,我们打开应用时先后执行了onCreate()->onStart()->onResume三个方法,看一下LogCat视窗如下:

BACK键:

当按BACK键时,这个应用程序将结束,这时候应用将先后调用onPause()->onStop()->onDestory()三个方法,如下图所示:

HOME键:

当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按HOME键,然后去打开音乐应用程序,而当我们按HOME的时候,Activity先后执行了onPause()->onStop()这两个方法,这时候应用程序并没有销毁。如下图所示:

而当我们再次启动ActivityDemo应用程序时,则先后分别执行了onRestart()->onStart()->onResume()三个方法,如下图所示:

这里就会出现一个经常遇到想过的问题,当按HOME键,然后再进入ActivityDemo应用时,我们的应用的状态应该是和按HOME键之前的状态是一样的?在这里我将ActivityDemo的代码作一些修改,就是增加一个EditText。

第四步:修改main.xml布局文件(增加了一个EditText),代码如下:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<EditText
android:id="@+id/editText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>

第五步:然后其他不变,运行ActivityDemo程序,在EditText里输入如"Frankie"字符串(如下图:)

这时候,大家可以按一下HOME键,然后再次启动ActivityDemo应用程序,这时候EditText里并没有我们输入的"Frankie"字样,如下图:

这显然不能称得一个合格的应用程序,所以需要在Activity几个方法里自己实现,如下第六步所示:

第六步修改ActivityDemo.java代码如下:

 package com.tutor.activitydemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
public class ActivityDemo extends Activity { private static final String TAG = "ActivityDemo";
private EditText mEditText;
//定义一个String 类型用来存取我们EditText输入的值
private String mString;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mEditText = (EditText)findViewById(R.id.editText);
Log.e(TAG, "start onCreate~~~");
} @Override
protected void onStart() {
super.onStart();
Log.e(TAG, "start onStart~~~");
}
//当按HOME键时,然后再次启动应用时,我们要恢复先前状态
@Override
protected void onRestart() {
super.onRestart();
mEditText.setText(mString);
Log.e(TAG, "start onRestart~~~");
} @Override
protected void onResume() {
super.onResume();
Log.e(TAG, "start onResume~~~");
} //当我们按HOME键时,我在onPause方法里,将输入的值赋给mString
@Override
protected void onPause() {
super.onPause();
mString = mEditText.getText().toString();
Log.e(TAG, "start onPause~~~");
} @Override
protected void onStop() {
super.onStop();
Log.e(TAG, "start onStop~~~");
} @Override
protected void onDestroy() {
super.onDestroy();
Log.e(TAG, "start onDestroy~~~");
} }

第七步:重新运行ActivityDemo程序,重复第五步操作,当我们按HOME键时,再次启动应用程序时,EditText里有上次输入的"Frankie"字样,如下图如示:

OK,大功基本告成,这就是Activity的生命周期。

android学习——activity的生命周期的更多相关文章

  1. Android之Activity的生命周期

    PS:写一发关于Activity的生命周期,也算是面试的重点内容. 学习内容: 1.Activity的生命周期 2.面对多种情况的时候Activity的生命周期 3.onSaveInstanceSta ...

  2. 浅谈Android中Activity的生命周期

    引言 我想对于Android开发人员来说,Activity是再熟悉不过了,今天我们就来探讨下Activity的生命周期.熟悉的掌握Activity对于开发健壮的Android应用程序来说至关重要.下面 ...

  3. 每天一点Android干货-Activity的生命周期

    Activity Activity是这样一个程序组件,它为用户提供一个用于任务交互的画面. 一个应用程序通常由多个activity组成,它们彼此保持弱的绑定状态.典型的,当一个activity在一个应 ...

  4. Android中Activity的生命周期

    简介: 这个基本是必问的问题了,说一下你对Activity生命周期的理解,呵呵… onCreate, onStart, onResume, onPause, onStop, onDestroy, on ...

  5. 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)

    1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...

  6. Android的activity的生命周期

    activity的生命周期有四个重要的状态:活动,暂停,停止,销毁 基本的方法有:onCreate.onStart.onResume.onPause.onStop.onDestory 最经常使用的方法 ...

  7. Android课程---Activity 的生命周期

    activity类处于android.app包中,继承体系如下: 1.java.lang.Object 2.android.content.Context 3.android.app.Applicat ...

  8. 【android】android中activity的生命周期

    activity生命周期: 实例代码: public class DemoActivity extends Activity { //1.activity第一次被创建的时候,执行 @Override ...

  9. Android学习笔记_18_Activity生命周期 及 跳转方式

    一.Activity有三个状态: 1.当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态.它就是响应用户操作的Activity. 2. 当它上面有另外一个Activity,使它失去了焦点但 ...

随机推荐

  1. OC加强-day06

    #program mark - 08 NSMutableDictionary的使用 [掌握] "/08 NSMutableDictionary的使用/1_练习 "练习 1.小明的身 ...

  2. xcode 最近打开文件列表显示为空或不显示最近打开的项目或(no recent projects)解决办法

    如果使用的是10.10 系统,打开系统设置-->进入通用-->在最下面的"最近使用的项目"中将0改为你可以接受的选项 如果不是10.10,那么就从系统偏好设置---&g ...

  3. C#冒泡排序法程序代码

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Console ...

  4. Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面

    Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面 关于欢迎界面 很多App第一次启动都会有一个欢迎界面,欢迎界面往往决定这用户对App的第一映像,所以欢 ...

  5. Codevs 2597 团伙(并查集)

    2597 团伙 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么 ...

  6. ASP.NET前端语法应用

    字符拼接 <%# "abc" + Eval("列名").ToString() %> <%# Eval("列名"," ...

  7. mongodb 安装及,设置账户、主从

    我原来没用过mongodb ,在晚上查了查需要的命令,关于怎么mongodb怎么用,我就不知道了 官方网站: http://www.mongodb.org/ MongoDB 安裝,主从配置一 Mong ...

  8. Linux内核设计与实现 读书笔记

    第三章 进程管理 1. fork系统调用从内核返回两次: 一次返回到子进程,一次返回到父进程 2. task_struct结构是用slab分配器分配的,2.6以前的是放在内核栈的栈底的:所有进程的ta ...

  9. jquery 之效果

    // jquery 之效果 .css()既可以获取值,如 .css('fontSize'), 又可以设置内置属性,既可用驼峰式,也可以用连字符版,如 .css('background-color', ...

  10. C#基础(二)——C#中的构造函数

    构造函数主要是用来创建对象时为对象赋初值来初始化对象.总与new运算符一起使用在创建对象的语句中 .A a=new A(); 构造函数具有和类一样的名称:但它是一个函数具有函数的所有特性,同一个类里面 ...