Android高级编程笔记(三)Application类简介

  每次运行APP时,Application类都保持实例化状态。与Activity不同,配置改变不会导致应用程序重启。通过继承Application类,可以完成一下3项工作:

  · 对Android运行时广播的应用程序级事件做出相应。

  · 在应用程序组件之间传递对象。

  · 管理和维护多个应用程序组件使用的资源。

  其中,后两项工作通过使用一个单态类能够更好地完成。Application的实现在本质上是单态的,并应作为单态实现,以便提供对其方法和成员变量的访问。

一、扩展和使用Application类

  如下程序是扩展了Application类的框架代码,并把它实现为一个单态。

 1 public class MyApplication extends Application {
 2     private static MyApplication singleton;
 3
 4     public static MyApplication getInstance(){
 5         return singleton;
 6     }
 7
 8     @Override
 9     public final void onCreate() {
10         super.onCreate();
11         singleton = this;
12     }
13 }

  需要注意的是,在创建新的Application类后,需要在Manifest的application节点中注册它,如下所示:

 1 <application
 2         android:allowBackup="true"
 3         android:name=".MyApplication"
 4         android:icon="@drawable/ic_launcher"
 5         android:label="@string/app_name"
 6         android:theme="@style/AppTheme" >
 7         <activity
 8             android:name=".MainActivity"
 9             android:label="@string/app_name" >
10             <intent-filter>
11                 <action android:name="android.intent.action.MAIN" />
12
13                 <category android:name="android.intent.category.LAUNCHER" />
14             </intent-filter>
15         </activity>
16 </application>

  当应用程序开始运行时,Application实现将会得到实例化。创建新的状态变量和全局资源,在程序中我们可以通过以下方式使用它:

1   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类

 1 public class MyApplication extends Application {
 2     private static MyApplication singleton;
 3     private String test;
 4     public static MyApplication getInstance(){
 5         return singleton;
 6     }
 7     public String getTest() {
 8         return test;
 9     }
10     public void setTest(String test) {
11         this.test = test;
12     }
13     @Override
14     public final void onCreate() {
15         super.onCreate();
16         singleton = this;
17     }
18 }

  以上代码,在MyApplication类中,包含了一个MyApplication的实例变量和一个测试变量。

  2、在MainActivity中获取MyApplication的实例化对象,并且改变MyApplication中test变量的值。

 1 public class MainActivity extends Activity {
 2     private MyApplication myApp;
 3     EditText etTest;
 4     Button bnGo;
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_main);
 9         myApp = MyApplication.getInstance();//获取Application类实例化对象
10         etTest = (EditText)findViewById(R.id.et_test);//绑定控件
11         bnGo = (Button)findViewById(R.id.bn_go);//绑定控件
12         bnGo.setOnClickListener(new OnClickListener() {
13             @Override
14             public void onClick(View arg0) {
15                 myApp.setTest(etTest.getText().toString());//改变MyApplication中test变量的值
16                 Intent intent = new Intent(MainActivity.this, TestActivity.class);
17                 startActivity(intent);
18             }
19         });
20     }
21 }

  3、在TestActivity取出MyApplication中的test值并显示在TextView上。

 1 public class TestActivity extends Activity {
 2     private String test;
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         setContentView(R.layout.activity_test);
 7         TextView tvShow = (TextView)findViewById(R.id.tv_show);
 8         test = MyApplication.getInstance().getTest();
 9         tvShow.setText(test);
10     }
11 }

二、重写应用程序的生命周期事件

  Application类为应用程序的创建和终止,低可用内存和配置改变提供了事件处理程序。

  通过重写一下方法,可以为上述几种情况实现自己的应用程序行为:

  · onCreate 创建应用程序时调用。可通过重写此方法来实例化应用程序的单态,以及创建和实例化任何应用程序的状态变量和共享资源。

  · onLowMemory: 当系统处于资源匮乏状态是,具有良好行为的应用程序可以释放额外的内存。此方法一般只会在后台进程已经终止,但是前台应用程序仍然缺少内存是调用。可通过重写此方法来清空缓存或者释放不必要的资源。

  · onTrimMemory:作为onLowMemory的一个特定于应用程序的替代选择,在Android 4.0(API level 13)中引入。

  · onConfigurationChanged:在配置改变时,应用程序对象不会被终止和重启。如果应用程序使用到的值需要在配置改变时重新加载,则可以通过重写此方法实现。

  以下是重写什么周期事件的代码(没有实现具体功能):

 1 public class MyApplication extends Application {
 2     private static MyApplication singleton;
 3     public static MyApplication getInstance(){
 4         return singleton;
 5     }
 6
 7     @Override
 8     public final void onCreate() {
 9         super.onCreate();
10         singleton = this;
11     }
12
13     @Override
14     public final void onLowMemory() {
15         super.onLowMemory();
16     }
17
18     @Override
19     public void onTrimMemory(int level) {
20         //此方法在Android 4.0(API level 13)中引入,使用时请注意。
21         super.onTrimMemory(level);
22     }
23
24     @Override
25     public void onConfigurationChanged(Configuration newConfig) {
26         super.onConfigurationChanged(newConfig);
27     }
28 }
时间: 2024-10-11 08:03:44

