- 浏览: 977109 次
- 性别:
- 来自: 深圳
博客专栏
-
飞雪的Android学习总...
浏览量:146023
文章分类
最新评论
-
lovebingheji:
感谢,看完了
Spring方法注入 -
ruijin5566:
package concurrent;
import ja ...
淘宝面试题:如何充分利用多核CPU,计算很大的List中所有整数的和 -
helonghui:
Nginx在高并发的时候,内存开销比Apache更加有优势!
使用Nginx搭建PHP服务器 -
xjgpeople:
不错,写的非常不错
基于Android的浮动组件,可以用于应用中的新功能展示等等。 -
Bj_junxia:
不允许加入了,呜呜呜。。。。
Android系列教程之五:Activity的生命周期
声明周期.
Android系列教程目录:
-
Android教程之一:Window下搭建Android开发环境
-
Android教程之二:Linux下搭建Android开发环境
-
Android教程之三:第一个Android应用,HelloWorld
-
Android系列教程之四:Android项目的目录结构
本文版权归飞雪无情 所有,转载请注明出处, 永久链接: http://flysnow.iteye.com/blog/813490
我新建了一个Android的技术交流群,群号为86686524 120059404 ,感兴趣的可以申请加入,大家一块学习。
一:Activity的生命周期方法
Android提供了很多Activity的生命周期方法,比如我们常用的onCreate、onPause、onResume等。这里主要介绍粗粒度的周期方法,诸如onPostCreate、onPostResume等
这些细粒度的周期方法可以参考Android的API文档,在你需要更细层次的控制的时候可以使用这些细粒度的方法。粗粒度的周期方法有以下几个:
onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy(),从名字上就可以看出来这些方法在什么时候执行。
二:测试Activity的生命周期方法的执行顺序
为了能更明白上这几个周期放的执行顺序,我们新建一个HelloWorld项目,在Activity中覆盖这几个方法,打印出日志就可以看出来执行顺序了
-
新建HelloWorld项目,详细步骤可以参见:
Android教程之三:第一个Android应用,HelloWorld
-
修改main.xml内容为:
<?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="第一个Activity" /> <Button android:id="@+id/second" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="打开第二个Activity"/> </LinearLayout>
这里主要是为增加一个文本显示和一个按钮用于显示信息和操作。 -
新建布局文件second.xml,内容如下:
<?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="第二个Activity" /> <Button android:id="@+id/exit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="退出"/> </LinearLayout>
这里主要是为增加一个文本显示和一个退出按钮用于退出当前Activity。 -
新建一个Activity,名字为SecondActivity,内容如下:
public class SecondActivity extends Activity { private final static String TAG="SecondActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.v(TAG, "onCreate"); setContentView(R.layout.second); //退出按钮 Button btnExit=(Button)findViewById(R.id.exit); //为退出按钮设置单击事件 btnExit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish();//关闭当前Activity,也就是退出 } }); } @Override protected void onStart() { super.onStart(); Log.v(TAG, "onStart"); } @Override protected void onResume() { super.onResume(); Log.v(TAG, "onResume"); } @Override protected void onPause() { super.onPause(); Log.v(TAG, "onPause"); } @Override protected void onStop() { super.onStop(); Log.v(TAG, "onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.v(TAG, "onDestroy"); } }
我在各个周期方法了都加了日志信息,便于跟踪Activity的运行过程 -
修改HelloWorld类,内容如下:
public class HelloWorld extends Activity { private final static String TAG="HelloWorld"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.v(TAG, "onCreate"); setContentView(R.layout.main); //打开第二个Activity的按钮 Button btnSecond=(Button)findViewById(R.id.second); //设置单击事件 btnSecond.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(HelloWorld.this,SecondActivity.class)); finish();//关闭当前Activity } }); } @Override protected void onStart() { super.onStart(); Log.v(TAG, "onStart"); } @Override protected void onResume() { super.onResume(); Log.v(TAG, "onResume"); } @Override protected void onPause() { super.onPause(); Log.v(TAG, "onPause"); } @Override protected void onStop() { super.onStop(); Log.v(TAG, "onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.v(TAG, "onDestroy"); } }
-
运行程序,分析结果,发现当程序启动的时候,日志信息为下图:
由此可见当打开一个Activity的时候,其周期方法执行顺序为:onCreate()->onStart()->onResume(),现在点击“打开第二个Activity”按钮,看日志的输出如下图:
当应用从Helloworld这个Activity启动SecondActivity的时候,Android会先执行HelloWorld的onPause方法,然后依次执行SecondActivity的onCreate()->onStart()->onResume()方法
当SecondActivity呈现到屏幕上的时候再一次执行Helloworld的onStop()->onDestroy(),把HelloWorld从Activity栈中移除销毁。这里值得提的就是HelloWorld 中finish方法,因为执行了他所以
HelloWorld才会从Activity栈中移除销毁,这样当你按“返回”键返回的时候就回不到HelloWorld 这个Activity的界面了,而是直接回到的Android的应用程序列表 。
三:分析结果
根据上面例子可见一个Activity在启动的时候会执行onCreate()->onStart()->onResume(),在结束(或离开)的时候会执行onPause()->onStop()->onDestroy(),这就是一个Activity的生命周期。
因此我们要在onCreate方法里把Activity的需要的东西准备好,也就是初始化;在onResume里对Activity里的东西做一些调整;在onPause做一些清理和保存工作(保存持久状态),因为这是最后的
机会,因为onPause完成之前Android不会结束托管Activity类的进程,而之后进程可能被结束。总结一下这几个周期方法的作用:
-
- onCreate():创建Activity调用,用于Activity的初始化,还有个Bundle类型的参数,可以访问以前存储的状态。
- onStart():Activity在屏幕上对用户可见时调用
- onResume():Activity开始和用户交互的时候调用,这时该Activity是在Activity栈的顶部。
- onPause():Activity被暂停时调用,也就是你要对你能看到的这个Activity说byebye的时候调用,这里可以做一些清理和保存工作
- onStop():Activity被停止或者Activity变成不可见时调用
- onDestroy():Activity被从内存中移除,一般发生在执行finish方法时或者Android回收内存的时候
好了,最后让我们看一个API提供的Activity的状态图吧,看了他相信你对Activity的生命周期会更了解,如下图:
四:小结
这节主要是通过一个例子分析Activity声明周期,并对常用生命周期方法做了一些说明,应该什么时候使用他们。到这里Android的很基础的东西已经说完了,
下面就直接Android的UI组件介绍了。。
下期预告:TextView的介绍--包含跑马灯效果
评论
点击打开第二个Activity时:
点击退出时:
引用图片失败了
点击打开第二个Activity时:
点击退出时:
点击第二个 Activity时候出错 打不开第二个页面。。
什么错误?发一下
没在manifest里面配置SecondActivity吧
<activity android:name="SecondActivity" android:label="@string/app_name"></activity>
这个有的吧
<activity android:name="SecondActivity" android:label="@string/app_name"></activity>
这个有的吧
我做出了也没有,看了LOgcat才知道要修改fest。可能是建类的时候忘记继承的原因。
<activity android:name="SecondActivity" android:label="@string/app_name"></activity>
这个有的吧
<activity android:name="SecondActivity" android:label="@string/app_name"></activity>
哦。哪里?
btnSecond.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
这里会有问题,如果不将@Override的注释掉,代码会报错,如果注释掉,代码不报错,但得不到楼主的结果,点击第2个Activity的按钮时,会报错,程序不能正确运行了。
你用的是java5吧。java5的话去点这个注解就星了。。你说的错误是啥,发一下看看
点击第二个 Activity时候出错 打不开第二个页面。。
什么错误?发一下
btnSecond.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
这里会有问题,如果不将@Override的注释掉,代码会报错,如果注释掉,代码不报错,但得不到楼主的结果,点击第2个Activity的按钮时,会报错,程序不能正确运行了。
点击第二个 Activity时候出错 打不开第二个页面。。
谢谢。。不过最近两天比较忙,没来得及更新,不过趁着周末这两天我再写两章
那我就期待下文了~
呵呵,下文已经有了。请看系列教程之六。。多谢关注.
谢谢。。不过最近两天比较忙,没来得及更新,不过趁着周末这两天我再写两章
那我就期待下文了~
谢谢。。不过最近两天比较忙,没来得及更新,不过趁着周末这两天我再写两章
发表评论
-
android新建大分辨率模拟器不能启动的问题
2015-03-08 17:36 0新建的Android模拟器的分辨率超过一定大小的时候,就无法启 ... -
android覆盖式引导
2015-03-08 17:35 0我们在开发产品的时 ... -
Android产品开发中常用的一些开源项目
2015-03-08 17:27 2212你在工作中可能会遇到同时给你说不要重复发明轮子,其实这个说的 ... -
Android HttpClient Session保持
2015-03-08 17:20 14538现在单机版本的App已经 ... -
java.lang.UnsupportedOperationException android.view.GLES20Canvas.clipPath
2015-03-08 17:18 2104今天自定义控件使用Canvas绘图的时候遇到的这个错误,看错 ... -
解决Android SDK Manager不能更新的问题
2015-03-08 17:16 3221今天打算更新到Android4.3,看看里面的新的API,D ... -
PenddingIntent.getActivity
2013-03-11 16:40 0PenddingIntent.getActivity -
关于Android的Holo主题
2013-02-22 23:47 8137Android曾经为了优化用户体验,把原生的 ... -
Android Layout布局文件里的android:layout_height等属性为什么会不起作用?
2013-01-29 00:19 20576有的时候,我们配置好的布局文件,在加载完成添加到我们 ... -
震动反馈
2013-01-10 20:58 0震动反馈 -
Android ViewGroup.setDescendantFocusability函数
2013-01-05 12:15 22449这个函数是在ViewGroup里定义的,主要用于控制child ... -
Android设计应用图标不用愁---Asset Studio Integration来帮你
2011-11-12 00:18 8200Android Asset StudioWeb版是 ... -
最新最全的Android4.0 API源代码下载和完整Android4.0源代码下载教程
2011-11-15 09:41 2306这时刚刚整理好的最新的,包含所有的API的源代码,第一次上传的 ... -
基于Android的浮动组件,可以用于应用中的新功能展示等等。
2011-12-10 17:12 4685前言 在开发Android应用时,加新功能是必不可少 ... -
提取出的最新Android4.0 API 源代码
2011-11-15 14:06 4047提取出的Android4.0 API 的源代码,也就是andr ... -
Android中我为什么发不了邮件--Android邮件发送详解
2011-07-19 22:50 15647版权所有@飞雪无情,转载请著名出处:http:/ ... -
Android Developer和Google Group可以正常访问了
2011-06-21 08:56 2393Android Developer和Google Group可 ... -
Android中关于线程使用的几点注意事项
2011-05-21 22:43 8722版权所有:飞雪无情 ... -
Android系列教程之十二:Intents and Intent Filters(三)
2011-03-29 10:02 12942接上节继续。。版权所有:飞雪无情,转载请注明出处: ... -
android.resource://这个Uri你知道吗
2011-03-28 11:22 10267转自:http://www.android123.com.cn ...
相关推荐
Android中的Activity生命周期是每个Android开发者必须深入理解的关键概念。...希望这个简短的教程能帮助你深入理解Android Activity生命周期,如果你已经完全明白了,那么恭喜你,你离成为Android开发高手又近了一步!
`Activity`的生命周期由一系列回调方法组成,这些方法定义了`Activity`在其整个生存周期内不同阶段的行为。以下是主要的生命周期方法: 1. **`onCreate()`**:这是`Activity`首次创建时调用的第一个方法。开发者...
Activity生命周期涉及的四种状态和七个主要生命周期回调方法对于管理应用界面和用户交互至关重要。 文档还探讨了各种界面元素的设计与实现,例如缓冲界面、宫格界面、Tab界面、二级列表、抽屉效果等,这些都是构建...
1. **Activity生命周期管理**:Android应用中的Activity是用户界面的主要组成部分,了解其启动、暂停、恢复、销毁等生命周期方法是基础。开发者需要理解何时以及如何保存和恢复状态,以确保良好的用户体验。 2. **...
### Activity生命周期 了解Activity的生命周期对于编写可靠的Android应用程序至关重要。Activity的生命周期由一系列回调方法组成,这些方法会在特定时刻被系统调用。主要的方法包括: - `onCreate()`: 当Activity...
6. **服务和服务生命周期**:服务在后台运行,即使用户离开应用也能继续执行任务。了解如何创建和管理服务对于构建长期运行的任务至关重要。 7. **BroadcastReceiver**:广播接收器允许应用响应系统或自定义广播...
根据给定的文件信息,以下是对“[DevDiv原创]Android学习系列教程实例”的关键知识点的详细解析: ### 一、Android系统结构与初始化流程 #### 1.1 Android的发展历史回顾 Android操作系统是由Google公司主导开发...
根据提供的文件信息,这里主要涉及的是Mars老师的一系列Android开发视频教程的下载链接。下面将根据这些视频的标题来生成相关的知识点。 ### Android平台入门 - **知识点概述:** - Android平台介绍:Android是一...
5. **Activity生命周期**: 当Activity被启动时,它的生命周期开始。Android系统会调用一系列生命周期方法,如`onCreate()`, `onStart()`, `onResume()`。了解这些方法及其在何时被调用,对于管理Activity的状态和...
### APP开发教程 Java Android移动端开发 6、Android应用程序组件之二-Activity交互及权限 #### 系统Intent的使用 在Android开发中,`Intent`是实现组件间通信的重要方式之一,它可以用来启动Activity、Service...
在Android开发中,每个应用程序组件,如活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)和内容提供者(ContentProvider),都有一个生命周期,这些生命周期是由Android操作系统进行管理的。...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
AndroidApplication是所有Android应用程序的基础类,为应用程序提供了生命周期管理等功能。 #### 二十二、Android应用框架之Activity 这部分内容深入分析了Activity组件的功能和使用场景。Activity是Android应用...
- **Activity生命周期**:Activity在其整个生命周期中会经历不同的状态变化,如启动、暂停、停止和销毁等。 - **Activity通信**:不同Activity之间可以通过Intent进行通信。 2. **Service**:在后台运行的服务,...
- **Activity生命周期**:详解Activity组件的生命周期及其各个阶段的作用。 - **Handler机制**:讲解Android中用于线程间通信的Handler机制。 - **SQLite数据库操作**:教授如何在Android应用中使用SQLite进行数据...
- **Activity生命周期中的三种状态**: - **运行状态**:Activity在前台且可见,用户可以与其交互。 - **暂停状态**:Activity仍然可见但失去焦点,此时无法与用户交互。 - **停止状态**:Activity不再可见,但仍...
#### Activity生命周期 Activity的生命周期是指从创建到销毁的整个过程,由一系列回调方法构成,这些方法由Android框架自动调用。理解这些方法对于管理Activity的资源和状态至关重要。 - **onCreate(Bundle ...
1. Activity生命周期:Activity是Android中最常见的组件,代表用户界面。它的主要生命周期方法包括: - onCreate():Activity首次创建时调用,用于初始化UI和数据。 - onStart():Activity变得对用户可见时调用,...
- **Activity**:表示用户界面的一个屏幕,是Android四大组件之一。 - **Service**:用于执行后台任务,如音乐播放、数据下载等。 - **Broadcast Receiver**:用于接收来自系统和其他应用程序的广播消息。 - **...