在android应用开发中,重写Application也算是比较常见的,以前开发的一些程序太过于简单,都不要重写这个类,但是在真正的商业开发中,重写Application类几乎是必做的。

为什么要重写Application?


1.处理全局变量,在整个应用程序范围内共享数据

2.管理Activity,当应用程序退出时,销毁所有的Activity

3.初始化应用程序的配置信息

4.当系统内存不足时应用能够做出合理的响应

…..


继承了Application之后,一定要在清单文件中声明,即指明Application节点的name属性即可:

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

重写的Application类:

/**
* 注意,在重写方法时必须调用超类的事件处理程序
* @author 王松
* @date 2015年7月30日
*/
public class MyApplication extends Application { private String globalVar;
private MyApplication instance;
private List<Activity> activities; /**
* 单例模式
* @return
*/
public MyApplication getInstance(){
if(instance == null)
return new MyApplication();
return instance;
} /**
* 添加activity
* @param a
*/
public void addActivity(Activity a){
activities.add(a);
} /**
* 遍历所有Activity并finish
*/
public void finishActivity() {
for (Activity activity : activities) {
if (activity != null && !activity.isFinishing()) {
activity.finish();
}
}
} public String getGlobalVar() {
return globalVar;
} public void setGlobalVar(String globalVar) {
this.globalVar = globalVar;
} /**
* 在创建应用程序时调用,可以重写这个方法来实例化应用程序单态,以及创建和实例化任何应用
* 程序状态变量或共享资源
*/
@Override
public void onCreate() {
super.onCreate();
activities = new LinkedList<Activity>();
} /**
* 作为onLowMemory的一个特定于应用程序的替代选择,在android4.0时引入,
* 在程序运行时决定当前应用程序应该尝试减少其内存开销时(通常在它进入后台时)调用
* 它包含一个level参数,用于提供请求的上下文
*/
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
} /**
* 与Activity不同,在配置改变时,应用程序对象不会被终止和重启。
* 如果应用程序使用的值依赖于特定的配置,则重写这个方法来重新加载这些值,或者在应用程序级别处理这些值的改变
*/
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
} /**
* 当系统处于资源匮乏时,具有良好行为的应用程序可以释放额外的内存。
* 这个方法一般只会在后台进程已经终止,但是前台应用程序仍然缺少内存时调用。
* 我们可以重写这个程序来清空缓存或者释放不必要的资源
*/
@Override
public void onLowMemory() {
super.onLowMemory();
} }

关键地方都已用注释说明。

那么怎么在Activity中使用这个类呢?

MyApplication mp = (MyApplication) getApplication();
mp.setGlobalVar("张三");

就是这么简单,不过大多情况下我们都会用Map来存储全局变量,这里为了简单,就直接使用了String。

本程序完整代码下载http://pan.baidu.com/s/1ntMiYkL

版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。

android开发之重写Application类的更多相关文章

  1. Android开发调试日志工具类[支持保存到SD卡]

    直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.i ...

  2. wemall app商城源码android开发MD5加密工具类

    wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发MD5加密工具类主要代码,供 ...

  3. Android开发-API指南-<application>

    <application> 英文原文:http://developer.android.com/guide/topics/manifest/application-element.html ...

  4. Android开发实现HttpClient工具类

    在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务.你可以把HttpClient想 ...

  5. Android开发技巧——PagerAdapter实现类的封装

    ViewPager是android的support库中的一个控件,也是一个在许多应用开发中都用得比较多的控件.目前为止,对ViewPager的使用,我一般是用ViewPager + Fragment的 ...

  6. android开发之网络棋牌类在线游戏开发心得(服务器端、Java) 好文章值得收藏

    标签: android服务器 2013-10-09 17:28 3618人阅读 评论(0) 收藏 举报 分类: android(11) 转自:http://blog.csdn.net/bromon/a ...

  7. Android开发_字符串处理类-TextUtils类

    对于字符串处理Android为我们提供了一个简单实用的TextUtils类,如果处理比较简单的内容不用去思考正则表达式不妨试试这个在android.text.TextUtils的类,主要的功能如下: ...

  8. android开发必备日志打印工具类

    今天给大家献上一款好用的日志打印工具.大家在平时的开发中用的最多的可能就是Log.i("",""),Log.e("","" ...

  9. android开发SD卡工具类(一)

    SD卡工具类整理: package com.gzcivil.utils; import java.io.File; import java.io.FileInputStream; import jav ...

随机推荐

  1. 实战 SSH 端口转发

    转自实战 SSH 端口转发 通过本文的介绍,读者可以从中了解到如何应用 SSH 端口转发机制来解决日常工作 / 生活中的一些问题.学会在非安全环境下使用端口转发来加密网络应用,保护个人隐私以及重要商业 ...

  2. phpStorm 快捷键收集以及配色方案

    仅收集我在开发过程中觉得对我个人很有帮助的 ctrl + e ;查看最近打开的工程文件 ctrl+shift+n比如要跳转到templates/default/index.html基本上输入te/de ...

  3. 李洪强iOS开发Swift篇---12_NSThread线程相关简单说明

    李洪强iOS开发Swift篇---12_NSThread线程相关简单说明 一 说明 1)关于多线程部分的理论知识和OC实现,在之前的博文中已经写明,所以这里不再说明. 2)该文仅仅简单讲解NSThre ...

  4. 使用IRP进行文件操作

    使用IRP进行文件操作 首先声明这个是菜鸟—我的学习日记,不是什么高深文章,高手们慎看. 一定要先感谢为技术的进步而付出辛勤汗水的人,感谢他们对技术的共享. 一个通用IRP访问文件的十六进制编辑器(开 ...

  5. Qt 子窗口内嵌到父窗口中(无边框附体show即可)good

    有时需要把一个子窗口内嵌进入父窗口当中. 我们可以这样做 1.新建一个QWidget 或者QDialog的子类 ClassA(父类为ClassB) 2.在新建类的构造函数中添加设置窗口属性 setWi ...

  6. Mono for Android 优势与劣势

    原文:Mono for Android 优势与劣势 最近有兴趣了解一下Mono for Andriod,也就是使用.NET平台来开发Andriod程序.Mono for Android API 几乎映 ...

  7. IPVS实现分析

    IPVS实现分析 IPVS实现分析 根据LVS官方网站的介绍,LVS支持三种负载均衡模式:NAT,tunnel和direct routing(DR). NAT是通用模式,所有交互数据必须通过均衡器:后 ...

  8. ES2015 (ES6)

    是时候使用ES 2015了 你可能不再需要Underscore BABEL Grunt 先 babel 再用 babel 后的文件 uglify 去掉严格模式.严格模式下全局的this转成了undef ...

  9. WinPcap编程入门实践

    转自:http://www.cnblogs.com/blacksword/archive/2012/03/19/2406098.html WinPcap可能对大多数人都很陌生,我在这里就先简单介绍一下 ...

  10. Flash3D引擎:Away3D 4.1 Alpha版介绍

    转自:http://www.cnblogs.com/njflash/archive/2013/01/31/2886912.html Away3D团队和基金会很高兴地宣布首次发布下一个主要的Away3D ...