Application类

每次应用程序运行时,应用程序的Application类都保持实例化状态(都会持有该Application实例)。与Activity不同的是,配置改变并不会导致应用程序重启。在应用程序内部,通过扩展Application类,可以完成以下三项工作:

1. 对Android运行时(接收到)广播的应用程序级别事件(如低内存事件广播)作出相应;

2. 在应用程序组件之间传递对象(应用程序内部的多个Activity之间,或其他组件之间);

3. 管理和维护多个应用程序组件使用的资源;

当在Manifest中注册了Application实现以后,它会在创建应用个程序进程的时候得到实例化。Application的实现在本质上是单态的,并且应该作为单态进行实现,以便提供对其方法和成员变量的访问。

如何使用Application?如何自定义Applicaton类?

自定义的Application类需要使用单例模式被创建,并在Manifest文件中指定该自定义的类。

在Manifest文件中指定该自定义Application类:

    <application
android:name=".DemoApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboard"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

此时,应用程序在启动时,Application的实现将会被实例化。

在使用时,创建Application实例,部分代码如下:

public class DemoApplication extends Application {
private static final String TAG = DemoApplication.class.getSimpleName();
// DemoApplication使用单例模式使用
private static volatile DemoApplication singletonInstance;
public static DemoApplication getInstance() {
return singletonInstance;
}
@Override
public void onCreate() {
super.onCreate();
LogUtil.d(TAG, "onCreate running...");
singletonInstance = this;
}

创建新的状态变量和全局变量,以便从应用个程序组件中进行访问:

    /**
* <功能描述> 获取全局的状态变量
*
* @return void [返回类型说明]
*/
private void getGlobalStateValue() {
}
/**
* <功能描述> 设置全局的状态变量
*
* @return void [返回类型说明]
*/
private void setGlobalStateValue() {
}

以上方法用于维护应用程序状态或实现共享资源,但是一种松散耦合的设计。

Application类中的其他方法有什么作用?

Application类为应用程序的创建和终止、低可用内存和配置改变提供了事件处理程序。通过覆写方法实现,应用程序行为。

    @Override
public void onCreate() {
// 创建应用程序时调用,用于实例化应用程序单例,创建和实例化应用程序状态变量或共享资源
super.onCreate();
LogUtil.d(TAG, "onCreate running...");
singletonInstance = this;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// 配置改变时,应用程序不会被终止和重启,而是回调方法
super.onConfigurationChanged(newConfig);
LogUtil.d(TAG, "onConfigurationChanged running...");
}
@Override
public void onLowMemory() {
// 可用于清空缓存或者释放不必要的资源
super.onLowMemory();
}
@Override
public void onTrimMemory(int level) {
// API 13被引入,Android系统认为需要减少应用程序内存开销时调用
super.onTrimMemory(level);
}

应用程序在启动时,会默认启动一个Activity,但这个Activity必须符合一定的规范:

<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

该Activity被应用程序启动器使用,必须包含一个监听MAIN动作和LAUNCHER分类的intent-filter。

Android中的Application类在应用程序中的应用的更多相关文章

  1. WPF中的Application类。

    原文:WPF中的Application类. Application对象用的名称空间是system.windows 1.手动创建Application对象步骤. 1.1).把项目中的App.Xaml文件 ...

  2. Android(java)学习笔记120:Android中的Application类用法

    1.简介 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型:而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是 ...

  3. Android(java)学习笔记61:Android中的 Application类用法

    1. 简介 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型:而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就 ...

  4. Android之布局Application类

    转载:https://blog.csdn.net/pi9nc/article/details/11200969 一 Application源码描述 * Base class for maintaini ...

  5. 转-Android 之 使用File类在SD卡中读取数据文件

    如果需要在程序中使用sdcard进行数据的存储,那么需要在AndroidMainfset.xml文件中 进行权限的配置: Java代码:   <!-- 在sd中创建和删除文件的权限 --> ...

  6. 实体类在Windows程序中的高级应用--------------------》》心境是一种境界。

    一.事务 我们在大家学到这,或多或少对事务都有一些理解了.今天的我也对事务有了更深一层的理解对我来说,我想与大家一起分享一下. 解析: 1.ADO.NET提供了事务处理功能 2.C#中开启事务 3.在 ...

  7. 使用Java8中的Optional类来消除代码中的null检查

    简介 Optional类是Java 8新增的一个类,Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException). —— 每个 Java 程序员都非常了解的异常 ...

  8. 如何将OpenCV中的Mat类绑定为OpenGL中的纹理

    https://blog.csdn.net/TTTTzTTTT/article/details/53456324 如果要调用外接的USB摄像头获取图像通常使用OpenCV来调用,如何调用摄像头请参考本 ...

  9. Android输出日志Log类并保存到文件中

    android.util.Log常用的方法有以下5个: Log.v() Log.d() Log.i() Log.w() 以及 Log.e().根据首字母分别对应VERBOSE,DEBUG,INFO,W ...

随机推荐

  1. Python:正则表达式详解

    正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能 ...

  2. Go-常用库的介绍

    一.Go常用包介绍  fmt.它实现了格式化的输入输出操作,其中的fmt.Printf()和fmt.Println()是开 发者使用最为频繁的函数.  io.它实现了一系列非平台相关的IO相关接口 ...

  3. GoLang-Rpc编程

    Rpc定义: RPC(Remote Procedure Call,远程过程调用)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议. RPC协议构建于TCP或UDP, ...

  4. 横向滚动布局 white-space:nowrap

    float + 两层DOM实现 html <div class="container"> <div class="div1 clearfix" ...

  5. IDEA打印gc日志,设置JVM参数方法

    打印gc日志 1.对指定运行程序输出GC日志: 点击edit configurations... 在vm options处加入-XX:+PrintGCDetails 测试:代码调用system.gc后 ...

  6. tolua之wrap文件的原理与使用

    什么是wrap文件 每个wrap文件都是对一个c#类的包装,在lua中,通过对wrap类中的函数调用,间接的对c#实例进行操作. wrap类文件生成和使用的总体流程 生成一个wrap文件的流程 这部分 ...

  7. 6核 CPU导致SQL2005安装时出“无法启动服务”错

    周一新买的IBM3650M3的服务器上安装SQL server2005 安装到一半时,报"提示:SQL Server 服务无法启动."错. 换了几个操作系统版本和换了几个版本的sq ...

  8. Love Me,Love My Dog

    Love me, love my dog. 爱屋及乌. 出处<尚书大传•大战>:“爱人者,兼其屋上之乌.” 活学活用:love first love 初恋 unrequited [one- ...

  9. 可变有序列表list

    list是一种有序的集合,可以随时添加和删除其中的元素. 声明方法 list名=[元素1,元素2,元素3,--] >>> name=['Tom','David','Tony'] &g ...

  10. Android app中的so库和CPU架构

    一.android目前有几种cpu架构? 早期的Android系统几乎只支持ARMv5的CPU架构,目前支持七种CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MI ...