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

为什么要重写Application?


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

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

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

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

…..


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

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

重写的Application类:

  1. /**
  2. * 注意,在重写方法时必须调用超类的事件处理程序
  3. * @author 王松
  4. * @date 2015年7月30日
  5. */
  6. public class MyApplication extends Application {
  7. private String globalVar;
  8. private MyApplication instance;
  9. private List<Activity> activities;
  10. /**
  11. * 单例模式
  12. * @return
  13. */
  14. public MyApplication getInstance(){
  15. if(instance == null)
  16. return new MyApplication();
  17. return instance;
  18. }
  19. /**
  20. * 添加activity
  21. * @param a
  22. */
  23. public void addActivity(Activity a){
  24. activities.add(a);
  25. }
  26. /**
  27. * 遍历所有Activity并finish
  28. */
  29. public void finishActivity() {
  30. for (Activity activity : activities) {
  31. if (activity != null && !activity.isFinishing()) {
  32. activity.finish();
  33. }
  34. }
  35. }
  36. public String getGlobalVar() {
  37. return globalVar;
  38. }
  39. public void setGlobalVar(String globalVar) {
  40. this.globalVar = globalVar;
  41. }
  42. /**
  43. * 在创建应用程序时调用,可以重写这个方法来实例化应用程序单态,以及创建和实例化任何应用
  44. * 程序状态变量或共享资源
  45. */
  46. @Override
  47. public void onCreate() {
  48. super.onCreate();
  49. activities = new LinkedList<Activity>();
  50. }
  51. /**
  52. * 作为onLowMemory的一个特定于应用程序的替代选择,在android4.0时引入,
  53. * 在程序运行时决定当前应用程序应该尝试减少其内存开销时(通常在它进入后台时)调用
  54. * 它包含一个level参数,用于提供请求的上下文
  55. */
  56. @Override
  57. public void onTrimMemory(int level) {
  58. super.onTrimMemory(level);
  59. }
  60. /**
  61. * 与Activity不同,在配置改变时,应用程序对象不会被终止和重启。
  62. * 如果应用程序使用的值依赖于特定的配置,则重写这个方法来重新加载这些值,或者在应用程序级别处理这些值的改变
  63. */
  64. @Override
  65. public void onConfigurationChanged(Configuration newConfig) {
  66. super.onConfigurationChanged(newConfig);
  67. }
  68. /**
  69. * 当系统处于资源匮乏时,具有良好行为的应用程序可以释放额外的内存。
  70. * 这个方法一般只会在后台进程已经终止,但是前台应用程序仍然缺少内存时调用。
  71. * 我们可以重写这个程序来清空缓存或者释放不必要的资源
  72. */
  73. @Override
  74. public void onLowMemory() {
  75. super.onLowMemory();
  76. }
  77. }

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

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

  1. MyApplication mp = (MyApplication) getApplication();
  2. 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. HTML input标签的checked属性与Razor解析

    在HTML中,input标签可以通过type属性设置为checkbox.同时,也就包含了一个checked属性.对于这个checked属性,有一个特别的地方就是,它可以不需要属性值就可以表示是否选择了 ...

  2. SlidingMenu+ViewPager实现侧滑菜单效果

    先简单介绍下SlidingMenu和ViewPager. ViewPager就是一个官方提供的多页面滑动组件,需要一个适配器来构建多个页面. 先来看看ViewPager对应的基本适配器PageAdap ...

  3. 转:二十七、Java图形化界面设计——容器(JFrame)

    转:http://blog.csdn.net/liujun13579/article/details/7756729 二十七.Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的, ...

  4. BI名词解释

    BI名词解释     浏览数Page Views: 网页(含文件及动态网页)被访客浏览的次数.Page View的计算范围包括了所有格式的网页,例如:.htm..html..asp..cfm. asa ...

  5. c#4.0新特性之协变与逆变

    1.C#3.0以前的协变与逆变 如果你是第一次听说这个两个词,别担心,他们其实很常见.C#4.0中的协变与逆变[1](Covariance and contravariance)有了进一步的完善,主要 ...

  6. XSS跨站脚本攻击在Java开发中防范的方法

    1. 防堵跨站漏洞,阻止攻击者利用在被攻击网站上发布跨站攻击语句不可以信任用户提交的任何内容,首先代码里对用户输入的地方和变量都需要仔细检查长度和对”<”,”>”,”;”,”’”等字符做过 ...

  7. ActionBar 中setDisplayHomeAsUpEnabled和setHomeButtonEnabled和setDisplayShowHomeEnabled方法的理解

    setHomeButtonEnabled这个小于4.0版本的默认值为true的.但是在4.0及其以上是false,该方法的作用:决定左上角的图标是否可以点击.没有向左的小图标. true 图标可以点击 ...

  8. (转载)AS3.0实例学习 熟悉新的事件机制和addChild的运用

    (转载)http://www.jb51.net/article/13139.htm 首先声明:本人大菜鸟一个,刚接触AS3不久,许多理念还没来得及灌输,这些case都是从网上down的,但因为解说是英 ...

  9. Ext.MessageBox的用法

    1.Ext.MessageBox.alert()方法 有四个参数:alert( title , msg , function(){} ,this) 其中title,msg为必选参数,function为 ...

  10. HDOJ/HDU 1088 Write a simple HTML Browser(HTML字符串)

    Problem Description If you ever tried to read a html document on a Macintosh, you know how hard it i ...