Android学习笔记(三)Application类简介
每次运行APP时,Application类都保持实例化状态。与Activity不同,配置改变不会导致应用程序重启。通过继承Application类,可以完成一下3项工作:
· 对Android运行时广播的应用程序级事件做出相应。
· 在应用程序组件之间传递对象。
· 管理和维护多个应用程序组件使用的资源。
其中,后两项工作通过使用一个单态类能够更好地完成。Application的实现在本质上是单态的,并应作为单态实现,以便提供对其方法和成员变量的访问。
一、扩展和使用Application类
如下程序是扩展了Application类的框架代码,并把它实现为一个单态。
public class MyApplication extends Application {
private static MyApplication singleton; public static MyApplication getInstance(){
return singleton;
} @Override
public final void onCreate() {
super.onCreate();
singleton = this;
}
}
需要注意的是,在创建新的Application类后,需要在Manifest的application节点中注册它,如下所示:
<application
android:allowBackup="true"
android:name=".MyApplication"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
16 </application>
当应用程序开始运行时,Application实现将会得到实例化。创建新的状态变量和全局资源,在程序中我们可以通过以下方式使用它:
MyApplication myApp = MyApplication.getInstance();//获取Application类实例化对象
2 myApp.setTest("测试数据");//更改状态变量
3 String test = myApp.getTest();//获取状态变量
我们知道,在Activity传递变量的方式有很多种,(如:Intent传参),但就像有些常用的状态变量(如:用户的userId),如果每次得通过Intent方式传来传去的话,很容易导致逻辑混乱,那么这时候我们就可以将这个常用的公共变量保存到Application类中,无论哪一个Activity需要用到它时,直接从Application类中获取即可,非常方便。下面以一个简单的例子来说明一下通过Application类达到共享变量的效果:
示例说明:创建两个Activity,用其中的一个Activity改变Application中的变量,然后在另一个Activity中验证此变量的改变。(例子很简单,能说明问题即可)先看一下效果图:
1、首先创建MyApplication去继承Application类
public class MyApplication extends Application {
private static MyApplication singleton;
private String test;
public static MyApplication getInstance(){
return singleton;
}
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
@Override
public final void onCreate() {
super.onCreate();
singleton = this;
}
}
以上代码,在MyApplication类中,包含了一个MyApplication的实例变量和一个测试变量。
2、在MainActivity中获取MyApplication的实例化对象,并且改变MyApplication中test变量的值。
public class MainActivity extends Activity {
private MyApplication myApp;
EditText etTest;
Button bnGo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myApp = MyApplication.getInstance();//获取Application类实例化对象
etTest = (EditText)findViewById(R.id.et_test);//绑定控件
bnGo = (Button)findViewById(R.id.bn_go);//绑定控件
bnGo.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
myApp.setTest(etTest.getText().toString());//改变MyApplication中test变量的值
Intent intent = new Intent(MainActivity.this, TestActivity.class);
startActivity(intent);
}
});
}
}
3、在TestActivity取出MyApplication中的test值并显示在TextView上。
public class TestActivity extends Activity {
private String test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
TextView tvShow = (TextView)findViewById(R.id.tv_show);
test = MyApplication.getInstance().getTest();
tvShow.setText(test);
}
}
二、重写应用程序的生命周期事件
Application类为应用程序的创建和终止,低可用内存和配置改变提供了事件处理程序。
通过重写一下方法,可以为上述几种情况实现自己的应用程序行为:
· onCreate 创建应用程序时调用。可通过重写此方法来实例化应用程序的单态,以及创建和实例化任何应用程序的状态变量和共享资源。
· onLowMemory: 当系统处于资源匮乏状态是,具有良好行为的应用程序可以释放额外的内存。此方法一般只会在后台进程已经终止,但是前台应用程序仍然缺少内存是调用。可通过重写此方法来清空缓存或者释放不必要的资源。
· onTrimMemory:作为onLowMemory的一个特定于应用程序的替代选择,在Android 4.0(API level 13)中引入。
· onConfigurationChanged:在配置改变时,应用程序对象不会被终止和重启。如果应用程序使用到的值需要在配置改变时重新加载,则可以通过重写此方法实现。
以下是重写什么周期事件的代码(没有实现具体功能):
public class MyApplication extends Application {
private static MyApplication singleton;
public static MyApplication getInstance(){
return singleton;
} @Override
public final void onCreate() {
super.onCreate();
singleton = this;
} @Override
public final void onLowMemory() {
super.onLowMemory();
} @Override
public void onTrimMemory(int level) {
//此方法在Android 4.0(API level 13)中引入,使用时请注意。
super.onTrimMemory(level);
} @Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
}
Android学习笔记(三)Application类简介的更多相关文章
- [Android学习笔记]扩展application
扩展Application对象 每一个应用程序启动之后,都会分配一个linux用户,并且运行在一个独立的进程中.默认情况下,一个应用程序只会运行在一个进程中(可以通过配置android:process ...
- android学习笔记三
GUI==>Graphics User Interface,图形用户界面. android UI 建立在View.ViewGroup基础上,采用组合器设计模式设计View和ViewGoup. V ...
- MyBatis学习笔记(三) Configuration类
一.初探Configuration类 我们先来看一下MyBatis的XML配置文件的结构,(摘自mybatis.org) 下面这个是Configuration类的部分变量 一点不一样是不是??? 其实 ...
- Android学习笔记三:用Intent串联activity
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7513399.html 一:Intent Intent可以理解为 意图. 我们可以通过创建intent实例来定义 ...
- (转)Qt Model/View 学习笔记 (三)——Model类
Model类 基本概念 在model/view构架中,model为view和delegates使用数据提供了标准接口.在Qt中,标准接口QAbstractItemModel类中被定义.不管数据在底层以 ...
- Android学习笔记(三)
ContentProvider简单介绍 ContentProvider是不同应用程序之间进行数据交换的标准API,当一个应用程序须要把自己的数据暴露给其它程序使用时.该应用程序便可通过提供Conten ...
- JVM学习笔记(三):类文件结构
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步. 实现语言无关性的基础是虚拟机和字节码存储格式.Java虚拟机不和包括Java在内的任何语言绑定,只与&quo ...
- IDA Pro 权威指南学习笔记(三) - IDA 桌面简介
IDA 的默认桌面如下图 工具栏区域(1)包含与 IDA 的常用操作对应的工具,可以使用 View -> Toolbar 显示或隐藏工具栏 可以使用 View -> Toolbars -& ...
- android学习笔记三--Activity 布局
1.线性布局 标签 :<LinearLayout></LinearLayout> 方向:android:orientation, 垂直:vertical 水平:Horizont ...
- Android学习笔记(8):ViewGroup类
A ViewGroup is a special view that can contain other views (called children.) The view group is the ...
随机推荐
- [Cache] C#操作缓存--CacheHelper缓存帮助类 (转载)
点击下载 CacheHelper.zip CacheHelper 缓存帮助类 C#怎么操作缓存 怎么设置和取缓存数据,都在这个类里面呢 下面看一下代码吧 /// <summary> /// ...
- LINQ 101——分区、Join、聚合
一.Partitioning 分区 Take 例1:取前3个数 static void Linq1() { , , , , , , , , , }; ); Console.WriteLine(&quo ...
- ZOJ 1423 (Your)((Term)((Project))) (模拟+数据结构)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=423 Sample Input 3(A-B + C) - (A+(B ...
- [LeetCode OJ] Word Search 深度优先搜索DFS
Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...
- OC中常用的字符处理
NSString *str1 = @"BeiJing"; NSString *str2 = @"beijing"; //全部转为大写 NSLog(@" ...
- Windows phone 之手势识别(Drag)
首先,在XAML页面中,添加如下代码: 前提,别忘了添加 1.引入dll (silverlight for wndows phone toolkit) 2.引入命名空间 xmlns:toolkit=& ...
- css 兼容 position:fixed
我是头 我是主体 有多少内容,我就有多高 我是脚 我要随滚动条滚动 我要随滚动条滚动 我要随滚动条滚动 <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...
- 使用Express搭建服务器
Express是基于Node.js平台,快速.开放.极简的web开发框架.所以,使用Express之前,请确保已安装Node.js. 1.创建一个目录作为当前工作目录: $ mkdir myapp $ ...
- javascript 获取 class 样式 重新赋值class样式 为div等系列标签内更改内容
name = document.getElementById(project_not_through_id).className; // 获取目标id的 cla ...
- WPFDispatcher示例
Dispatcher 类提供用于管理线程工作项队列的服务. 效果演示: <Window x:Class="WPF之Dispatcher对象.MainWindow" xmlns ...