原文地址: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. visual studio2017 无法添加引用 未能加载包ReferenceManagerPackage not such interface support 解决方法

    安装完visual studio 2017 后添加引用总是提示 未能加载包ReferenceManagerPackage, 这个问题困扰了两天,直到在网上看到了下面这一段 I just got thi ...

  2. 【python】-- Socket

    socket socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递. 我们知道网络 通信 都 是基于 ip+port 方能定位到目标的具体机器上的具体 ...

  3. JSP 分页代码

    jsp 分页模板 后台分页代码: 说明: 在 com.zc.domain 包下: PageBean.java 文件 package cn.itcast.customer.domain;   impor ...

  4. linux c编程:进程控制(一)

    一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同 ...

  5. hdu 3718 Different Division

    Different Division Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  6. activiti基础--2----------------------(流程定义)

    Deployment 部署对象 1.一次部署的多个文件信息,对于不需要的流程可以删除和修改 2.对应的表 act_re_deployment #部署对象表 act_re_procdef #流程定义表 ...

  7. Windows下重置MySQL密码(最开始是因为Access denied for user 'root'@'localhost'这个原因,无法登陆 'root'@'localhost')

    本人使用的MySQL5.5,其他版本未测试过. 方法一: 更改密码: mysql -u root -p Enter password:*** mysql>use mysql; 选择数据库 Dat ...

  8. PAT 天梯赛 L2-005. 集合相似度 【SET】

    题目链接 https://www.patest.cn/contests/gplt/L2-005 思路 因为集合中的元素 是不重复的 所以用SET 来保存 集合 然后最后 查找一下 两个集合中共有元素 ...

  9. [GUI] QT事件与X11的关系

    做了一段时间linux下与QT事件相关的工作,经常会遇到X11,总是苦于无法完全理解其与linux以及QT事件之间的关系,所以用两篇文章来简单总结下linux中的图形管理和QT事件与X11的关系. & ...

  10. web框架详解之 tornado 四 模板引擎、session、验证码、xss

    一.模板引擎 基本使用 继承,extends 页面整体布局用继承 导入,include 如果是小组件等重复的那么就用导入 下面是目录 首先在controllers里面创建一个文件,文件里面是页面类 # ...