展会信息港展会大全

Android 程式开发:(一)详解活动 —— 1.1 Activity的生命周期(创作初衷)
来源:互联网   发布日期:2016-01-14 10:51:53   浏览:2600次  

导读:前言: 学习Android也有一年多了,目前在从事Android开发的工作。不敢说精通,但也小有心得。相信很多android初学者和我刚开始接触android时一样,往往只了解某些知识...

前言:

学习Android也有一年多了,目前在从事Android开发的工作。不敢说精通,但也小有心得。相信很多android初学者和我刚开始接触android时一样,往往只了解某些知识点的表面,别人要是问点啥,还真就说不出个一二三来,往往处于“了解”阶段。所以,我打算将自己学习android的过程和经验总结整理一下,发表出来,希望对学习android的同学有所帮助,也算给自己的学习进行总结吧。生命不息,学习不止。一定要学会“享受”学习的过程,否则,学习起来就会很累。

在我的学习过程中,有一点经验和大家分享一下,那就是“Deep Learning”:深入学习。多花点时间深入学习,总比走马观花强得多。有的时候,我们不是学不会,而是学的太快了,忘得也快。倒不如一个知识点一个知识点的慢慢学,学懂,完全掌握。今天,就先说说Activity的生命周期吧,很多面试官都喜欢问这个问题。。。其实很简单,就是记住一些回调函数被触发的时机。

写作初衷:希望能让那些学习android程序开发的同学们少走一些弯路,仅此而已。我不是什么大牛,只是尽一些绵薄之力罢了。

Activity这个类,定义了一些回调函数来控制它的生命周期。

onCreate()——当Activity第一次创建的时候被调用。

onStart()——当Activity对用户可见的时候被调用。

onResume()——当Activity开始和用户交互的时候被调用。

onPause()——正在运行的Activity马上要被暂停的时候被调用,此时,在这之前的Activity被重新获龋

onStop()——当Activity不在对用户可见的时候被调用。

默认地,被创建的Activity中都包含一个onCreate()方法,通过这个方法,可以创建显示给用户的UI组件。

从“被创建”到“被销毁”的生命周期图示:

想要理解Activity生命周期的最好办法就是创建一个工程,并实现所有的回调函数,然后让Activity与用户交互。

1、创建一个工程:Activity101。

2、Activity101Activity.java中的代码。

public class Activity101Activity extends Activity {

String tag = "Lifecycle";

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Log.d(tag, "In the onCreate() event");

}

public void onStart() {

super.onStart();

Log.d(tag, "In the onStart() event");

}

public void onRestart() {

super.onRestart();

Log.d(tag, "In the onRestart() event");

}

public void onResume() {

super.onResume();

Log.d(tag, "In the onResume() event");

}

public void onPause() {

super.onPause();

Log.d(tag, "In the onPause() event");

}

public void onStop() {

super.onStop();

Log.d(tag, "In the onStop() event");

}

public void onDestroy() {

super.onDestroy();

Log.d(tag, "In the onDestroy() event");

}

}

public class Activity101Activity extends Activity { String tag = "Lifecycle"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.d(tag, "In the onCreate() event"); } public void onStart() { super.onStart(); Log.d(tag, "In the onStart() event"); } public void onRestart() { super.onRestart(); Log.d(tag, "In the onRestart() event"); } public void onResume() { super.onResume(); Log.d(tag, "In the onResume() event"); } public void onPause() { super.onPause(); Log.d(tag, "In the onPause() event"); } public void onStop() { super.onStop(); Log.d(tag, "In the onStop() event"); } public void onDestroy() { super.onDestroy(); Log.d(tag, "In the onDestroy() event"); } }

3、按F11在模拟器上调试。

4、当这个activity第一次被加载:

[plain] view plaincopy

03-23 01:54:32.602: D/Lifecycle(644): In the onCreate() event

03-23 01:54:32.602: D/Lifecycle(644): In the onStart() event

03-23 01:54:32.602: D/Lifecycle(644): In the onResume() event

5、按“返回键”,程序退出:

03-23 01:58:28.307: D/Lifecycle(644): In the onPause() event

03-23 01:58:28.762: D/Lifecycle(644): In the onStop() event

03-23 01:58:28.837: D/Lifecycle(644): In the onDestroy() event

6、重新进入程序:

03-23 01:59:38.282: D/Lifecycle(644): In the onCreate() event

03-23 01:59:38.292: D/Lifecycle(644): In the onStart() event

03-23 01:59:38.302: D/Lifecycle(644): In the onResume() event

7、按“拨号键”进入拨号界面,activity被转入后台运行:

03-23 02:00:23.252: D/Lifecycle(644): In the onPause() event

03-23 02:00:24.522: D/Lifecycle(644): In the onStop() event

8、注意,此时onDestroy()方法并没有被触发,说明这个activity还在内存中。按“返回键”,退出拨号界面,这个Activity又重新可见了。观察LogCat窗口中的输出:

03-23 02:03:25.262: D/Lifecycle(644): In the onRestart() event

03-23 02:03:25.262: D/Lifecycle(644): In the onStart() event

03-23 02:03:25.262: D/Lifecycle(644): In the onResume() event

onRestart()方法被触发了,接下来是onStart()和onResume()。

可以从这个简单的例子中看到,当点击“返回键”的时候,activity被销毁了,与此同时,activity当前的状态也将消失。有一点需要特别注意,onPause()方法仅在两种情况下被调用:一个是在Activity被转入后台运行的时候,一个是用户按“返回键”将activity销毁的时候。www.2cto.com

当一个anctivity被启动之后,onStart()和onResume()方法总是要被调用的,无论这个activity是从后台重新获取的,还是首次被创建的。当一个anctivity第一次被创建的时候,onCreate()方法总是被调用。

从上面的例子,我们可以得出结论:

使用onCreate()方法去创建和初始化将要使用的组件。

使用onResume()方法去开启服务和执行代码。当Activity处于“前台”模式下,这些服务和代码需要被开启或执行。

使用onPause()方法去停止服务和阻断代码。当Activity处于“后台”模式下,这些服务和代码不需要被开启或执行。

使用onDestroy()方法去释放资源

摘自 manoel的专栏

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港