转载

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中验证此变量的改变。(例子很简单,能说明问题即可)先看一下效果图:

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

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 }
正文到此结束
Loading...