博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android采用Application总结一下
阅读量:4639 次
发布时间:2019-06-09

本文共 4523 字,大约阅读时间需要 15 分钟。

什么是 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
activityList = new LinkedList
(); 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);

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

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

你可能感兴趣的文章
手机隐藏功能及禁忌
查看>>
JVM垃圾回收总结
查看>>
开发Nginx模块Helloworld
查看>>
【BZOJ】4542: [Hnoi2016]大数
查看>>
通过注入DLL后使用热补丁钩取API
查看>>
欧拉筛(线性筛)
查看>>
C 语言指针怎么理解
查看>>
Go基础1
查看>>
删除数据库所有表数据
查看>>
kali下搭建WiFi钓鱼热点
查看>>
【Java】 剑指offer(32) 从上往下打印二叉树
查看>>
二十三、连接mysql数据库,创建用户模型
查看>>
leetcode--844:(队列类)比较含退格的字符串
查看>>
判断字符串是否全为空格和去掉字符串中的空格
查看>>
OO第一阶段纪实
查看>>
实验二
查看>>
ASP.NET Web API 2系列(一):初识Web API及手动搭建基本框架
查看>>
抄袭的用Jsp+JavaBean+Mysql实现的登录和注册
查看>>
jquery显示隐藏操作
查看>>
还是畅通工程(hdu1233)并查集应用
查看>>