Android使用Application总结

什么是 Application 
Application和Activity,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息。通常我们是不需要指定一个Application的,这时系统会自动帮我们创建,如果需要创建自己 的Application,也很简单创建一个类继承 Application并在manifest的application标签中进行注册(只需要给Application标签增加个name属性把自己的 Application的名字定入即可)。 
         Android提供给开发程序员的概念空间中Application只是一个松散的表征概念,没有多少实质上的表征。在Android实际空间中看不到实际意义上的应用程序的概念,即使有一个叫Application的类,这个也就是个应用程序上下文状态,是一个极度弱化的概念。Application只是一个空间范畴的概念,Application就是Activity,Service之类的组件上下文描述。Application并不是Android的核心概念,而Activity才是Android的核心概念。 
      从Android的SDK文档中,我们知道一般情况Android应用程序是由以下四种组件构造而成的:Activity,Broadcast Intent Receiver,服务(Service),内容提供器(Content Provider)。 

android系统会为每个程序运行时创建一个Application类的对象且仅创建一个,所以Application可以说是单例 (singleton)模式的一个类.且application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局 的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以通过Application来进行一些,数据传递,数据共享 等,数据缓存等操作。

Application数据缓存 
      我一般会习惯在application中建立两个HashMap一个用于数据的传递,一个用于缓 存一些数据。比如有一个Activity需要从网站获取一些数据,获取完之后我们就可以把这个数据cache到Application 当中,当页面设置到其它Activity再回来的时候,就可以直接使用缓存好的数据了。但如果需要cache一些大量的数据,最好是cache一些 (软引用)SoftReference ,并把这些数据cache到本地rom上或者sd卡上。如果在application中的缓存不存在,从本地缓存查找,如果本地缓存的数据也不存在再从网 络上获取。

Android使用Application 

 首先需要重写Application,主要重写里面的onCreate方法,就是创建的时候,初始化变量的值。然后在整个应用中的各个文件中就可以对该变量进行操作了。   
  启动Application时,系统会创建一个PID,即进程ID,所有的Activity就会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。 

步骤:第一步、写一个全局的单例模式的MyApplication继承自Application 覆盖onCreate ,在这个方法里面实例化Application 

          第二步、配置全局的Context 
Application 配置全局Context   
第一步、写一个全局的单例模式的MyApplication继承自Application 覆盖onCreate ,在这个方法里面实例化Application   
第二步、配置全局的Context   
<application 
        android:name="com.example.utils.myapplication" 
        android:allowBackup="true" 
        android:icon="@drawable/ic_launcher" 
        android:label="@string/app_name" 
        android:theme="@style/AppTheme" > 
</application>   
第三步、使用,使用的时候用的时候根据类的名称访问Context   

android.app.Application类包含了4个公开的方法 
void  onConfigurationChanged(Configuration newConfig) 
void  onCreate()  //这里才是真正的入口点。 
void  onLowMemory() 
void  onTerminate() 
说明: 
      onCreate();  这个函数是当我们的应用开始之时就被调用了,比应用中的其他对象创建的早,这个实现尽可能的快一点,因为这个时间直接影响到我们第一个activity/service/receiver。如果你要重写这个方法必须调用super.onCreate(). 
      onTerminate(): 这个函数是模拟一个过程环境,在真机中永远也不会被调用。 
真正的Android入口点是application的main,你可以看下androidmanifest.xml的包含关系就清楚了,并不是每个应用都必须有Activity的。 

/**
 * 全局application,为什么要用application,主要是因为这就像一个session,
 * 用于临时保存各种传值,服务器url,如果用数据库或者其他的操作来保存这些
 * 数据的话管理起来就很繁琐,而且也不利于程序的运行速度。
 * 
 */
package com.example.utils;

import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Application;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.StrictMode;

public class myapplication extends Application {
  private UsersDBManager UsersDBManager1;
  private SystemDBManager SystemDBManager1;
  private SubmitDBManager submitDBManager1;

  /**
   * 为了完全退出程序调用方法 myapplication1.getInstance().addActivity(this);
   * myapplication1.getInstance().exit();
   */
  private static myapplication instance;

  private List<Activity> activityList = new LinkedList<Activity>();

  public myapplication() {
  }

  // 单例模式获取唯一的MyApplication实例
  public static myapplication getInstance() {
    if (null == instance) {
      instance = new myapplication();
    }
    return instance;
  }

  // 添加Activity到容器中
  public void addActivity(Activity activity) {
    activityList.add(activity);
  }

  // 遍历所有Activity并finish
  public void exit() {
    for (Activity activity : activityList) {
      activity.finish();
    }
    System.exit(0);
  }
         @SuppressLint("NewApi")
  @Override
  public void onCreate() {
    // TODO Auto-generated method stub

    super.onCreate();

    UsersDBManager1 = new UsersDBManager(this);
    SystemDBManager1 = new SystemDBManager(this);
    submitDBManager1 = new SubmitDBManager(this);
    // 初始化全局变量
    try {
      /**
       * 添加网络权限,安卓4.03必须
       */
      StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
          .detectDiskReads().detectDiskWrites().detectNetwork()
          .penaltyLog().build());
      StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
          .detectLeakedSqlLiteObjects().detectLeakedClosableObjects()
          .penaltyLog().penaltyDeath().build());
      /**
       * 添加网络权限,安卓4.03必须
       */

    } catch (Exception e) {
      e.printStackTrace();
    }
  }

}
application中有几个变量和相应的setter getter方法。  

在其他activity之后调用如下

myapplication = (myapplication) getApplication();
    myapplication.getInstance().addActivity(this);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值