原文地址: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. hdu 5969 最大的位或

    最大的位或 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  2. java.time.ZonedDateTime

    Java的日期与时间 ZonedDateTime类是Java 8中日期时间功能里,用于表示带时区的日期与时间信息的类.可以用于表示一个真实事件的开始时间,如某火箭升空时间等等. ZonedDateTi ...

  3. 在函数中如何获取 线程对象、线程唯一ID

    threading.current_thread() threading.current_thread().ident

  4. 我的Android进阶之旅------>Android二级ListView列表的实现

    实现如下图所示的二级列表效果 首先是在布局文件中,布局两个ListView,代码如下: <LinearLayout xmlns:android="http://schemas.andr ...

  5. 【windows】远程桌面报错:由于CredSSP加密Oracle修正

    对于windows家庭版用户,无法打开gepdit.msc需要手动修改注册表 创建红色部分目录 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curre ...

  6. 关于随机浏览头伪装fake-UserAgent

    使用: from fake_useragent import UserAgent ua = UserAgent() #ie浏览器的user agent print(ua.ie) Mozilla/5.0 ...

  7. HackerRank - flipping-the-matrix 【数学】

    题意 一个矩阵中 每一行 每一列 都可以倒置 在不断进行倒置后 求 左上的那个 N * N 矩阵 的和 最大为多少 思路 M = 2 * N 通过 倒置特性 我们可以发现,最左上的那个矩阵 第 [I] ...

  8. Data Structure Trie: suffix problem

    http://www.geeksforgeeks.org/suffix-array-set-1-introduction/ http://www.geeksforgeeks.org/pattern-s ...

  9. Data Structure Binary Tree: Print ancestors of a given binary tree node without recursion

    http://www.geeksforgeeks.org/print-ancestors-of-a-given-binary-tree-node-without-recursion/ #include ...

  10. hbase shell-general(常规指令)

    hbase shell常规指令解释篇 1. status (显示集群状态,master,server情况,显示内容的详略程度可选) hbase(main)::> help 'status' Sh ...