当前位置: 首页 > 编程日记 > 正文

Android采用Application总结一下

什么是 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的。

/*** 全局application,为什么要用application。主要是由于这就像一个session。* 用于暂时保存各种传值,serverurl,假设用数据库或者其它的操作来保存这些* 数据的话管理起来就非常繁琐,并且也不利于程序的执行速度。* */
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并finishpublic void exit() {for (Activity activity : activityList) {activity.finish();}System.exit(0);}@SuppressLint("NewApi")@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.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);




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

转载于:https://www.cnblogs.com/blfshiye/p/4947044.html

相关文章:

nginx介绍及常用功能

什么是nginx nginx跟Apache一样&#xff0c;是一个web服务器&#xff08;网站服务器&#xff09;&#xff0c;通过HTTP协议提供各种网络服务。 Apache&#xff1a;重量级的&#xff0c;不支持高并发的服务器。在Apache上运行数以万计的并发访问&#xff0c;会导致服务器消耗大…

网页制作常见的问题(怎样兼容IE6/IE7/火狐浏览器)

1、IE6双边距问题&#xff1f; 在IE6的浏览器中明明设置的是10px的margin却为什么显示的是20px的margin其实这个Ie6的一个双边距BUG 例如: <style type"text/css"> body {margin:0} div { float:left; margin-left:10px; width:300px; height:300px; border:1p…

Ubuntu系统---安NVIDIA 驱动后 CUDA+cuDNN 安装

Ubuntu系统---安NVIDIA 驱动后 CUDAcuDNN 安装 --------------------------------------------20190726--------------------------------------------------------------------------------------------- 上接《Ubuntu系统---NVIDIA 驱动安装》。预配置环境&#xff1a;Ubunt…

Maya基础入门学习教程

Maya基础入门学习教程 视频&#xff1a;.MKV, 1280x720, 共57节课 时长 4小时25分钟&#xff0c;3GB 语言&#xff1a;英语中文字幕&#xff08;根据原英文字幕机译更准确&#xff09;原英文字幕 指导老师&#xff1a;Shane Whittington Shane Whittington 百度一下 云桥网…

java学习总结:3

逻辑运算 1.’!’(非) 2.与(多个条件一起满足) Java中&&和&都是表示与的逻辑运算符&#xff0c;都表示逻辑运输符and&#xff0c;当两边的表达式都为true的时候&#xff0c;整个运算结果才为true&#xff0c;否则为false。 ’&&的短路功能&#xff0c;当…

asp.net httpmodule 访问页面控件 备忘

用到的时候发现还得找代码&#xff0c;存一个例子方便自己和他人修改&#xff1a; using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls;…

Ubuntu下Sublime Text 3解决无法输入中文的方法

2019独角兽企业重金招聘Python工程师标准>>> 环境&#xff1a; Ubuntu14.04搜狗输入法 for LinuxSublime text 3提示&#xff1a;编译请在非root下进行 本经验目前在Ubuntu14.04环境下&#xff0c;已有搜狗输入法 for Linux和Sublime Text 3的情况下安装成功。 保存…

电子书下载:Building Websites with DotNetNuke 5

下载&#xff1a;http://www.ctdisk.com/file/9941471 转载于:https://www.cnblogs.com/MaxWoods/archive/2012/10/10/2719167.html

Java学习总结:4

面向对象 面向对象的程序设计具有封装性、继承性、多态性。 类的定义语法如下&#xff1a; class 类名称{数据类型 属性(变量);...public 返回值的数据类型 方法名称(参数1&#xff0c;参数2...){程序语句;[return 表达式;] } }定义类 class Book {String title;double pric…

在3ds Max中使用V-Ray 5渲染引擎视频教程

在3ds Max中使用V-Ray 5渲染引擎视频教程 MP4 | 视频&#xff1a;h264, 1280x720 | 音频&#xff1a;AAC, 44.1 KHz, 2通道。AAC, 44.1 KHz, 2 Ch. 技能水平。初学者&#xff5c;类型&#xff1a;电子学习&#xff5c;语言&#xff1a;英语中文字幕&#xff08;根据原英文字幕…

OC实用转换model的工具

OC实用转换model的工具 说明 这是本人写的一个专门用来将json数据直接转换生成Model文件的工具,目的是为了让你从写Model文件的繁琐过程中解脱出来,提升效率以及减少出错的几率,工具的特点如下: 1. 用组合设计模式处理树形数据结构(非线性数据结构) 2. 在调试台中处理生成Model…

后端怎么防止重复提交?(常用的做法)

后端怎么防止重复提交&#xff1f;&#xff08;常用的做法&#xff09; 客户端的抖动&#xff0c;快速操作&#xff0c;网络通信或者服务器响应慢&#xff0c;造成服务器重复处理。防止重复提交&#xff0c;除了从前端控制&#xff0c;后台也需要控制。因为前端的限制不能解决…

利用MAC OS X 自带的磁盘工具提取光盘镜像ISO文件

虽说渐渐地Mac笔记本基本告别内置光驱时代了&#xff0c;随着网络的普及&#xff0c;使用到光驱的机会也渐少&#xff0c;但有时又难免需要光驱&#xff0c;比如二货出版社的随书光盘等…我们可以通过USB外置光驱将光盘内容提取为ISO文件保存到电脑里&#xff0c;方便以后可以随…

Java学习总结:5

面向对象 对象数组 引用数据类型也可以定义数组 格式&#xff1a; 1.对象数组的动态初始化 类名称 对象数组名称 new 类名称 [长度];动态初始化默认情况下&#xff0c;数组的每一个元素都是其对应的默认值null。 class Book5{private String title;private double price;…

Maya初学者完整的3D动画大师班视频教程

