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 ...
随机推荐
- C# DbHelperSQLite,SQLite数据库帮助类 (转载)
主要功能如下数据访问抽象基础类 主要是访问SQLite数据库主要实现如下功能 .数据访问基础类(基于SQLite),主要是用来访问SQLite数据库的. .得到最大值:是否存在:是否存在(基于SQLi ...
- CSS 列表
CSS列表属性作用如下: 设置不同的列表项标记为有序列表 设置不同的列表项标记为无序列表 设置列表项标记为图像 列表 在HTML中,有两种类型的列表: 无序列表 - 列表项标记用特殊图形(如小黑点.小 ...
- 使用ArrayList对大小写字母的随机打印
从a~z以及A~Z随机生成一个字母并打印:打印全部的字母 package com.liaojianya.chapter1; import java.util.ArrayList; /** * This ...
- [LeetCode OJ] Decode Ways
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- 浅谈PHP神盾的解密过程
我们来做第一步解密处理吧. PS: 这只是我的解密思路,与大家分享一下,也许你有更好的方法还望分享 <?php $str = file_get_contents("1.php" ...
- centos下配置多个tomcat同时运行
首先安装好jdk,下载好tomcat,我的是apache-tomcat-7.0.50,不用专门配置CATALINA_2_BASE,CATALINA_2_HOME等环境变量. 把tomcat解压到lin ...
- JavaScript Ajax + Promise
AJAX 在现代浏览器上写AJAX主要依靠XMLHttpRequest对象: function success(text) { var textarea = document.getElementBy ...
- 我也来玩玩WinForm~BeginInvoke让用户体验更好!
前言 先说明一下,本人不太做winform的项目,工作10年以来,一直奋斗在webform的舞台上,今天有机会也接触了一下winform,下面对工作中用到的BeginInvoke方法作一下说明,和大家 ...
- 桂电在线-php-提取菜单到配置文件
新建存储菜单的配置文件 menus.php,并配置菜单 <?php if ( ! defined('BASEPATH')) exit('No direct script access allow ...
- PHP开发APP接口---返回数据的封装类
参考视频http://www.imooc.com/learn/163 <?php /** * app返回数据类 * 1.接受多维,缺少键名的数组, * 2.可由输入的format参数决定返回数据 ...