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 }
转载于:https://www.cnblogs.com/codingblock/p/4756243.html
Android学习笔记(三)Application类简介相关推荐
- Android学习笔记三
大神博客(必看)http://blog.csdn.net/huachao1001/article/list/1 1.Android校招笔记 http://huachao1001.github.io/i ...
- ANDROID 学习笔记(三) UI THREAD AsyncTask 使用
为什么80%的码农都做不了架构师?>>> 一般获取验证码,用户登录验证,上传头像,获取消息,发消息,评论 都可以使用 1.先上官网实例代码 private class Down ...
- 21、深入浅出MFC学习笔记,Application Framework简介
1.Application Framework是一个完整的程序模型:是一组合作无间的对象,彼此藉消息的流动而沟通,并且互相调用对方的函数以求完成任务.<?xml:namespace prefix ...
- Android学习笔记(三):android画图之paint
2019独角兽企业重金招聘Python工程师标准>>> * Paint类介绍 * * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了 ...
- Android学习笔记(三)
ContentProvider简单介绍 ContentProvider是不同应用程序之间进行数据交换的标准API,当一个应用程序须要把自己的数据暴露给其它程序使用时.该应用程序便可通过提供Conten ...
- SurfaceFlinger学习笔记(三)之SurfaceFlinger进程
概述 本系列是基于android Q 即android10 SurfaceFlinger学习笔记(一)应用启动流程 SurfaceFlinger学习笔记(二)之Surface SurfaceFling ...
- Android学习笔记36:使用SQLite方式存储数据
在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...
- Android学习笔记之(一)开发环境搭建
Android学习笔记之(一)开发环境搭建 zouxy09@qq.com http://blog.csdn.net/zouxy09 至于说Android是什么之类的俺就不啰嗦了,因为它离我们太近了.直 ...
- Android学习笔记之AndroidManifest.xml文件解析(摘自皮狼的博客)
Android学习笔记之AndroidManifest.xml文件解析 一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它 ...
- Android学习笔记:Android基础知识点(不断更新中)
1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...
最新文章
- linux -- /dev/null 21
- html post后404,为什么在vue-cli脚手架下启动的服务器POST返回404呢?WebStorm启动没有问题?...
- Coursera公开课笔记: 斯坦福大学机器学习第七课“正则化(Regularization)”
- Struts2中使用OGNL表达式投影(过滤)集合
- 音频光端机简单故障处理
- 取消XP和2000专业版的IIS的用户数量限制
- Linux 中/etc/profile、~/.bash_profile 环境变量执行过程
- npm/yarn修改全局安装路径和缓存路径。。。
- S - C语言实验——余弦
- KEmulator与Eclipse搭建J2me调试平台
- 如何在java中实现小数点自增_java保留小数的四种实现方法
- 踩坑记6 vue3、生命周期钩子、vue-devtools beta
- 计算机绘图课程选用课本,机械制图与计算机绘图 机械制图与计算机绘图 机械制图与计算机绘图课程标准.doc...
- uni-app:基于Vue的跨端框架(闪电演讲内容整理) | 掘金开发者大会
- crc16的c语言函数 计算ccitt_CRC16-CCITT 的算法
- 【编译原理】第五章 语法制导翻译
- 用Excel生成Ansys *VREAD函数所需的具有固定字符长度和小数位数的数据
- 用星号输出一个梯形,如下图所示:(使用嵌套for循环完成)
- 离散数学练习,三人各司何职?理论+代码
- 小程序的价值到底在哪?如何掘金?看三位顶尖从业者如何说。