Maya初学者完整的3D动画大师班视频教程 时间13小时30分 包括课程项目文件 1280X720 MP4 语言&#xff1a;英语中文字幕&#xff08;根据原英文字幕机译更准确&#xff09;原英文字幕 教程大小解压后&#xff1a;8.38G Maya初学者。完整的3D动画大师班 百度一下 云桥网络 平台…

jQuery-1.9.1源码分析系列(四) 缓存系统

先前在分析Sizzle的时候分析到Sizzle有自己的缓存机制&#xff0c;点击这里查看。不过Sizzle的缓存只是对内使用的&#xff08;内部自己存&#xff0c;自己取&#xff09;。接下来分析jQuery可以对外使用的缓存&#xff08;可存可取&#xff09;。 首先需要明白jQuery缓存需要解…

CBA 赛程的笔记 - 北京首钢

2014-11-01 19:35北京首钢103:89广东宏远结束技术统计 发挥不错&#xff0c;打的比较好&#xff01;2014-11-05 19:35八一双鹿89:100北京首钢结束技术统计 第一节国内球员打的太屎&#xff0c;最后一节国内球员发挥不错&#xff01;2014-11-07 19:35浙江稠州107:116北京首钢结束…

个人技术生涯的感悟(2)

很多时候&#xff0c;一门门槛很低的编程语言对于初学者的帮助是非常大的&#xff0c;从而决定这个人的技术路线的选择。 在经历过大一下学期对C&#xff0c;和C的迷茫之后&#xff0c;在大二上学期&#xff0c;学校在搞一个网页设计比赛&#xff0c;正好和两个朋友一起参赛。开…

HtmlAgilityPack 处理通配的contains

//选择不包含class属性的节点 var result node.SelectNodes(".//span[not(class)]"); //选择不包含class和id属性的节点 var result node.SelectNodes(".//span[not(class) and not(id)]"); //选择不包含class"expire"的span var result node…

游戏风格化角色创建入门指南视频教程

游戏风格化角色创建入门指南视频教程 时间 33小时 包括项目文件 1920X1080 MP4 语言&#xff1a;英语中文字幕&#xff08;根据原英文字幕机译更准确&#xff09;原英文字幕 游戏中的风格化角色创建入门指南 百度一下 云桥网络 平台huo取 教程&#xff01; 信息。 教程33小…

Java学习总结:6

String类(接上篇) 字符串的拆分 public class Test1_1_2_1 {public static void main(String args[]){String str "hello world";String result[] str.split(" "); //以空格作为间隔for(int x0;x<result.length;x){System.out.print(result[x]"…

java面试常见问题之Hibernate总结

1 Hibernate的检索方式 导航对象图检索&#xff08;根据已经加载的对象&#xff0c;导航到其他对象。&#xff09; OID检索&#xff08;按照对象的OID来检索对象。&#xff09; HQL检索&#xff08;使用面向对象的HQL查询语言。&#xff09; QBC检索&#xff08;使…

HDU 4267 线段树 离散点区间更新, 自叶子节点至根单点查询

题意&#xff1a; n个数字 下面n个数字表示数列 2个操作 1 [u, v] k add [u,v ]区间 &#xff08;u点要计算&#xff09;每隔k个位置&#xff0c;该数字add 2 pos 询问 pos下标的值&#xff08;下标从1开始&#xff09; 思路&#xff1a; 因为k很小&#xff0c; 可以直接存 k…

Java学习总结:7

static关键字 一个类的主要组成就是属性和方法(分为构造方法和普通方法两种)&#xff0c;而每一个对象都分别拥有各自的属性内容(不同对象的属性保存在不同的堆内存中)&#xff0c;如果类中的某个属性希望定义为公共属性(即所有对象都可以使用的属性)&#xff0c;则可以在声明…

mybatis 使用resultMap实现数据库的操作

resultType:直接表示返回类型 resultMap&#xff1a;对外部resultMap的引用 二者不能同时使用 创建一个实体类Role和User public class Role {private Integer id;private String roleCode;private String roleName;//省略set、get方法 创建User类&#xff08;在User中有roleId…

【3DMax教程】三维产品可视化视频教程 3d Products Visualization Course

【3DMax教程】三维产品可视化视频教程 3d Products Visualization Course 三维产品可视化课程 教程大小&#xff1a;5.38G 1280X720 含课程素材文件 你会学到什么 项目简介及其必须包含的内容 蓝图以及如何获得和使用 逐步建模流程 如何制作UV和纹理 用UV投射材料 生成…

Spring MVC 和WebFlux 区别

本节主要对比了WebMvc 和 WebFlux两个Web框架,Spring已经为我们开发做了很大努力了,所以在合适的场景下这种异步框架还是非常可行的。但是还要考虑后期其它异步框架是否能够完善,全链路异步才能发挥异步最大的优势。

Cygwin鸡毛蒜皮

2019独角兽企业重金招聘Python工程师标准>>> Windows命令乱码: cygwin控制台mintty的编码缺省是UTF-8, 右键调整mintty选项[text] 改编码为GBK UNIX路径和Windows路径互转: 使用cygpath工具. 如: #cd cygpath C:\\Windows 安装包管理器apt-cyg: 安装: # svn --fo…

Using unique option prefix myisam-recover instead of myisam-recover-option

[转载]关于mysql error.log报"Using unique option prefix myisam-recover instead of myisam-recover-options ..."转载&#xff1a;http://blog.csdn.net/cloud_xy/article/details/21756601启动时日志中有这个警告的&#xff1a;[Warning] Using unique option pr…

Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020

Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020 流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:aac&#xff0c;48000 Hz 语言:英语 中文字幕&#xff08;机译&#xff09;原英文字幕 |大小:33.0 GB | 145节课程| (36h 18m) 你会学到什么 云…