Android中的Application类在应用程序中的应用
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类在应用程序中的应用的更多相关文章
- WPF中的Application类。
原文:WPF中的Application类. Application对象用的名称空间是system.windows 1.手动创建Application对象步骤. 1.1).把项目中的App.Xaml文件 ...
- Android(java)学习笔记120:Android中的Application类用法
1.简介 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型:而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是 ...
- Android(java)学习笔记61:Android中的 Application类用法
1. 简介 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型:而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就 ...
- Android之布局Application类
转载:https://blog.csdn.net/pi9nc/article/details/11200969 一 Application源码描述 * Base class for maintaini ...
- 转-Android 之 使用File类在SD卡中读取数据文件
如果需要在程序中使用sdcard进行数据的存储,那么需要在AndroidMainfset.xml文件中 进行权限的配置: Java代码: <!-- 在sd中创建和删除文件的权限 --> ...
- 实体类在Windows程序中的高级应用--------------------》》心境是一种境界。
一.事务 我们在大家学到这,或多或少对事务都有一些理解了.今天的我也对事务有了更深一层的理解对我来说,我想与大家一起分享一下. 解析: 1.ADO.NET提供了事务处理功能 2.C#中开启事务 3.在 ...
- 使用Java8中的Optional类来消除代码中的null检查
简介 Optional类是Java 8新增的一个类,Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException). —— 每个 Java 程序员都非常了解的异常 ...
- 如何将OpenCV中的Mat类绑定为OpenGL中的纹理
https://blog.csdn.net/TTTTzTTTT/article/details/53456324 如果要调用外接的USB摄像头获取图像通常使用OpenCV来调用,如何调用摄像头请参考本 ...
- Android输出日志Log类并保存到文件中
android.util.Log常用的方法有以下5个: Log.v() Log.d() Log.i() Log.w() 以及 Log.e().根据首字母分别对应VERBOSE,DEBUG,INFO,W ...
随机推荐
- Gym - 101350E Competitive Seagulls (博弈)
There are two seagulls playing a very peculiar game. First they line up N unit squares in a line, al ...
- Django_restframework+vue解决跨域问题
1. 安装 pip3 install django-cors-headers 2.在settings.py里设置 INSTALLED_APPS = ( ... 'corsheaders', ... ) ...
- LCA(Tarjan)
时间复杂度:dfs为O(N),dfs过程中处理所有查询对为O(M),总时间复杂度O(N+M) #include<iostream> #include<cstdio> using ...
- C# GetHashCode在x64与x86版本下不一样
最好指定一下目标平台
- 字符串常量池和String.intern()方法在jdk1.6、1.7、1.8中的变化
字符串常量池也是运行时常量池 jdk1.6中,它是在方法区中,属于“永久代” jdk1.7中,它被移除方法区,放在java堆中 jdk1.8中,取消了“永久代”,将常量池放在元空间,与堆独立了 pub ...
- mvc路由配置.html结尾的伪静态
mvc 标准的写法 通常是(http://localhost:8149/Home/Index) 路由配置如下: 有时候需求 如 http://localhost:8149/Home/Index 改为h ...
- JdbcTemplate中queryForObject方法返回空结果或不正确结果数量的解决方法
在使用Spirng提供的JdbcTemplate中名为queryForObject API进行数据库查询时有时会抛出如下异常: org.springframework.dao.EmptyResultD ...
- 008_ssl Certificate Pinning
证书锁定Certificate Pinning技术 在中间人攻击中,攻击主机通常截断客户端和服务器的加密通信.攻击机以自己的证书替代服务器发给客户端的证书.通常,客户端不会验证该证书,直接接受该证书, ...
- 【easy】27. Remove Element
删除等于n的数,并返回剩余元素个数 Given nums = [3,2,2,3], val = 3, Your function should return length = 2, with the ...
- Mac 环境部署Docker私有仓库
docker的私有仓库类似maven的私服,一般用于公司内部搭建一个类似docker hub的环境,这样上传.下载镜像速度较快,本文将演示如何在mac上利用docker-machine搭建无需SSL证 ...