`
amyer
  • 浏览: 41052 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

摘抄:Android:应用程序的生命周期

阅读更多
应用程序生命周期

引用
本节是从《精通android2》中转载,感觉在做了几个anctivity之后,这里的介绍是比较容易理解和记忆的,所以摘在这里,供学习查阅。



Android应用程序的生命周期由系统根据用户需求、可用资源等进行严格管理。例如,用户可能希望启动Web浏览器,但是否启动该应用程序最终由系统决定。尽管系统是最终的决定者,但它会遵从一些既定的和逻辑上的原则来确定是否可以加载、暂停或停止应用程序。如果用户正在操作一个Activity,系统将为该应用程序提供较高的优先级。相反,如果一个Activity不可见,并且系统决定必须关闭一个应用程序来释放资源,它会关闭优先级较低的应用程序。

这与基于Web的J2EE应用程序的生命周期截然不同。J2EE应用程序由运行它们的容器松散地管理。例如,如果一个应用程序空闲了预先设定的时长,J2EE容器可以从内存中删除它。但容器通常不会根据负载或可用的资源在内存中加载和删除应用程序。J2EE容器通常具有足够的资源同时运行多个应用程序。而对于Android,资源更加受限,所以Android必须能够更多和更强有力地控制应用程序。

说明 Android在独立的进程里运行每个应用程序,每个进程都有自己的虚拟机。这提供了一种受保护的内存环境。而且,通过将应用程序隔离到独立进程中,系统可以控制哪个应用程序具有较高优先级。例如,执行CPU密集型任务的后台进程不能阻止拨入的电话。

应用程序生命周期的概念是逻辑上的,但Android应用程序在某些方面可能会使事情变得复杂。具体来讲,Android应用程序层次结构是面向组件和集成的。这支持实现富用户体验、流畅重用和轻松的应用程序集成,但却为应用程序生命周期管理器带来了不便。

我们看一个典型场景。用户通过电话与某人通话,他需要打开一封电子邮件回答一个问题。他转到主屏幕,打开邮件应用程序,打开电子邮件,单击邮件中的一个链接,然后从一个网页读取股票报价来回答他朋友的问题。此场景需要4个应用程序:主页应用程序、通话应用程序、电子邮件应用程序和浏览器应用程序。当用户从一个应用程序转到另一个时,他的体验是流畅的。然而,在后台,系统会保存和恢复应用程序状态。例如,当用户单击电子邮件中的链接时,系统在启动浏览器应用程序Activity来加载一个URL之前,会保存正在运行的电子邮件的元数据。实际上,系统在启动任何Activity之前都会保存另一个Activity的元数据,以便它能够返回到该Activity(例如,当用户取消操作时)。如果内存不足,系统将必须关闭一个运行Activity的进程并在必要时恢复它。

生命周期对Android应用程序及其组件很重要。只有理解和处理好生命周期事件,才能构建稳定的应用程序。运行Android应用程序及其组件的进程会经历各种生命周期事件,Android提供了回调,通过实现它们可以处理状态变化。对于初学者,需要熟悉一个Activity的各种生命周期回调(参见代码清单2-7)。

代码清单2-7 Activity的生命周期方法

    protected void onCreate(Bundle savedInstanceState); 
    protected void onStart(); 
    
    protected void onRestart(); 
    protected void onResume(); 
    protected void onPause(); 
    protected void onStop(); 
    protected void onDestroy();

代码清单2-7显示了Android在一个Activity生命周期内调用的一组生命周期方法。一定要理解系统在何时调用每个方法,才能确保实现稳定的应用程序。请注意,不需要对所有这些方法都做出响应。但是,如果这样做了,一定要确保也调用了超类的相应方法。图2-15展示了各种状态之间的转换。

(点击查看大图)图2-15 Activity的状态转换

系统可以根据发生的其他事件来启动和停止Activity。刚创建Activity时,Android调用onCreate()方法,然后总是会调用onStart(),但调用onStart()之前并不总是会调用onCreate(),因为可以在应用程序停止(调用onStop())之后调用onStart()。当调用onStart()时,Activity对用户不可见,但稍后就会可见。在调用onStart()之后,在Activity处于前台且能供用户访问时调用onResume()。这时,用户就会与Activity交互。

当用户决定转到另一个Activity时,系统将调用当前Activity的onPause()方法,然后可能调用onResume()或onStop()。例如,如果用户将当前Activity调回前台,将调用onResume()。如果Activity变得对用户不可见,将调用onStop()。如果Activity调回了前台,那么在调用onStop()之后,将调用onRestart()。如果Activity位于Activity栈中,但对用户不可见,并且系统决定结束该Activity,那么将调用onDestroy()。

上面介绍的Activity状态模型看起来很复杂,但你没有必要对每一种可能的场景都进行处理。实际上,最常调用的将是onCreate()和onPause()。你将调用onCreate()来为Activity创建用户界面。在此方法中,可以将数据绑定到部件并连接UI组件的任何事件处理程序。在onPause()方法中,你希望将关键数据持久保存到应用程序的数据存储中。onPause()方法是在系统结束应用程序前调用的最后一个安全的方法。无法保证onStop()和onDestroy()会被调用,所以不要依赖这些方法来实现关键逻辑。

从上面的介绍中可以了解到什么?系统管理应用程序,它可以在任何时候启动、停止或恢复应用程序组件。尽管系统控制着应用程序组件,但这些组件的运行并不是与应用程序完全隔离的。换言之,如果系统启动了应用程序中的一个Activity,则能够在该Activity中使用一种应用程序上下文。例如,在应用程序的各种Activity之间,经常会共享一些全局变量。要共享全局变量,可以扩展android.app.Application类,然后在onCreate()方法中初始化该全局变量(参见代码清单2-8)。然后,Activity和应用程序中的其他组件在执行时,可以自由访问这些引用。

代码清单2-8 Application类的扩展

    public class MyApplication extends Application 
    { 
        // global variable 
        private static final String myGlobalVariable; 
    
        @Override 
        public void onCreate() 
        { 
            super.onCreate(); 
            //... initialize global variables here 
            myGlobalVariable = loadCacheData(); 
        } 
    
        public static String getMyGlobalVariable() { 
            return myGlobalVariable; 
        } 
    
    }
  • 大小: 15.6 KB
分享到:
评论

相关推荐

    《Android4.0网络编程详解》 高清扫描 完整版 PDF电子书 详细书签

    JSON操作,需要掌握的HTTP知识,数据下载/上传,Socket编程,浏览器开发,Android中软件界面设计新大陆——采用HTML设计软件界面,Android应用程序的生命周期等内容进行了深入的讲解。 友情提醒: 大家在阅读高清...

    android 内存摘抄

    在Android系统中,某些应用程序需要被标记为“持久化”进程,即在系统重启后依然能够自动启动。这通常适用于系统级应用或者具有关键服务的应用。 例如,在`/system/app`目录下的应用,如果希望其在系统重启后仍然...

    android 内存泄漏 摘抄

    资源对象的生命周期不仅仅局限于Java虚拟机内部,还涉及到操作系统层面的资源管理。即使Java层面的对象被设置为`null`,只要底层资源没有释放,那么这部分内存仍然会被占用,直到系统回收或应用程序结束。此外,某些...

    汉王屏幕摘抄精灵.rar

    1. 安装与启动:首先,用户需要下载并安装汉王屏幕摘抄精灵的压缩包,解压后运行安装程序完成安装。然后,双击桌面快捷方式启动软件。 2. 屏幕选择:在软件界面中,选择要摘抄的文本区域,可以使用矩形、多边形或...

    经典IT文章摘抄经典IT文章摘抄

    经典IT文章摘抄经典IT文章摘抄经典IT文章摘抄经典IT文章摘抄经典IT文章摘抄

    excel 资料-----excel vba 方法参考 & excel vba 函数参考 & excel 应用大全摘抄

    本资料主要涵盖三个方面:Excel VBA方法参考、Excel VBA函数参考以及Excel应用大全摘抄,这些都是Excel高级使用者和开发者必须掌握的关键知识点。 **Excel VBA方法参考** Excel VBA提供了大量的方法来操作工作簿、...

    汉王屏幕摘抄精灵

    在实际应用中,汉王屏幕摘抄精灵不仅适用于学术研究,如快速摘录论文资料,也广泛应用于办公领域,如整理报告、编辑合同。对于从事翻译工作的人来说,它也是一个得力的助手,可以快速提取外文资料中的文字,提高翻译...

    阿里云 专有云企业版 V3.8.1 云数据库 MongoDB 版 用户指南 20190910

    云数据库MongoDB版是阿里云提供的一种基于云计算的NoSQL数据库解决方案,旨在帮助用户快速构建和部署高性能、高可用的数据库应用程序。该解决方案基于MongoDB数据库管理系统,提供了高性能的数据存储和查询功能。 ...

    作文素材:好句好段摘抄.doc

    作文素材:好句好段摘抄 本文档是一个文档,标题为“作文素材:好句好段摘抄”,主要内容是摘抄了一些优美的句子和段落,旨在为写作提供灵感和参考。下面是从文档中提炼出的知识点: 1. 人生哲理:人生苦短,生命...

    美文摘抄600字.doc

    美文摘抄600字.doc

    阿里云 专有云企业版 V3.5.2 企业级分布式应用服务EDAS 产品简介 - 20180831.pdf

    阿里云专有云企业版企业级分布式应用服务EDAS产品简介是阿里云提供的一款企业级分布式应用服务产品,旨在帮助企业快速构建、部署和管理分布式应用程序。该产品版本为V3.5.2,文档版本为20180831。 法律声明 在阅读...

    大卫卷一卷二摘抄笔记

    吴大卫的摘抄笔记是对《TCP/IP路由技术》卷一卷二的精炼总结,旨在帮助网络从业人员深入理解这一关键主题。以下是笔记中可能包含的一些关键知识点: 1. **TCP/IP模型**:TCP/IP模型分为四层或五层(视具体版本),...

    唐都_TDPIT接口实验_程序清单

    2. **Win32应用程序和VxD之间的通信**:通过实验了解Win32应用程序与VxD之间通信的方法。 3. **TD-PIT实验装置配套VxD设计实验**:展示了如何为TD-PIT实验装置设计配套的VxD驱动程序,以便更好地与实验装置进行交互...

    [遗失的爱情美文摘抄]-摘抄师生之情美文.docx

    写在沙滩上的字会被潮水冲走,这可以与数字世界中的数据生命周期相联系。在IT领域,数据的创建、存储、传播和消失都遵循一定的规律,比如云存储中的数据可能会因用户操作或服务终止而消失,这提醒我们在数字化生活...

    阿里云 专有云企业版 V3.5.2 容器服务 产品简介 - 20180831.pdf

    阿里云专有云企业版V3.5.2容器服务产品...阿里云专有云企业版V3.5.2容器服务产品简介是阿里云提供的一款功能强大且灵活的容器服务产品,旨在帮助企业快速构建和部署容器化应用程序,提高应用程序的开发效率和可靠性。

    UNIX环境高级编程 摘抄

    8. **进程管理**:从第七章开始,书中详细阐述了进程的生命周期、控制、进程间的关系以及信号处理,这些都是多进程编程的核心内容。 9. **终端I/O和高级I/O**:第十章至第十三章涵盖了终端交互、高级I/O技术以及...

    手机 汉王摘抄.rar

    总的来说,汉王摘抄是一款结合了OCR技术、文字识别和翻译功能的手机应用,旨在帮助用户更高效地处理和利用文字信息。无论是学术研究、工作记录还是日常生活,这款软件都能提供极大的便利,减少手动输入的工作量,...

    摘抄罗升阳(大神)的contentprovider示例

    ContentProvider是Android系统中实现数据共享的机制,它可以将应用程序的数据暴露给其他应用。每个ContentProvider都需要实现一组标准接口,包括`query()`、`insert()`、`update()`和`delete()`方法,分别用于查询、...

    阿里云 专有云企业版 V3.8.0 企业级分布式应用服务 用户指南 20190621.pdf

    - EDAS作为一个企业级的分布式应用服务平台,支持微服务架构,提供应用生命周期管理、服务治理、流量调度等功能。 - 用户可以快速入门,通过登录EDAS控制台进行应用的部署和管理。 4. **功能特性**: - 应用部署...

Global site tag (gtag.js) - Google Analytics