继承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对象, ...
随机推荐
- EasyNVR无插件摄像机直播之:摄像机网页低延时无插件直播实现
背景需求 对于摄像机直播,客户反馈的最多就是实现web直播.摆脱插件,可以自定义集成等问题, 对于熟悉EasyNVR已经完美的解决了这些问题.然而对于web播放也存在一些问题,通常我们web播放RTM ...
- ASP.NET MVC + ADO.NET EF 项目实战(一):应用程序布局设计
什么叫上下文? 在你设计一个方法的时候,无法直接从方法参数或实例成员(字段或属性)获得的所有信息都是上下文.例如: 当前用户是谁? 刚才提供操作的数据库连接实例从哪里拿到? 这个方法从哪个 View ...
- java拾遗1----XML解析(一) DOM解析
XML解析技术主要有三种: (1)DOM(Document Object Model)文档对象模型:是 W3C 组织推荐的解析XML 的一种方式,即官方的XML解析技术. (2)SAX(Simple ...
- php字符串操作: 去掉UTF-16的空格
$s = json_encode($s); $s = str_replace('\u00a0','',$s); $s = str_replace('\u3000','',$s); $s = str_r ...
- web audio living
总结网页音频直播的方案和遇到的问题. 代码:(github,待整理) 结果: 使用opus音频编码,web audio api 播放,可以达到100ms以内延时,高质量,低流量的音频直播. 背景: V ...
- QT5的QDesktopSerivices不同
QT4使用QDesktopServices::storageLocation(QDesktopServices::xxxx)来获取一些系统目录, 现在则要改成QStandardPaths::writa ...
- ARM NEON 64bit 查找表替换
没啥效果,如果表的长度在 64个uint8_t之类,应该可以提高查表速度,否则还是C来的快 #ifdef HAVE_NEON_AARCH64 void table_lookup_AArch64_neo ...
- NCL 小图对其问题
从昨天下午开始的折腾终于告一段落,虽然解决得不甚完善,只是图可以用了…… 问题起自想把之前手动拼成的一页四张的图用脚本自动生成,这样一方面应该对得更齐一点,另一方面大大节省人工. 这本来应该是件很容易 ...
- Render树、RenderObject与RenderLayer
Chapter: 呈现树的构建 1. 呈现树与CSS盒子模型千丝万缕的关系 2. 呈现树与DOM树的关系 3. 浏览器构建呈现树的流程 4. Firefox的规则树和样式上下文树 5. 规则树是如何解 ...
- 高通8X16电池BMS算法(二)【转】
本文转载自:http://www.voidcn.com/blog/yanleizhouqing/article/p-6051912.html 上一篇主要讲电池相关的一些知识,上节忘记讲了,电池一般分为 ...