Android Application 详细介绍
一、先看看文档里怎么说
Base class for those who need to maintain global application state. You can provide your own implementation by specifying its name in your
AndroidManifest.xml's <application> tag, which will cause that class to be instantiated for you when the process for your application/package is created.
Application 类是用来维护应用程序全局状态。你可以提供自己的实现,并在 AndroidManifest.xml文件的 <application> 标签中指出他的名字,这将导致在创建应用程序时去实例化你自己的 Application 类。
Android系统会为每个程序运行时创建一个Application类的对象且仅创建一个,所以Application可以说是单例 (Singleton)模式的一个类。且 Application 对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局唯一的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以通过 Application 来进行一些:数据传递、数据共享、数据缓存等操作。
二、重写 Application 类的生命周期事件
public void onCreate()
在应用程序创建的时候被调用,可以实现这个这个方法来创建和实例化任何应用程序状态变量或共享资源。还可以在这个方法里面得到 Application 的单例。
public void onTerminate ()
当终止应用程序对象时调用,不保证一定被调用,当程序是被内核终止以便为其他应用程序释放资源,那么将不会提醒,并且不调用应用程序的对象的onTerminate方法而直接终止进程。
public void onLowMemory()
当系统资源匮乏的时候,我们可以在这里可以释放额外的内存, 这个方法一般只会在后台进程已经结束,但前台应用程序还是缺少内存时调用。可以重写这个方法来清空缓存或者释放不必要的资源。
public void onTrimMemory(int level)
当运行时决定当前应用程序应该减少其内存开销时(通常在进入后台运行的时候)调用,包含一个 level 参数,用于提供请求的上下文。
public void onConfigurationChanged (Configuration newConfig)
与 Activity 不同,配置改变时,应用程序对象不会被终止和重启。如果应用程序使用的值依赖于特定的配置,则重写这个方法来加载这些值,或者在应用程序级处理配置值的改变。
三、通过 Application 传递数据
假如有一个Activity A, 跳转到 Activity B ,并需要传递一些数据,通常的作法是 Intent.putExtra() 让Intent携带,或者有一个Bundle把信息加入Bundle让Intent传递Bundle对象,实现传递。但这样 有一个问题在于,Intent 和 Bundle 所能携带的数据类型都是一些基本的数据类型,如果想实现复杂的数据传递就比较麻烦了,通常需要实现 Serializable 或者 Parcellable 接口。这其实是Android的一种IPC数据传递的方法。如果我们的两个Activity在同一个进程当中为什么还要这么麻烦呢,只要把需要传递的对象的引用传递过去就可以了。
基本思路是:在 Application 中创建一个 HashMap ,以字符串为key,Object为value这样我们的 HashMap 就可以存储任何类型的对象了。在Activity A中把需要传递的对象放入这个HashMap,然后通过 Intent 或者其它途径再把这 key 传递给Activity B ,Activity B 就可以根据这个字符串在 HashMap 中取出这个对象了。只要再向下转型 ,就实现了对象的传递。、
四、Application 数据缓存
我一般会习惯在 Application 中建立两个 HashMap 一个用于数据的传递(见三),一个用于缓存一些数据。比如有一个Activity需要从网站获取一些数据,获取完之后我们就可以把这个数据先存到Application 当中,当页面跳转到其它 Activity 再回来的时候,就可以直接使用缓存好的数据了。但如果需要cache一些大量的数据,最好是cache一些 (软引用)SoftReference ,并把这些数据cache到本地Rom 上或者 SDCard上。如果在 Application 中的缓存不存在,从本地缓存查找,如果本地缓存的数据也不存在再从网络上获取。
装模作样的声明一下:本博文章若非特殊注明皆为原创,若需转载请保留原文链接(http://www.cnblogs.com/kest/p/5137328.html)及作者信息k_est
Android Application 详细介绍的更多相关文章
- Android Bitmap详细介绍(转)
转自: Bitmap详细介绍 package com.testbitmapscale; import java.io.File; import java.io.FileInputStream; imp ...
- Android Application 对象介绍
What is Application Application和Actovotu,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application ...
- 【转】Android Application 对象介绍
What is Application Application和Activity,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application ...
- 1、Android Bitmap详细介绍
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...
- Android Bitmap详细介绍
package com.testbitmapscale; import java.io.File; import java.io.FileInputStream; import java.io.Fil ...
- Android Bitmap详细介绍(3)
package com.testbitmapscale; import java.io.File; import java.io.FileInputStream; import java.io.Fil ...
- android Application类的详细介绍(转)
在代码中经常看到application这个类,一直不知道这个是干什么用的,今天刚好有点时间,所以进行了详细的学习. 一.先对它的整体概念解释: 在android源码中对他的描述是; * Base cl ...
- Android manifest之manifest标签详细介绍
AndroidManifest详细介绍 本文主要对AndroidManifest.xml文件中各个标签进行说明.索引如下: 概要PART--01 manifest标签PART--02 安全机制和per ...
- 【转】Android Support Library详细介绍
网上对Android Support Library中各个依赖包介绍的中文资料太少了,结合官方文档和有限的参考资料做了一次总结,有描述得不对的地方还请指正. 一.主工程.依赖包.jar包.androi ...
随机推荐
- Kubernetes3-kubectl管理Kubernetes容器平台-2
一.kubectl管理集群中deployment资源与service服务 1.相关参数 kubectl edit 编辑服务器侧资源 kubectl replace 替换,使用 yaml 配置文件来替换 ...
- 爬虫学习--常用的正则表达式 Day3
在做爬虫经常遇到需要用正则校验数据时候,往往是在网上去找很久,结果找来的还是不很符合要求.所以我最近把开发中常用的一些正则表达式整理了一下,给自己留个底,也给朋友们做个参考. 一.校验数字的表达式 1 ...
- 高性能Web动画和渲染原理系列(4)“Compositor-Pipeline演讲PPT”学习摘要
目录 摘要 1.合成流水线 2. 预定义UI层 3. paint是什么意思 4. 分层的优势和劣势 5. 视图属性及其处理方式 6. Quads 7. Compositor Frame 8. 关于光栅 ...
- python面向对象<三>
类属性.实例属性: class Tool(object): #属性(类属性)类对象(Tool) num = 0 #方法 def __init__(self,new_name): self.name = ...
- sql性能分析(explain关键字)
explain关键字结果 列名所代表的的含义: Id:MySQL QueryOptimizer 选定的执行计划中查询的序列号.表示查询中执行 select 子句或操作表的顺序,id 值越大优先级越高, ...
- lqb 基础练习 回文数
基础练习 回文数 时间限制:1.0s 内存限制:512.0MB 问题描述 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数. 输出格式 按从小到大的顺 ...
- nyoj 53-不高兴的小明 (遍历)
53-不高兴的小明 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:28 submit:89 题目描述: 小明又出问题了.妈妈认为聪明的小明应该 ...
- 接口测试之-postman
在使用postman进行接口测试的时候,对于有些接口字段需要时间戳加密,这个时候我们就遇到2个问题,其一是接口中的时间戳如何得到?其二就是对于现在常用的md5加密操作如何在postman中使用代码实现 ...
- 破解网站二维码验证,Java实现,不调用任何平台api接口
package image.images; import java.io.File; import java.io.IOException; import java.io.InputStream; i ...
- mysql安装与sqlyog安装
首先是mysql安装,参考下面两个链接 https://www.cnblogs.com/gengyufei/p/11735358.html#_label4 https://www.jb51.net/a ...