在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. 【技术贴】解决Mysql启动服务报错1067 进程意外终止

    无法启动MYSQL服务错误1067 进程意外终止. 我使用2013-10-25_appserv-win32-2.6.0.exe安装的MySql,结果服务起不来. 于是细心机智的我发现,在F:\stud ...

  2. Web-Scale IT:对企业的影响

    本文翻译自文章Web-Scale IT: The Enterprise Impact. 作者Brendan Ziolo 在通信.网络和安全行业有着近20年的经验,在 Sipera Systems,Ce ...

  3. [转贴]gsoap使用心得!

    最近换了个工作环境,现在在大望路这边上班,呵,刚上班接到的任务就是熟悉gsoap!废话少说,现在开始gSoap学习! gSOAP是一个夸平台的,用于开发Web Service服务端和客户端的工具,在W ...

  4. Android软件开发之获取通讯录联系人信息

    Android手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通讯里联系人的信息就须要访问系统的数据库,才能将信息拿出来. 这一篇文章我主要带领同学们熟悉Android的通讯录机制. 图中选中 ...

  5. linux系统配置文件和用户配置文件及其作用

    我的博客:www.while0.com /etc/issue 未登陆时控制台显示的文字 /etc/issue.net 远程登陆时控制台显示的文字 /etc/motd 用户登陆时显示的文字 这里先提供两 ...

  6. SQL中Case When的使用方法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex ' THEN '男' ' THEN '女' ELSE '其他' END       --Case搜索 ...

  7. INFORMATION_SCHEMA.INNODB_LOCKS

    INNODB_LOCKS Table: INNODB_LOCKS 表 包含信息关于每个锁 一个InnoDB 事务已经请求 但是没有获得锁, 每个lock 一个事务持有是堵塞另外一个事务 centos6 ...

  8. 面向中国 Azure 开发者发布开源解决方案指南

     发布于 2014-05-23 作者 刘 天栋 Azure 是一个开放.灵活的云平台,可支持大量且不断增长的开源应用程序.框架和语言.微软及微软开放技术通过与全球及中国本地的开源社区不懈地合作,将 ...

  9. the private key for is not installed on this mac

    the private key for is not installed on this mac 如果提交 时出现这个问题, 有可能是 keychain重复了, 1:要去keychain中把旧的删除, ...

  10. android报错——The import android.util cannot be resolved

    Eclipse导入外部Android工程时,总会遇到The import android.util cannot be resolved 错误,解决方法如下: 首先检查project.properti ...