zoukankan      html  css  js  c++  java
  • Application详解

    Application详解

    一、简介

    简介:Base class for maintaining global application state.The Application class, or your subclass of the Application class, is instantiated before any other class when the process for your application/package is created.

    Application是维护应用全局状态的基类。它的创建早于应用进程的其他任何类。同时application是全局单例的,即只有一个实例且不同组件获取到的application都是同一个。它的生命周期等于应用的生命周期。

    二、方法介绍

    onCreate

    application启动时回调,时机早于activity、service、receiver的oncreate,晚于content providers的oncreate。该方法不可执行耗费时间的任务,因为这样会影响第一个activity、service、receiver的启动。

    在该方法内主要完成以下两种操作:

    1、初始化 应用程序级别 的资源,如全局对象、环境配置变量、图片资源初始化、推送服务的注册等
    注:请不要执行耗时操作,否则会拖慢应用程序启动速度
    2、数据共享、数据缓存
    设置全局共享数据,如全局共享变量、方法等
    注:这些共享数据只在应用程序的生命周期内有效,当该应用程序被杀死,这些数据也会被清空,所以只能存储一些具备 临时性的共享数据

    attachBaseContext

    该方法是继承自Context类,它回调时机早于onCreate

    onConfigurationChanged

    当配置发生变化且在manifest中添加了对应的配置,那么会回调该方法

    onLowMemory/onTrimMemory

    onTrimMemory通知 应用程序 当前内存使用情况(以内存级别进行识别)Android 4.0后提供的一个API
    onLowMemory监听Android系统整体内存较低时刻

    使用时注意不应该比较值与某个级别是否相等,应该比较值是否大于或等于某个级别。

    onTrimMemory()中的TRIM_MEMORY_UI_HIDDEN与onStop()的关系:

    onTrimMemory()中的TRIM_MEMORY_UI_HIDDEN的回调时刻:当应用程序中的所有UI组件全部不可见时
    Activity的onStop()回调时刻:当一个Activity完全不可见的时候
    使用建议:
    在 onStop()中释放与 Activity相关的资源,如取消网络连接或者注销广播接收器等
    在onTrimMemory()中的TRIM_MEMORY_UI_HIDDEN中释放与UI相关的资源,从而保证用户在使用应用程序过程中,UI相关的资源不需要重新加载,从而提升响应速度

    两者关系:
    OnTrimMemory()是 OnLowMemory() Android 4.0后的替代 API
    OnLowMemory() = OnTrimMemory()中的TRIM_MEMORY_COMPLETE级别
    若想兼容Android 4.0前,请使用OnLowMemory();否则直接使用OnTrimMemory()即可

    registerActivityLifecycleCallbacks

    注册应用程序内 所有Activity的生命周期监听,unregisterActivityLifecycleCallbacks是对应的注销方法。

    三、应用

    通过 Application 传递数据
      假如有一个Activity A, 跳转到 Activity B ,并需要传递一些数据,通常的作法是 Intent.putExtra() 让Intent携带,或者有一个Bundle把信息加入Bundle让Intent传递Bundle对象,实现传递。但这样有一个问题在于,Intent 和 Bundle 所能携带的数据类型都是一些基本的数据类型,如果想实现复杂的数据传递就比较麻烦了,通常需要实现 Serializable 或者 Parcellable 接口。这其实是Android的一种IPC数据传递的方法。如果我们的两个Activity在同一个进程当中为什么还要这么麻烦呢,只要把需要传递的对象的引用传递过去就可以了。
      基本思路是:在 Application 中创建一个 HashMap ,以字符串为key,Object为value这样我们的 HashMap 就可以存储任何类型的对象了。在Activity A中把需要传递的对象放入这个HashMap,然后通过 Intent 或者其它途径再把这 key 传递给Activity B ,Activity B 就可以根据这个字符串在 HashMap 中取出这个对象了。只要再向下转型 ,就实现了对象的传递。

    四、源码分析

    application创建流程分析

    long117long的专栏_WizardDragon_CSDN博客-Android开发高手课,《Android开发高手课》自我总结,android领域博主

    Android:全面解析 熟悉而陌生 的Application类使用 - 简书

    理解Application创建过程 - Gityuan博客 | 袁辉辉的技术博客

  • 相关阅读:
    【读书笔记】iOS-类别
    【读书笔记】iOS-特性
    【读书笔记】iOS-对象初始化
    【读书笔记】iOS-内存管理
    iOS---类方法(静态方法)和实例方法
    iOS ---Extension编程指南
    Swift学习与复习
    iOS----Xcode6或者Xcode7设置LaunchImage图标
    iOS----------使用 Xcode6或Xcode7配置.pch文件
    iOS开发----优秀文章推荐
  • 原文地址:https://www.cnblogs.com/Robin132929/p/13807815.html
Copyright © 2011-2022 走看看