原文地址:http://www.cnblogs.com/Dentist/p/Mr_Dentist_.html

每个程序运行时会创建一个Application类的对象且仅有一个。在app结束时这个Application才会消失。所以可以利用Application来进行一些数据的处理和储存。在多个activity或fragment之间交换数据比如一个app的设置,主题,用户信息等等。用它来实现全局变量比static更便于数据的集中管理。

例如:

public class MyApp extends Application {
private Person person;
private String corpsname;
private List<Person> corpsmember; public void setPerson(Person person){
this.person=person;
}
public Person getPerson(){
return person;
}
public void setCorps(String corps){
this.corpsname=corps;
}
public String getCorps(){
return corpsname;
}
public List<Person> getcorpsmember(){
return corpsmember;
}
public void setcorpsmember(List<Person> corpsmember){
this.corpsmember=corpsmember;
}
}

自建一个类继承Application类。然后在AndroidManifest.xml文件中修改android:name属性为 所在包名+类名

    <application
android:name="com.example.MyApp.MyApp"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >

然后就可以在各个地方与MyApp交换数据了

        MyApp mapp=(MyApp)getApplication();
String corps=mapp.getCorps();

平时的使用一般在一个Activity一开始就获取Application。供整个Activity使用。很方便。

    public MyApp mapp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.person);
mapp=(MyApp)getApplication(); }

在其他类里,比如adapter里要获取Application就要用下面的

MyApp myapp=(MyApp)context.getApplicationContext();

但注意最好不要将持有对Activity引用的对象传进来。这样这个activity结束后也不会被GC回收,造成内存泄漏。

对于Application类的用途很广。下面的例子就展示了当activity较多时,对activity管理的方便。

public class MreApplication extends Application {
public static final String TAG="Mre"; /**保存每个activity的状态的存储信息,用于activity新建或返回时自动还原为上次访问时的状态,KEY为各个activity类名**/
private HashMap<String, HashMap<String, Object>> activityState; /**记录activity的栈,保存的是activity类名**/
private Stack<String> activityStack; public HashMap<String, HashMap<String, Object>> getActivityState() {
return activityState;
} public void setActivityState(HashMap<String, HashMap<String, Object>> activityState) {
this.activityState = activityState;
} public Stack<String> getActivityStack() {
return activityStack;
} public void setActivityStack(Stack<String> activityStack) {
this.activityStack = activityStack;
} /**
* 删除栈中最后一个activity
*/
public void popActivity() {
String activity = activityStack.lastElement();
if (activity != null) {
activityStack.remove(activity);
activity = null;
}
} /**
* 删除栈中指定activity
*/
public void popActivity(String activity) {
if (activity != null) {
activityStack.remove(activity);
activity = null;
}
} /**
* 取当前activity
*/
public String currentActivity() {
if (activityStack == null) {
return null;
}
String activity = activityStack.lastElement();
return activity;
} /**
* 加入activity
*/
public void pushActivity(String activity) {
if (activityStack == null) {
activityStack = new Stack<String>();
}
activityStack.add(activity);
}
}

继承Application以实现全局资源共享的更多相关文章

  1. 继承Application实现Android数据共享

         Application类 在Android中,启动一个应用,首先会初始化Application,然后再通过它检查AndroidManifest.xml清单文件,选择须要首先启动的Activi ...

  2. 继承Application管理生命周期

    继承Application实现Android数据共享 http://www.jianshu.com/p/75a5c24174b2 jessyan提出一个思路,用Application + 接口来管理扩 ...

  3. Android Application 类共享全局数据

    android系统会为每一个程序执行时创建一个Application类的对象且仅创建一个.所以Application能够说是单例模式的一个类.且application对象的生命周期是整个程序中最长的, ...

  4. javafx 继承Application打开

    前段时间需要用到javafx的Application来写一些图形界面之类的东西,但是run了之后eclipese不会去运行它,很纳闷,然后看了一下run as发现是没有main入口 其实加上一个mai ...

  5. 保存全局Crash报告

    CrashHandler.java UncaughtException处理类,当程序发生Uncaught异常的时候,有该类来接管程序,并记录发送错误报告 package  com.amanda;imp ...

  6. Android中Application全局方法(变量)的调用

    Application和Actovotu,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息.通常我们是 ...

  7. 全局对象Application的使用,以及如何在任何地方得到Application全局对象

    Application和Activity,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个application对象,用来存储系统的一些信息.通常我们是不 ...

  8. Android——application全局类的使用

    目录 1.概述 2.Application基类 3.自定义Application类 4.Application的生命周期 5.Application对象的回调函数 6.Application对象的作用 ...

  9. Android笔记——Application的作用

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

随机推荐

  1. java web Listener的简单使用案例

    1.web.xml的配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi= ...

  2. 九度OJ 1198:a+b (大数运算)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6745 解决:2320 题目描述: 实现一个加法器,使其能够输出a+b的值. 输入: 输入包括两个数a和b,其中a和b的位数不超过1000位 ...

  3. PAT 1058. 选择题(20)

    批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多. 输入格式: 输入在第一行给出两个正整数N(<=1000)和M(<=100),分别是学生人数和多 ...

  4. Linux中源码包安装

    1.准备环境 a.因为是编译安装,所以需要安装gcc编译器 b.下载源码包 2.注意事项 a.源代码保存位置 /usr/local/src/ b.软件安装位置 /usr/local/ c.如何确定安装 ...

  5. Linux踢出已登录用户

    1.使用w命令可以查看当前登录系统的所有用户 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - 08:05 4:29 0.09s 0.09s - ...

  6. Android底部菜单栏+顶部菜单

    底部菜单栏+顶部菜单(wechat)demo http://blog.csdn.net/evankaka/article/details/44121457 底部菜单demo http://blog.c ...

  7. ADT和Android SDK的安装

    本文主要涉及Android开发环境搭建时的Eclipse.ADT及Android SDK的安装方法,还有遇到的两个问题及其解决办法.其中,ADT的安装介绍了在线和离线安装两种方式.  1.安装ecli ...

  8. sql语句 字段的赋值

    将同一个表中的一个字段2的所有值赋值给另一个字段1 UPDATE 表名 SET 字段1 = 字段2 也可以把字段所有的值赋为null UPDATE 表名 SET 字段1 = null

  9. height()、innerHeight()、outerHeight()函数的区别详解

    具体参考博客:http://www.365mini.com/page/jquery-height-vs-innerheight-vs-outerheight.htm

  10. java 类中定义接口的调用方法

    public class Human { public interface MyAction { public void getPower(); } } public class Test{ publ ...