您的位置:首页 > 移动开发

Android学习笔记(三)Application类简介

2015-08-25 11:12 483 查看
  每次运行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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: