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之路day01--变量

    一.变量 变量就是将一些运算的中间结果暂存到内存中,以便后续代码块调用. 规范: 1.必须由数字.字母.下划线任意组合,且不能数字开头. 2.不能是python中的关键字.如:‘print’ 'and ...

  2. 首次使用Oracle SQL Developer 提示: enter the full pathname for java.exe

    https://www.cnblogs.com/520future/p/7699095.html 首次使用Oracle SQL Developer 提示: enter the full pathnam ...

  3. Linux 下 boost 库的安装,配置个人环境变量

    部分引自: https://blog.csdn.net/this_capslock/article/details/47170313 1. 下载boost安装包并解压缩到http://www.boos ...

  4. 分布式监控系统开发【day37】:填充表配置项目(三)

    一.注册站点初始化数据库 1.目录结构 2.初始化数据库 python3 manage.py makemigrations python3 manage.py migrate #django2.0之前 ...

  5. ZooKeeper-API CURD

    ZooKeeper Java API pom.xml 依赖 <?xml version="1.0" encoding="UTF-8"?> <p ...

  6. django - 总结 - ModelForm

    gender = forms.ChoiceField(choices=((1, '男'), (2, '女'), (3, '其他'))) # 与sql没关系 publish = forms.Choice ...

  7. HTML(三)HTML属性

    HTML 属性 属性: [class] 规定元素的一个或多个类 注意: 类不能以数字开头 class = "classA classB" // 多个类的写法 [id] 规定元素的唯 ...

  8. 四十三、Linux 线程——线程同步之线程信号量

    43.1 信号量 43.1.1 信号量介绍 信号量从本质上是一个非负整数计数器,是共享资源的数目,通常被用来控制对共享资源的访问 信号量可以实现线程的同步和互斥 通过 sem_post() 和 sem ...

  9. [译]Ocelot - Configuration

    原文 这里有一个配置的样例.配置主要有两个部分.一个是ReRoutes数组,另一个是GlobalConfiguration.ReRoute告诉Ocelot怎么处理上游的请求.Global config ...

  10. Django的邮件发送以及云服务器上遇到的问题

    邮件发送 首先我们的邮箱要开通smtp服务,然后就可以在settings中配置了 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBacken ...