【生命周期】activity生命周期(一)

1.Activity 与 Context

查看一下Activity的继承关系就可以发现,Activity最终是继承了Context.所以这意味着Actvitiy有Context的功能。

而Context是一个抽象类,它的实现在ContextImpl.但是Activity继承自ContextWrapper,ContextWrapper实现了接口但是只不过是把这些方法都转给了它的一个成员变量mBase来处理。而mBase在Activity当中是Activity.attach方法的时候执行才正式生效的。(Activity.attach发生在Activity启动阶段,在onCreate之前)。

Context在源码中的描述为:

/**

* Interface to global information about an application environment.  This is

* an abstract class whose implementation is provided by

* the Android system.  It

* allows access to application-specific resources and classes, as well as

* up-calls for application-level operations such as launching activities,

* broadcasting and receiving intents, etc.

*/

总结为两点

1.获取信息

2.进行操作

所以说,作为一个Activity,它有上述两种功能,不过这并不是它的全部。

2.Activity 对象创建和销毁的时机

源码层面是在ActivityThread和Instrumentation类中。

这两个类都不能望文生义,ActivityThread既不是线程也不是Activity,它是管理应用端运行的类,负责与AMS进行交互。它管理着四大组件,也和应用进程的生死紧密关联。

关于Activity的启动流程网上讲述的有很多,读者可自行搜索,大体上是从 应用端A请求-AMS批准-应用端A或B执行启动。其中AMS也控制着Activity的生命周期。

如果你对AMS(ActivityManagerSrevice)不够了解,你可能会疑问为什么采用这种方式来进行操作。

我对此的理解是,一方面,Android是多任务的系统,每个应用进程当然都想在前台活动,但是前台只有一个,所以这就需要调度,保证一切都按照用户的想法来执行。AMS就是负责调度Activity状态的类,它管理了四大组件在前台或后台运行时的状态,在程序切换到后台后,后台的应用得到了通知就不会做一些用户不期待的事情。这样的话在合适时候有合适的回调(在Activity来看就是生命周期),即方便了系统管理,友方便开发者进行开发。

但是坏处也有,就是开发者不了解Activity的运行机制,就有可能会犯下内存泄漏的错误。

Activity创建的时候开发者可以不用关心,但是销毁的时候是最值得注意的事情,虽然大家都清楚,在onDesstroy后,Activity就不再可用了,ActivityThread最终对其的处理也是把它(实际是ActivityClientRecord)从mActivities中移除出去.这个时机是在performDestroyActivity中(onDestroy就是在这个方法内部调用的)。

而启动的时机是在launch和relaunch中。

3.生命周期的方法被调用的时候应该做什么

常用的生命周期回调是

protected void onCreate(Bundle savedInstanceState);

protected void onStart();

protected void onRestart();

protected void onResume();

protected void onPause();

protected void onStop();

protected void onDestroy();

首先需要说明的是,上面的回调中只有onCreate和onDestroy 是在当前Activity实例中仅执行一次,别的都有可能随着AMS的管理执行多次。

所以在onCreate做的动作是必须而且仅需做一次的工作。onDestroy也是销毁剩下的所有与该Activity有直接依赖的资源。

而在onStart阶段,考虑到onStop的时机,你只需考虑在onStop需要释放什么资源,那么只要在onStart做对应的处理即可。

同样,onPause和onResume应该都不需要做太多的处理,因为对onPasue,AMS对其有限制,最多执行500ms,其中包括了跨进程调用和其它方法的开销。

如果你在500ms没有完成相应的工作,其实也不必担心,它(AMS)只不过强行结束了系统端的处理,马上进行新Activity的Resume调用。

而还有一些onRestart,onPostCreate等方法虽不太常用,但是只需要在ActivityThread或Instrumentation中找到对应的时机,相应应该不难理解。

4.保持数据 onSaveInstanceState

因为Activity的销毁时机是不确定的(几乎所有activity都有回到后台的可能性),然后很有可能会面临销毁重建的过程。

正常的比如屏幕旋转,不正常的有被内存管理回收给处理的。

所以适当的保持数据可以保证Activity在回到前台的时候不会让用户感到困惑.

而onSaveInstance发生的时机有很多,因为它会在生命周期改变的时候调用.(pause stop)

而onRestoreInstaceState会在onCreate 之后的 onStart之后调用【launcher的时候,而不是reStart的时候】。

同时注意到这两个方法都有一个三个参数的重载方法是为持久化存储准备的。这两中只会调用一种,所以要注意。

参考http://blog.csdn.net/qq_16628781/article/details/61643150

时间: 2024-10-06 00:23:23

【生命周期】activity生命周期(一)的相关文章

Android生命周期 & Activity生命周期

了解Android系统的进程优先级的变化方式 1.Android系统一般是运行在资源受限的硬件平台上,因此资源管理对Android系统很重要 2.为了保证高优先级程序正常运行,可以在无任何警告的情况下终止低优先级程序,并回收其使用的系统资源,因此,Android程序并不能完全控制自身的生命周期,而是由ANdroid系统进行调度和控制的 3.Android系统尽可能地不主动去终止应用程序,即使生命周期结束的程序也会保存在内存中,以便再次快速启动 4.但在内存紧张时,系统会根据进程的优先级清除进程,

android学习笔记 activity生命周期&任务栈&activity启动模式

activity生命周期 完整生命周期 oncreate->onstart->onresume->onpause->onstop->ondestory 使用场景:应用程序退出自动保存数据 ondestory oncreate 可视生命周期 onstart->onresume->onpause->onstop 使用场景:应用程序最小化 暂停的操作 onstop onstart 前台生命周期 onresume->onpause 界面用户仍然可见,但是失去焦

Activity生命周期详解

我们来看一下这一张经典的生命周期流程图: 相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程. 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态. 2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行. 3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onRe

安卓activity生命周期

相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程. 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态. 2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行. 3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态. 4.当前

Android——Activity生命周期(转)

Activity生命周期 子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精髓. 近来回顾了一下关于Activity的生命周期,参看了相关书籍和官方文档,也有了不小的收获,对于以前的认知有了很大程度上的改善,在这里和大家分享一下. 熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方

Android 第六课——Activity生命周期

声明:本文转载自 http://blog.csdn.net/liuhe688/article/details/6733407 , 感觉读了这篇文章之后,对Activity又是一个更深层次的理解,所以果断手贱转载了!希望自己以后能多看看这篇文章,提升自己! 熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方法会在合适的时间被servlet容器调用.其实android中的Activity运行机制跟servlet有些相似之处

Android Activity 生命周期

生命周期流程图: 相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程. 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态. 2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行. 3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运

转:基础总结篇之一:Activity生命周期

熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方法会在合适的时间被servlet容器调用.其实android中的Activity运行机制跟servlet有些相似之处,Android系统相当于servlet容器,Activity相当于一个servlet,我们的Activity处在这个容器中,一切创建实例.初始化.销毁实例等过程都是容器来调用的,这也就是所谓的“Don't call me, I'll call you.”

activity之间参数传递&amp;&amp;获取activity返回值&amp;&amp;activity生命周期

Activity之间参数传递 A activity想将参数传给B activity时可以利用Intent将消息带过去 Intent intent = new Intent(this,BActivity.class); intent.putExtra("xxxx", "xxxx"); 数据量多的话可以使用 Bundle bundle = new Bundle(); intent.putExtras(bundle); 获取activity返回值 A activity调用

Activity生命周期方法的调用顺序工程与测试日志

下面为测试activity的方法的执行顺序   工程与测试资源地址 android工程 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.finalizetest"