Android高级编程笔记(三)Application类简介的相关文章

Android高级编程笔记(四)深入探讨Activity(转)

在应用程序中至少包含一个用来处理应用程序的主UI功能的主界面屏幕.这个主界面一般由多个Fragment组成,并由一组次要Activity支持.要在屏幕之间切换,就必须要启动一个新的Activity.一般的Activity都占据了整个显示屏,但可以创建成半透明或二者浮动的Activity. 一.创建Activity 通过继承Activity类可以创建一个Activity窗口,基本框架如下: 1 public class MyActivity extends Activity { 2 @Overri

Android高级编程笔记(五)Fragment简介

Fragment是在Android 3.0 (API level 11)中引入的Activity的子模块.初衷是为了适应大屏幕的平板电脑,我们只需要使用Fragment对UI组件进行分组.模块化管理,就能很方便在运行过程中动态更新Activity的界面.Fragment必须被嵌入Activity中使用个,虽然也拥有自己的生命周期,但其生命周期手它所在的Activity的生命周期的控制.只有当该Activity处于活动状态时,我们才可以通过方法独立的操作Fragment. 一.Fragment的几

Android高级编程笔记(八)深入分析Service启动、绑定过程

Service是Android中一个重要的组件,它没有用户界面,可以运行在后太做一些耗时操作.Service可以被其他组件启动,甚至当用户切换到其他应用时,它仍然可以在后台保存运行.Service 是Android四大组件中与Activity最相似的组件,都代表可执行的程序,区别在于:Service一直运行在后台,没有界面,一旦Service被启动,即完全具有自己的生命周期. 一.创建一个Service 在创建Service时,步骤与Activity很像: 1.继承Service,创建Servi

Android高级编程笔记(七)两个Fragment简单跳转示例

在前两篇博文中分别介绍了Fragment得基础和Fragment的生命周期,然而说了这么多Fragment到底怎么用呢以及我们为什么要使用Fragment?本篇博文将主要探讨这两个问题,首先说下在APP中有这好好Activity,跳转起来有那么简单,我们为什么还要使用Fragment呢?这是因为Fragment相对Activity而言更加的轻量级,使用起来也更加灵活,在一个程序的内部界面切换,尽可能的用Fragment代替Activity会让我们的APP运行起来更加的流畅,更加的高效,同时也提高

Android高级编程笔记(六)Fragment的生命周期

在上一篇博文中对Fragment做了简单的介绍,现在再来探讨一下Fragment的生命周期. 一.Fragment的几种状态: 与Activity类似,Fragment也有一下几种状态: · 活动状态:当前Fragment位于前台,可见,可获得焦点. · 暂停状态:其他Activity位于前台,该Fragment可见,不可获得焦点. · 停止状态:不可见,失去焦点. · 销毁状态:该Fragment被完全删除或被结束. 二.Fragment的回调方法: 在Fragment的生命周期中,有一下方法

android application类简介(一)

每次应用程序运行时,应用程序的application类保持实例化的状态.通过扩展applicaiton类,可以完成以下3项工作: 1.对android运行时广播的应用程序级事件如低低内做出响应. 2.在应用程序组件之间传递对象(全局变量). 3.管理和维护多个应用程序组件使用的资源. 其中,后两项工作通过使用单例类来完成会更好.application会在创建应用程序进程的时候实例化. 下面是扩展Application的示例代码: import android.app.Application; p

&lt;unix高级编程&gt;笔记 chapter1

os严格上是软件,为计算机提供资源和app运行环境. 特称为内核. 内核的接口被成为system call;然后库函数对system call进行了封装;shell是特殊app,为运行其他程序提供了一个接口. shell是个命令行解释器,读取输入,执行命令. unix文件系统是由directory和file组成.目录起点成为root,名字是/. 文件属性指类型\大小\所有者\权限以及修改时间.stat和fstat返回文件属性的结构. 比如下面操作: 2.文件名 只有/和null不能出现在文件名里

如何学习android高级编程

学了android高级编程有前途吗?进入2010年之后,android的应用开发进入了一个爆炸式增长的状态,从去年的不到1万款应用程序增加到现在的9万,而且即将突破10万,这也从开发者这一方面展现了用户不断增多的现象.不过需要注意的是,虽然数值的增长速度很快,开发公司还得做好相关的审查工作,尽快提高 android电子市场整体的应用质量,改善应用的盈利环境. 学了android高级编程有前途吗?随着高配置android手机的上市,全3D手机游戏也将会在更多的手机上运行,而android 2.2版

Linux - Unix环境高级编程(第三版) 代码编译

Unix环境高级编程(第三版) 代码编译 本文地址:http://blog.csdn.net/caroline_wendy 时间:2014.10.2 1. 下载代码:http://www.apuebook.com/code3e.html 2. 安装依赖库:sudo apt-get install libbsd-dev  3. 进入下载目录make 4. 复制头文件和动态链接库 sudo cp ./include/apue.h /usr/include/ sudo cp ./lib/libapue