zoukankan      html  css  js  c++  java
  • Android

      每次应用程序运行时,应用程序的Application类都保持实例化的状态。与Activity不同,配置改变并不会导致应用程序重启。通过扩展Application类,可以完成以下3项工作:

      1)对android运行时广播的应用程序级事件(如低内存)作出响应

      2)在应用程序组件之间传递对象

      3)管理和维护多个应用程序组件使用的资源

      其中,后两项工作通过使用一个单态能够更能多地完成。当在Manifest中注册了Application实现以后,它会在创建应用程序进程的时候得到实例化。因此,Application的实现在本质上是单态的,并且应该作为单态进行实现,以便提供对齐方法和成员变量的访问。

    扩展和使用Application类示例:

    public class MyApplication extends Application{
          private static MyApplication singleton;
          
          /**
           *返回应用程序实例
           */
          public static MyApplication getInstance(){
                  return singleton;        
          }  
          @Override
          public final void onCreate(){
                  super.onCreate();
                  singleton = this;    
          }
    }
    

      在创建新的Application类后,必须使用一个name属性在Manifest的application节点中注册它,如下面的代码段所示:

      

    <application android:icon="@drawable/icon"
                 android:name=".MyApplication">
    </application> 
    

      当应用程序开始运行的时候,Application实现将会得到实例化。创建新的状态变量和全局资源,以便从应用程序组件中进行访问

    MyObject value = MyApplication.getInstance().getGlobalStateValue();
    MyApplication.getInstance().setGlobalStateValue(myObjectValue);

      虽然对于在松散耦合的应用程序组件之间传递对象,以及维护应用程序状态或共享资源,这种方法特别有效,但是一般来说创建自己的静态单态类而不是为特殊用途扩展Application类是更好的做法,除非你还要处理生命周期事件。

    重写应用程序的生命周期事件

      Application类为应用程序的创建和终止、低可用内存和配置改变提供了事件处理程序(如前面部门所述)。

    通过重写以下这些方法,可以为上述几种情况实现自己的应用程序行为:

      1)onCreate   在创建应用程序时调用。可以重写这个方法来实现实例化应用程序单态,以及创建和实例化任何应用程序状态变量或共享资源。

      2)onLowMemory  当系统处于资源匮乏的状态时,具有良好行为的应用程序可以释放额外的内存。这个方法一般只会在后台进程已经终止,但是前台应用程序仍然缺少内存时调用。可以重写这个处理程序来清空缓存或者释放不必要的资源。

      3)onTrimMemory  作为onLowMemory的一个特定于应用程序的替代选择,在Android4.0(API level13)中引入。当运行时决定当前应用程序应该尝试减少其内存开销时(通常在它进入后台是)调用。它包含一个level参数,用于提供请求的上下文。

      4)onConfigurationChanged  与Activity不同,在配置改变时,应用程序对象不会被终止和重启。如果应用程序使用的值依赖于特定的配置,则重写这个方法来重新加载这些值,或者在应用程序级别处理配置改变。

    public class MyApplication extends Application{
          private static MyApplication singleton;
          
          /**
           *返回应用程序实例
           */
          public static MyApplication getInstance(){
                  return singleton;        
          }  
          @Override
          public final void onCreate(){
                  super.onCreate();
                  singleton = this;    
          }
    
          @Override
          public final void onLowMemory(){
                  super.onLowMemory();
          }
    
          @Override
          public final void onTrimMemory(int level){
                  super.onTrimMemory(level);
          }
    
          @Override
          public final void onConfigurationChanged(Configuration newConfig){
                  super.onConfigurationChanged(newConfig);
          }
    }
    

      

    ------------------------------
    Brant Liu

    lbf1988@qq.com

    有梦想的码农
  • 相关阅读:
    图像检索(image retrieval)- 11
    图像检索(image retrieval)- 10相关
    Mock.js简易教程,脱离后端独立开发,实现增删改查功能
    Azure Monitor (3) 对虚拟机磁盘设置自定义监控
    Azure Monitor (1) 概述
    Azure SQL Managed Instance (2) 备份SQL MI
    Azure Virtual Network (17) Private Link演示
    Azure Virtual Network (16) Private Link
    Azure Virtual Network (15) Service Endpoint演示
    Azure Virtual Network (14) Service Endpoint服务终结点
  • 原文地址:https://www.cnblogs.com/brantliu/p/4866622.html
Copyright © 2011-2022 走看看