继承Application以实现全局资源共享
原文地址: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以实现全局资源共享的更多相关文章
- 继承Application实现Android数据共享
Application类 在Android中,启动一个应用,首先会初始化Application,然后再通过它检查AndroidManifest.xml清单文件,选择须要首先启动的Activi ...
- 继承Application管理生命周期
继承Application实现Android数据共享 http://www.jianshu.com/p/75a5c24174b2 jessyan提出一个思路,用Application + 接口来管理扩 ...
- Android Application 类共享全局数据
android系统会为每一个程序执行时创建一个Application类的对象且仅创建一个.所以Application能够说是单例模式的一个类.且application对象的生命周期是整个程序中最长的, ...
- javafx 继承Application打开
前段时间需要用到javafx的Application来写一些图形界面之类的东西,但是run了之后eclipese不会去运行它,很纳闷,然后看了一下run as发现是没有main入口 其实加上一个mai ...
- 保存全局Crash报告
CrashHandler.java UncaughtException处理类,当程序发生Uncaught异常的时候,有该类来接管程序,并记录发送错误报告 package com.amanda;imp ...
- Android中Application全局方法(变量)的调用
Application和Actovotu,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息.通常我们是 ...
- 全局对象Application的使用,以及如何在任何地方得到Application全局对象
Application和Activity,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个application对象,用来存储系统的一些信息.通常我们是不 ...
- Android——application全局类的使用
目录 1.概述 2.Application基类 3.自定义Application类 4.Application的生命周期 5.Application对象的回调函数 6.Application对象的作用 ...
- Android笔记——Application的作用
一.Application是什么 Application和Actovotu,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象, ...
随机推荐
- MySQL 数据库事物隔离级别的设置
select @@tx_isolation; //查看隔离级别 set session transaction isolation level read uncommitted; //设置读未提交级别 ...
- Delphi编译指令说明
Delphi快速高效的编译器主要来自Object PASCAL的严谨,使用Delphi随时都在与编译器交流,大部分情况下不需要干涉编译器的运行,但是有时也需要对编译器进行必要的设置. ******** ...
- Flask 进阶session和上下文管理解析
session的源码流程 将session放置在redis中 安装 pip install flask-session 使用 import redis from flask import Flask, ...
- JDBC详解1
JDBC详解1 JDBC整体思维导图 JDBC入门 导jar包:驱动! 加载驱动类:Class.forName("类名"); 给出url.username.password,其中u ...
- sqlalchemy——基本操作
以下所有代码片段都使用了统一的引用,该引用如下: from sqlalchemy import create_engine, ForeignKey from sqlalchemy.ext.declar ...
- Navicat试用期破解方法(转)
转载网址https://blog.csdn.net/Jason_Julie/article/details/82864187 1.按步骤安装Navicat Premium,如果没有可以去官网下载:ht ...
- JSON for java
一.JSON介绍 JSON(JavaScript Object Notation),类似于XML,是一种数据交换格式,比如Java产生了一个数据想要给JavaScript,则除了利用XML外,还可以利 ...
- ubuntu配置jdk环境
简单记录如下: 1. 下载JDK并解压后,复制到想要放置的目录,本文以“/usr/lib/jdk”为例: 2. 编辑配置文件,可以是“/etc/profile”或者“~/.bashrc”. 输入命令“ ...
- 【转】RMQ-ST算法详解
地址:http://blog.csdn.net/z287438743z/article/details/8132806 RMQ(Range Minimum/Maximum Query)问题就是求区间最 ...
- jsp操作xml
<?xml version="1.0" encoding="UTF-8"?> <!-- 说明是xml文件,文件的版本和字符编码 --> ...