- 浏览: 148089 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
flyingcatjj:
很适合我这种刚接触的
myeclipse xfire 开发webservice实例 -
tangzlboy:
非常好,非常详细,非常中用。
linux入门 -
yzz9i:
楼主说的很是详细。
myeclipse xfire 开发webservice实例 -
zqx888191:
很再理阿!
老程序员的教诲 -
simplecat123:
...
SQLite数据读取
大家好,今天给大家详解一下Android中Activity的生命周期,我在前面也曾经讲过这方面的内容,但是像网上大多数文章一样,基本都是翻译Android API,过于笼统,相信大家看了,会有一点点的帮助 ,但是还不能完全吃透,所以我今天特意在重新总结一下.
首先看一下Android api中所提供的Activity生命周期图(不明白的,可以看完整篇文章,在回头看一下这个图,你会明白的):
Activity其实是继承了ApplicationContext这个类,我们可以重写以下方法,如下代码:
view plaincopy to clipboardprint?
01.public class Activity extends ApplicationContext {
02. protected void onCreate(Bundle savedInstanceState);
03.
04. protected void onStart();
05.
06. protected void onRestart();
07.
08. protected void onResume();
09.
10. protected void onPause();
11.
12. protected void onStop();
13.
14. protected void onDestroy();
15. }
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打印),代码如下:
view plaincopy to clipboardprint?
01.package com.tutor.activitydemo;
02.import android.app.Activity;
03.import android.os.Bundle;
04.import android.util.Log;
05.public class ActivityDemo extends Activity {
06.
07. private static final String TAG = "ActivityDemo";
08.
09. public void onCreate(Bundle savedInstanceState) {
10. super.onCreate(savedInstanceState);
11. setContentView(R.layout.main);
12.
13. Log.e(TAG, "start onCreate~~~");
14. }
15.
16. @Override
17. protected void onStart() {
18. super.onStart();
19. Log.e(TAG, "start onStart~~~");
20. }
21.
22. @Override
23. protected void onRestart() {
24. super.onRestart();
25. Log.e(TAG, "start onRestart~~~");
26. }
27.
28. @Override
29. protected void onResume() {
30. super.onResume();
31. Log.e(TAG, "start onResume~~~");
32. }
33.
34. @Override
35. protected void onPause() {
36. super.onPause();
37. Log.e(TAG, "start onPause~~~");
38. }
39.
40. @Override
41. protected void onStop() {
42. super.onStop();
43. Log.e(TAG, "start onStop~~~");
44. }
45.
46. @Override
47. protected void onDestroy() {
48. super.onDestroy();
49. Log.e(TAG, "start onDestroy~~~");
50. }
51.
52.}
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视窗里,如果你还不会用Logcat你可以看一下我的这篇文章 Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e) ,我们打开应用时先后执行了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),代码如下:
view plaincopy to clipboardprint?
01.<?xml version="1.0" encoding="utf-8"?>
02.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03. android:orientation="vertical"
04. android:layout_width="fill_parent"
05. android:layout_height="fill_parent"
06. >
07.<TextView
08. android:layout_width="fill_parent"
09. android:layout_height="wrap_content"
10. android:text="@string/hello"
11. />
12.<EditText
13. android:id="@+id/editText"
14. android:layout_width="fill_parent"
15. android:layout_height="wrap_content"
16./>
17.</LinearLayout>
<?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代码如下:
view plaincopy to clipboardprint?
01.package com.tutor.activitydemo;
02.import android.app.Activity;
03.import android.os.Bundle;
04.import android.util.Log;
05.import android.widget.EditText;
06.public class ActivityDemo extends Activity {
07.
08. private static final String TAG = "ActivityDemo";
09. private EditText mEditText;
10. //定义一个String 类型用来存取我们EditText输入的值
11. private String mString;
12. public void onCreate(Bundle savedInstanceState) {
13. super.onCreate(savedInstanceState);
14. setContentView(R.layout.main);
15. mEditText = (EditText)findViewById(R.id.editText);
16. Log.e(TAG, "start onCreate~~~");
17. }
18.
19. @Override
20. protected void onStart() {
21. super.onStart();
22. Log.e(TAG, "start onStart~~~");
23. }
24. //当按HOME键时,然后再次启动应用时,我们要恢复先前状态
25. @Override
26. protected void onRestart() {
27. super.onRestart();
28. mEditText.setText(mString);
29. Log.e(TAG, "start onRestart~~~");
30. }
31.
32. @Override
33. protected void onResume() {
34. super.onResume();
35. Log.e(TAG, "start onResume~~~");
36. }
37.
38. //当我们按HOME键时,我在onPause方法里,将输入的值赋给mString
39. @Override
40. protected void onPause() {
41. super.onPause();
42. mString = mEditText.getText().toString();
43. Log.e(TAG, "start onPause~~~");
44. }
45.
46. @Override
47. protected void onStop() {
48. super.onStop();
49. Log.e(TAG, "start onStop~~~");
50. }
51.
52. @Override
53. protected void onDestroy() {
54. super.onDestroy();
55. Log.e(TAG, "start onDestroy~~~");
56. }
57.
58.}
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生命周期图,我想大家应该完全了解了Activity的生命周期了,
发表评论
-
Bitmap Drawable byte[] 三者之间的转换以及把数组存入数据库及提取数据重新组合
2012-03-06 11:21 788Bitmap Drawable byte[] 三者之间的转换以 ... -
Android Service生命周期及用法
2011-03-28 13:03 633写道 大家好,上一节 ... -
Drawable使用入门
2011-03-25 16:03 1136一个让人赏心悦目的界面对软件来说非常重要,因此图形图像资源也显 ... -
Android 中的几个常用控件
2011-03-24 14:43 1023写道 1、RadioButton RadioButton ... -
android命令
2011-03-03 14:44 956写道 大家好,今天我 ... -
android学习的好网址
2011-02-22 10:10 936http://www.droidnova.com/and ... -
linux下操作android模拟器命令
2011-02-14 17:14 2142写道 1:列出模拟器类型 android list ... -
Activity生命周期
2011-02-08 19:59 880大家好,今天给大家详解一下Android中Activit ... -
Intent对象的简单使用
2011-02-08 00:38 617如果要转换的页面不只是背景,颜色或文字内容的不同,而是A ... -
setContentView的应用
2011-02-08 00:34 1517手机页面的转换set ... -
多个Activity之间的通信与数据传递的Bundle对象的使用
2011-02-08 00:18 1173在Activity 中调用另一个Activity ,但若 ... -
多个Activity之间的通信
2011-02-07 22:38 2061第一步:新建一个继承Activity的类,如:NewActiv ... -
共享数据功能使用-ContentProvider
2011-01-26 11:03 1209package it.date; import it ... -
外部应用访问
2011-01-11 16:29 1964使用context中的文件输出流它有四种模式: * ... -
使用SharedPreferences进行数据存储-
2011-01-11 11:07 1000很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们 ... -
pull读取xml--android
2011-01-09 22:54 1943pull解析xml文件,和sax和dom一样 都可以脱离and ... -
dom读取xml文档---android
2011-01-09 22:26 1301除了可以使用 SAX解析XML文件,大家也可以使用熟悉的DOM ... -
数据保存到sd卡上
2011-01-05 17:22 9641 关键代码 package cn.lee.data; ... -
android读取功能
2011-01-05 16:03 9501 设计界面 <?xml version=" ... -
android的日志输出和单元测试
2010-12-31 17:52 1546日志输出 代替Syste ...
相关推荐
在本篇文章中,我们将深入探讨“Android Activity生命周期”及其相关知识点。 首先,Activity的生命周期包括几个主要状态:初始状态(创建)、可见状态、前台运行状态、后台状态和销毁状态。这些状态之间的转换是由...
Android Activity生命周期是Android应用开发中的核心概念,理解并掌握它对于构建高效、用户友好的应用程序至关重要。Activity作为Android系统中的一个关键组件,代表着用户界面的一个独立屏幕,它有自己的生命周期,...
#### 三、Activity生命周期方法详解 - **`onCreate()`**:这是Activity的第一个生命周期方法,当Activity被创建时调用。开发者通常在此处初始化UI组件并设置布局。此外,还可以进行一些必要的初始化操作,如读取...
本示例项目“Android activity生命周期示例”旨在帮助开发者深入理解Activity的生命周期及其各个阶段,这对于优化用户体验和资源管理至关重要。 Activity的生命周期包括以下几个主要状态: 1. **创建(Created)**...
### 一、Android Activity生命周期介绍 #### 1. onCreate() 当Activity首次创建时被调用,这是初始化Activity的最佳时机。在该方法中通常会执行一些初始化操作,比如设置布局文件、初始化UI组件等。 示例: ``` @...
Android Activity生命周期演示源码,从第一个Activity到第二个Activity,Android Activity形象的说就是一个容器,在里面放置各种控件(按钮,文本,复选框等),就形成了软件的界面~ Activity是可见的。
有助于深入了解Android Activity生命周期的测试代码,可以结合博客http://blog.csdn.net/freetangxiaoying/article/details/17167819领悟。
本示例“测试Android Activity生命周期Demo”旨在通过实际代码帮助开发者理解并掌握Activity的生命周期,这对于创建稳定、高效的Android应用至关重要。 Activity的生命周期包括了多个关键状态,如初始化、启动、...
两分钟彻底让你明白Android Activity生命周期(图文)
总之,深入理解Activity生命周期和其背后的源码逻辑,对于编写高效、响应迅速且用户体验优秀的Android应用至关重要。开发者应熟练掌握这些知识点,以便在设计和调试应用时能得心应手。通过实践和分析ActivityDemo,...
在Android应用开发中,理解Activity生命周期是非常重要的,因为它直接影响到应用程序的行为、性能以及用户体验。本文档将详细介绍Activity的生命周期,并通过两个示例帮助读者更好地理解和掌握这些概念。 #### ...
在Android应用开发中,Activity是用户界面的基本组件,它负责与用户进行交互。理解Activity的生命周期对于编写...通过阅读源码和使用工具,如Android Studio的调试器,可以更深入地理解Activity生命周期的运作机制。
android activity生命周期示例代码。里面包含activity执行finish之后的生命周期,旋转的生命周期。切换以及返回activity的生命周期。我的博客地址:http://blog.csdn.net/qq_16064871
理解并掌握Activity生命周期对于编写稳定、响应迅速的Android应用至关重要。合理处理生命周期方法中的回调,可以确保在状态切换时正确保存和恢复用户数据,同时优化性能和用户体验。在实际开发中,开发者还需要考虑...
这是Activity生命周期的第一个回调,通常在这里进行初始化工作,如设置布局、初始化数据等。 2. **可见状态(Started/Resumed)**:`onStart()`在Activity变得对用户可见时调用,但用户还不能与其交互。接着,`...
在研究Activity生命周期时,源码分析是非常重要的一环。开发者可以通过查看Android框架的源代码,了解系统是如何调用这些回调方法的。例如,可以研究ActivityThread类中的handleCreateActivity()、...