Android学习笔记(三)Application类简介
2015-08-25 11:12
483 查看
每次运行APP时,Application类都保持实例化状态。与Activity不同,配置改变不会导致应用程序重启。通过继承Application类,可以完成一下3项工作:
· 对Android运行时广播的应用程序级事件做出相应。
· 在应用程序组件之间传递对象。
· 管理和维护多个应用程序组件使用的资源。
其中,后两项工作通过使用一个单态类能够更好地完成。Application的实现在本质上是单态的,并应作为单态实现,以便提供对其方法和成员变量的访问。
一、扩展和使用Application类
如下程序是扩展了Application类的框架代码,并把它实现为一个单态。
需要注意的是,在创建新的Application类后,需要在Manifest的application节点中注册它,如下所示:
当应用程序开始运行时,Application实现将会得到实例化。创建新的状态变量和全局资源,在程序中我们可以通过以下方式使用它:
我们知道,在Activity传递变量的方式有很多种,(如:Intent传参),但就像有些常用的状态变量(如:用户的userId),如果每次得通过Intent方式传来传去的话,很容易导致逻辑混乱,那么这时候我们就可以将这个常用的公共变量保存到Application类中,无论哪一个Activity需要用到它时,直接从Application类中获取即可,非常方便。下面以一个简单的例子来说明一下通过Application类达到共享变量的效果:
示例说明:创建两个Activity,用其中的一个Activity改变Application中的变量,然后在另一个Activity中验证此变量的改变。(例子很简单,能说明问题即可)先看一下效果图:
![](http://images0.cnblogs.com/blog2015/776965/201508/251027338749964.png)
![](http://images0.cnblogs.com/blog2015/776965/201508/251027415147000.png)
1、首先创建MyApplication去继承Application类
以上代码,在MyApplication类中,包含了一个MyApplication的实例变量和一个测试变量。
2、在MainActivity中获取MyApplication的实例化对象,并且改变MyApplication中test变量的值。
3、在TestActivity取出MyApplication中的test值并显示在TextView上。
二、重写应用程序的生命周期事件
Application类为应用程序的创建和终止,低可用内存和配置改变提供了事件处理程序。
通过重写一下方法,可以为上述几种情况实现自己的应用程序行为:
· onCreate 创建应用程序时调用。可通过重写此方法来实例化应用程序的单态,以及创建和实例化任何应用程序的状态变量和共享资源。
· onLowMemory: 当系统处于资源匮乏状态是,具有良好行为的应用程序可以释放额外的内存。此方法一般只会在后台进程已经终止,但是前台应用程序仍然缺少内存是调用。可通过重写此方法来清空缓存或者释放不必要的资源。
· onTrimMemory:作为onLowMemory的一个特定于应用程序的替代选择,在Android 4.0(API level 13)中引入。
· onConfigurationChanged:在配置改变时,应用程序对象不会被终止和重启。如果应用程序使用到的值需要在配置改变时重新加载,则可以通过重写此方法实现。
以下是重写什么周期事件的代码(没有实现具体功能):
· 对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中验证此变量的改变。(例子很简单,能说明问题即可)先看一下效果图:
![](http://images0.cnblogs.com/blog2015/776965/201508/251027338749964.png)
![](http://images0.cnblogs.com/blog2015/776965/201508/251027415147000.png)
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); } }
相关文章推荐
- 交互干货必收 | App界面交互设计规范
- iOS国际化:程序名称国际化、内容国际化、storyboard国际化
- Android笔记:反向横屏
- Android-ViewFlipper(图片轮播 和 手势控制 实例)
- 网易新闻iOS版使用的开源组件
- APP功能分析
- 如何在Mac上使用Swift调用C接口开发条形码应用
- Android 单元测试(四)测试 Activity和Fragment
- android listview去掉分割线
- 阿里百川Android应用
- Android-Code-Style
- Android 单元测试(三)总结
- 正则表达式在iOS中的运用(附手机密码邮箱等正则判断)
- Android中IntentService与Service的区别
- Android之布局属性
- Android Jni调用浅述
- APP推广入门之APP运营三大指标
- iOS 推送消息
- cloudant DB save,Not a JSON Object
- Android 单元测试(二) Instrumentation Test