• 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

    有梦想的码农
  • 相关阅读:
    静态代码块执行顺序
    静态代码块
    方法的定义(实例与静态)
    变量的声明(实例与静态)
    static关键字
    封装2
    线程1
    数组元素的查找——二分法查找
    docker介绍、安装及要素讲解
    渗透测试基础
  • 原文地址:https://www.cnblogs.com/brantliu/p/4866622.html
Copyright © 2020-2023  润新知