- 浏览: 615464 次
- 性别:
- 来自: 厦门
文章分类
最新评论
-
咖啡舞者:
现在在厦门工作还好吧。
2013换工作记 -
huih1984:
工作8年,算起来楼主和我差不多岁数啊, ,本人现在干着没有合同 ...
2013换工作记 -
无心流泪wan:
乘法法则规定复数的乘法按照以下的法则进行:设z1=a+bi,z ...
帮朋友做的一笔试(友元 运算符重载) -
我叫营长1:
谢谢,很详细呢
SharedPreferences 的用法 -
javalinjx:
挺有意思的。哈哈
2013换工作记
注意到在Activity的API中有大量的onXXXX形式的函数定义,除了我们前面用到的onCreate以外,还有
onStart,onStop以及onPause等等。从字面上看,它们是一些事件回调,那么次序又是如何的呢?其实这种事情,自己做个实验最明白不过
了。在做这个实验之前,我们先得找到在Android中的Log是如何输出的。
显然,我们要用的是android.util.log类,这个类相当的简单易用,因为它提供的全是一些静态方法:
Log.d(String tag, String msg); //DEBUG
Log.i(String tag, String msg); //INFO
Log.w(String tag, String msg); //WARN
Log.e(String tag, String msg); //ERROR
前面的tag是由我们定义的一个标识,一般可以用“类名_方法名“来定义。
输出的LOG信息,如果用Eclipse+ADT开发,在LogCat中就可以看到,否则用adb logcat也行,不过我是从来都依赖于IDE环境的。
好了,现在我们修改前面的HelloThree代码:
... {
super .onStart();
Log.v(TAG, " onStart " );
}
public void onStop()
... {
super .onStop();
Log.v(TAG, " onStop " );
}
public void onResume()
... {
super .onResume();
Log.v(TAG, " onResume " );
}
public void onRestart()
... {
super .onRestart();
Log.v(TAG, " onReStart " );
}
public void onPause()
... {
super .onPause();
Log.v(TAG, " onPause " );
}
public void onDestroy()
... {
super .onDestroy();
Log.v(TAG, " onDestroy " );
}
public void onFreeze(Bundle outState)
... {
super .onFreeze(outState);
Log.v(TAG, " onFreeze " );
}
在HelloThreeB中也同样增加这样的代码,编译,运行一下,从logcat中分析输出的日志。
在启动第一个界面Activity One时,它的次序是:
onCreate (ONE) - onStart (ONE) - onResume(ONE)
虽然是第一次启动,也要走一遍这个resume事件。然后,我们点goto跳到第二个Activity Two中(前一个没有关闭),这时走的次序是:
onFreeze(ONE) - onPause(ONE) - onCreate(TWO) - onStart(TWO) - onResume(TWO) - onStop(ONE)
说明,第二个Activity Two在启动前,One会经历一个:冻结、暂停的过程,在启动Two后,One才会被停止?
然后,我们再点back回到第一个界面,这时走的次序是:
onPause(TWO) - onActivityResult(ONE) - onStart(ONE) - onRestart(ONE) - onResume(ONE) - onStop(TWO) - onDestroy(TWO)
说明,返回时,Two没有经历冻结就直接暂停了,在One接收参数,重启后,Two就停止并被销毁了。
最后,我们点一下Exit退出应用,它的次序是:
onPause(ONE) - onStop(ONE) - onDestroy(ONE)
说明如果我们用了finish的话,不会有freeze,但是仍会经历pause - stop才被销毁。
这里有点疑问的是:为什么回来时先是Start才是Restart?可是文档中的图上画的却是先restart再start的啊?不过,后面的表格中的描
述好象是正确的,start后面总是跟着resume(如果是第一次)或者restart(如果原来被stop掉了,这种情况会在start与
resume中插一个restart)。
下面不跑例子了,看看文档吧。
1.Android用Activity Stack来管理多个Activity,所以呢,同一时刻只会有最顶上的那个Activity是处于active或者running状态。其它的Activity都被压在下面了。
2.如果非活动的Activity仍是可见的(即如果上面压着的是一个非全屏的Activity或透明的Activity),它是处于paused状态
的。在系统内存不足的情况下,paused状态的Activity是有可被系统杀掉的。只是不明白,如果它被干掉了,界面上的显示又会变成什么模样?看来
下回有必要研究一下这种情况了。
3.几个事件的配对可以比较清楚地理解它们的关系。Create与Destroy配成一对,叫entrie
lifetime,在创建时分配资源,则在销毁时释放资源;往上一点还有Start与Stop一对,叫visible
lifetime,表达的是可见与非可见这么一个过程;最顶上的就是Resume和Pause这一对了,叫foreground
lifetime,表达的了是否处于激活状态的过程。
4.因此,我们实现的Activity派生类,要重载两个重要的方法:onCreate()进行初始化操作,onPause()保存当前操作的结果。
除了Activity Lifecycle以外,Android还有一个Process Lifecycle的说明:
在内存不足的时候,Android是会主动清理门户的,那它又是如何判断哪个process是可以清掉的呢?文档中也提到了它的重要性排序:
1.最容易被清掉的是empty
process,空进程是指那些没有Activity与之绑定,也没有任何应用程序组件(如Services或者IntentReceiver)与之绑定
的进程,也就是说在这个process中没有任何activity或者service之类的东西,它们仅仅是作为一个cache,在启动新的
Activity时可以提高速度。它们是会被优先清掉的。因此建议,我们的后台操作,最好是作成Service的形式,也就是说应该在Activity中
启动一个Service去执行这些操作。
2.接下来就是background
activity了,也就是被stop掉了那些activity所处的process,那些不可见的Activity被清掉的确是安全的,系统维持着一个
LRU列表,多个处于background的activity都在这里面,系统可以根据LRU列表判断哪些activity是可以被清掉的,以及其中哪一
个应该是最先被清掉。不过,文档中提到在这个已被清掉的Activity又被重新创建的时候,它的onCreate会被调用,参数就是onFreeze时
的那个Bundle。不过这里有一点不明白的是,难道这个Activity被killed时,Android会帮它保留着这个Bundle吗?
3.然后就轮到service process了,这是一个与Service绑定的进程,由startService方法启动。虽然它们不为用户所见,但一般是在处理一些长时间的操作(例如MP3的播放),系统会保护它,除非真的没有内存可用了。
4.接着又轮到那些visible activity了,或者说visible process。前面也谈到这个情况,被Paused的Activity也是有可能会被系统清掉,不过相对来说,它已经是处于一个比较安全的位置了。
5.最安全应该就是那个foreground activity了,不到迫不得已它是不会被清掉的。这种process不仅包括resume之后的activity,也包括那些onReceiveIntent之后的IntentReceiver实例。
在Android
Application的生命周期的讨论中,文档也提到了一些需要注意的事项:因为Android应用程序的生存期并不是由应用本身直接控制的,而是由
Android系统平台进行管理的,所以,对于我们开发者而言,需要了解不同的组件Activity、Service和IntentReceiver的生
命,切记的是:如果组件的选择不当,很有可能系统会杀掉一个正在进行重要工作的进程。
下一步要了解的应该是Intent和它的IntentReceiver了,改天继续。
注:
我看完这篇文章后,自己动手试了一下,又看了一下google的文档,http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
主要还是看图片啦,E文我就没有认真去看了,关于原作可能是由于android的版本问题,onFreeze这个我是没有看到啦,我把自己试验的源代码上载在附件中,大家可以运行试试,我使用的是1.1的版本。
运行后图片如下:
发表评论
-
Android 数字签名
2012-02-07 10:57 3442Android 数字签 ... -
智能校车---校车解决方案
2012-01-30 13:37 1442... -
搭公司班车的随想
2011-09-19 15:00 2018每天早上要去搭公司的厂车,大致厂车8:03分经过X ... -
android 对于apk签名汇总
2011-09-15 14:10 1665Android签名主要采用keytool和jarsigner ... -
Failed to install on device ‘emulator-5554′: timeout
2011-09-15 09:52 3855启动android模拟器时候如果提示:Failed to in ... -
eoe特刊
2010-11-26 10:23 1736为解决一些朋友从eoe论坛下载时要扣论坛币,需要注 ... -
android金逸电影院客户端
2010-10-27 15:32 1931金逸电影院在全国都有各分院,至少在福州大家去看电影一般是去金逸 ... -
豌豆荚手机精灵试用测试
2010-10-27 09:09 1347顶着创新工厂作品的豌豆荚手机精灵,在下载后使用后, ... -
我看IPhone
2010-10-15 14:58 1547本人是个android爱好者,从使用手机上看,个人还 ... -
巧用优酷
2010-08-27 17:26 1319要做一个培训的项目,其中有一会是视频播放,想了半天 ... -
【转】Android开发者必须深入学习的10个应用开源项目
2010-08-26 17:34 3561Android开发又将带来新一 ... -
App Inventor for Android 使用总结
2010-08-25 17:31 2309昨日我们报道了Google ... -
could not find virtual device named 'XXX' 的解决方法
2009-11-16 10:41 4929在SDK1.5中运行程序要选择avd才能运行。也就是要创建av ... -
如何得到短信inbox收件箱的短信
2009-11-13 16:46 2350原来android中的短信UI设计是没有区分inbox和out ... -
andriod 获得机型信息
2009-10-30 14:43 2034Andriod 要获得机型信息,需要得到授权。 对于模拟器, ... -
做完一个功能,记录一下总结
2009-08-14 15:46 1304每次做完一个东西,总有一点东西能总结出来。 这次是做一个检验 ... -
下载安装Cygwin
2009-08-10 15:14 2188http://www.programarts.com/cfre ... -
Cygwin完全下载指南(上)-正常下载篇
2009-08-10 14:55 4201http://www.gd-emb.com/detail/id ... -
使用java写tcp服务端
2009-08-07 16:27 4350因为要和另一家公司合作,就需要一下测试的服务器端,很简单,发一 ... -
成功开发iPhone软件的10个步骤
2009-08-07 10:53 1738一年前斯坦福和Apple联手推出了基于iPhone 平台 ...
相关推荐
一、Activity生命周期概述 Activity的生命周期主要由七个主要方法组成,它们分别是onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()和onRestart()。每个方法对应Activity的不同阶段,理解这些...
7. **onDestroy()**: 这是Activity生命周期的最后阶段,当系统决定销毁Activity时调用。通常是因为系统需要回收资源,或者Activity自己调用了finish()方法。 理解Activity的生命周期对于优化应用性能至关重要。例如...
在Android开发中,Activity是应用程序的基本构建...理解Activity生命周期及其在Task和Back Stack中的行为,有助于创建高效且用户体验良好的应用。在实际开发中,根据应用需求灵活运用这些概念,将使你的应用更加出色。
Intent则用于在Activity之间传递数据或启动服务,理解它们的生命周期和通信机制是Android开发的关键。 7. **Fragment**:Fragment是在大型屏幕上分割Activity的模块化组件,尤其在设计适应多屏幕尺寸的应用时,...
Activity生命周期包括创建(onCreate())、启动(onStart())、可见(onResume())、暂停(onPause())、停止(onStop())、恢复(onRestart())和销毁(onDestroy())等几个关键阶段。开发者需要根据这些阶段来管理...
Activity生命周期是指Activity从创建到销毁的整个过程。生命周期可以分为三个阶段:创建、运行和销毁。 1. 创建阶段:包括onCreate、onStart、onResume三个方法。这三个方法都是系统自动调用的,用于初始化Activity...
- Activity的生命周期:当创建一个Activity时,系统会调用几个生命周期方法。其中onCreate()方法是一个关键点,在这里完成对Activity的初始化,设置界面布局等。 - UI组件的布局管理:在XML中定义界面布局是Android...
"Android开发笔记"是由real6410公司为开发者提供的一份宝贵的资源,特别针对real6410开发板进行优化,旨在帮助开发者快速提升Android应用开发技能。这份资料包含了从基础知识到实战经验的全方位指导。 首先,"read ...
此外,还会讲解基础的Android应用程序开发,包括Activity生命周期、Intent的使用以及用户界面的构建。 接下来,“新版Android开发教程+笔记六--应用3、4 布局.pdf”可能会继续深入到更复杂的Android应用开发。布局...
新版Android开发教程及笔记将涵盖Android系统的基本架构、应用程序生命周期管理以及UI设计等核心概念。 1. **Android系统架构**:Android系统分为应用层、应用框架层、系统运行库层和Linux内核层。开发者主要在应用...
其次,笔记深入讲解了Android应用程序的生命周期管理,包括Activity、Service、BroadcastReceiver和ContentProvider的创建与使用。这部分内容对于理解和控制应用的行为至关重要,能确保你的程序在不同场景下运行稳定...
"新版Android开发教程&笔记--基础入门一.pdf"和"新版Android开发教程--基础入门二.pdf"涵盖了Android开发的基础概念,如Android应用程序的结构、Activity的生命周期、Intent的理解和使用,以及服务(Service)和广播...
"新版Android开发教程&笔记2--基础入门二"聚焦于为开发者提供最新的Android开发知识,帮助初学者迅速掌握Android应用开发的基本概念和技术。这篇教程可能涵盖了以下几个核心知识点: 1. **Android Studio入门**:...
5. Android基础知识:文件"新版Android开发教程&笔记--基础入门一.pdf"和"新版Android开发教程&笔记--基础入门二.pdf"可能涵盖了Android应用开发的基础概念,包括Activity生命周期、Intent机制、布局设计(如XML布局...
教程会深入讲解Activity的生命周期,包括onCreate()、onStart()、onResume()、onPause()、onStop()和onDestroy()等方法,以及如何在不同状态间进行状态保存和恢复。 四、意图(Intent)与数据传递 Intent是Android...
11. **服务与后台任务**:Service的生命周期和使用场景,IntentService的简单用法,以及如何处理后台任务。 12. **Intent与Activity间通信**:Intent的使用,包括显式和隐式Intent,以及Activity之间的数据传递。 ...
- `public void onCreate(Bundle icicle)`:这是Activity生命周期中的一个重要方法,当Activity被创建时调用。`Bundle icicle`参数用于保存Activity的状态信息。 - `setTheme(android.R.style.Theme_Dark)`:设置...