什么是 Application

  Application和Activity,Service由于是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象。用来存储系统的一些信息。通常我们是不须要指定一个Application的,这时系统会自己主动帮我们创建,假设须要创建自己 的Application。也非常easy创建一个类继承 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的。

  1. /**
  2. * 全局application,为什么要用application。主要是由于这就像一个session。
  3. * 用于暂时保存各种传值,serverurl,假设用数据库或者其它的操作来保存这些
  4. * 数据的话管理起来就非常繁琐,并且也不利于程序的执行速度。
  5. *
  6. */
  7. package com.example.utils;
  8.  
  9. import java.io.InputStream;
  10. import java.util.LinkedList;
  11. import java.util.List;
  12.  
  13. import android.annotation.SuppressLint;
  14. import android.app.Activity;
  15. import android.app.Application;
  16. import android.graphics.Bitmap;
  17. import android.graphics.BitmapFactory;
  18. import android.os.StrictMode;
  19.  
  20. public class myapplication extends Application {
  21. private UsersDBManager UsersDBManager1;
  22. private SystemDBManager SystemDBManager1;
  23. private SubmitDBManager submitDBManager1;
  24.  
  25. /**
  26. * 为了全然退出程序调用方法 myapplication1.getInstance().addActivity(this);
  27. * myapplication1.getInstance().exit();
  28. */
  29. private static myapplication instance;
  30.  
  31. private List<Activity> activityList = new LinkedList<Activity>();
  32.  
  33. public myapplication() {
  34. }
  35.  
  36. // 单例模式获取唯一的MyApplication实例
  37. public static myapplication getInstance() {
  38. if (null == instance) {
  39. instance = new myapplication();
  40. }
  41. return instance;
  42. }
  43.  
  44. // 加入Activity到容器中
  45. public void addActivity(Activity activity) {
  46. activityList.add(activity);
  47. }
  48.  
  49. // 遍历全部Activity并finish
  50. public void exit() {
  51. for (Activity activity : activityList) {
  52. activity.finish();
  53. }
  54. System.exit(0);
  55. }
  56. @SuppressLint("NewApi")
  57. @Override
  58. public void onCreate() {
  59. // TODO Auto-generated method stub
  60.  
  61. super.onCreate();
  62.  
  63. UsersDBManager1 = new UsersDBManager(this);
  64. SystemDBManager1 = new SystemDBManager(this);
  65. submitDBManager1 = new SubmitDBManager(this);
  66. // 初始化全局变量
  67. try {
  68. /**
  69. * 加入网络权限,安卓4.03必须
  70. */
  71. StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
  72. .detectDiskReads().detectDiskWrites().detectNetwork()
  73. .penaltyLog().build());
  74. StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
  75. .detectLeakedSqlLiteObjects().detectLeakedClosableObjects()
  76. .penaltyLog().penaltyDeath().build());
  77. /**
  78. * 加入网络权限,安卓4.03必须
  79. */
  80.  
  81. } catch (Exception e) {
  82. e.printStackTrace();
  83. }
  84. }
  85.  
  86. }

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

在其它activity之后调用例如以下

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

版权声明:本文博主原创文章,博客,未经同意不得转载。

Android采用Application总结一下的更多相关文章

  1. Android 采用post方式提交数据到服务器

    接着上篇<Android 采用get方式提交数据到服务器>,本文来实现采用post方式提交数据到服务器 首先对比一下get方式和post方式: 修改布局: <LinearLayout ...

  2. Android笔记——Application的作用

    一.Application是什么 Application和Actovotu,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象, ...

  3. Android 采用HttpClient提交数据到服务器

    在前几篇文章中<Android 采用get方式提交数据到服务器><Android 采用post方式提交数据到服务器>介绍了android的两种提交数据到服务器的方法 本文继续介 ...

  4. [转]Android中Application类的用法

    原文链接:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application ...

  5. Android代码优化----Application节点的模板写法及UI工具类

    一. MyApplication类的编写: 新建一个类MyApplication,继承自Application.代码如下: MyApplication.java: package com.smyhva ...

  6. 【转】Android中Application类用法

    转自:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application和A ...

  7. Android使用Application总结

    对于application的使用,一般是 在Android源码中对他的描述是; * Base class for those who need to maintain global applicati ...

  8. 在android.app.Application中定义全局变量

    在Android应用中使用全局变量,除了public的静态变量,还有更优雅的方式是使用android.app.Application. 启动Application时,系统会创建一个PID,即进程ID, ...

  9. 【转载】Android使用Application总结

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

随机推荐

  1. ImageMagick wrapper for php

    https://code.google.com/archive/p/phmagick/

  2. Qt之日志输出文件

    在Qt开发过程当中经常使用qDebug等一些输出来调试程序,但是到了正式发布的时候,都会被注释或者删除,采用日志输出来代替.     做过项目的童鞋可能都使用过日志功能,以便有异常错误能够快速跟踪.定 ...

  3. mac下brew install 报错

    mac下brew install 报错 错误提示: 原因:是这个brew的权限不正确 修改一下这个brew的权限 chown root:wheel /usr/local/bin/brew

  4. Android手势识别(单击 双击 抬起 短按 长按 滚动 滑动)

    对于触摸屏,其原生的消息无非按下.抬起.移动这几种,我们只需要简单重载onTouch或者设置触摸侦听器setOnTouchListener即可进行处理.不过,为了提高我们的APP的用户体验,有时候我们 ...

  5. QNX---- interrupts 例程

    #include <sys/neutrino.h> int interruptID; const struct sigevent * intHandler (void *arg, int ...

  6. Codeforces Round #214 (Div. 2) C. Dima and Salad (背包变形)

    C. Dima and Salad time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  7. IdHttpServer实现webservice(130篇DataSnap文章)

    IdHttpServer实现webservice   朋友有个项目,通信协议使用HTTP,数据序列使用BIN(二进制).他不知道要选用何种技术方案. REST webservice是http+json ...

  8. 暴力拆解CPU

    http://www.ruanyifeng.com/blog/2010/11/cpu_autopsy.htmlhttp://bbs.mydigit.cn/read.php?tid=110272http ...

  9. 基于visual Studio2013解决面试题之0301累加

     题目

  10. Ubuntu通过源代码编译安装Octave 4.0

    本教程/笔记,意在指导在Ubuntu及其它Linux系统上怎样通过源代码安装Octave. Octave简单介绍 Octave是GNU旗下取代matlab的数学工具软件,语法与matlab高度兼容.而 ...