Android中Application类的详解:
我们在平时的开发中,有时候可能会须要一些全局数据。来让应用中的全部Activity和View都能訪问到。大家在遇到这样的情况时,可能首先会想到自定义一个类,然后创建非常多静态成员。
可是这样的方法不符合Android的框架架构,只是andorid已经为我们提供了这样的情况的解决方式:在Android中,有一个名为Application的类。我们能够在Activity中使用getApplication(),方法来获得。它是代表我们的应用程序的类,使用它能够获得当前应用的主题,资源文件里的内容等,这个类更灵活的一个特性就是能够被我们继承,来加入我们自己的全局属性。让整个App的Activity和View都能訪问到。
1.概念:
android系统会为每一个程序运行时创建一个Application类的对象且仅创建一个,所以Application能够说是单例 (singleton)模式的一个类.且application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。由于它是全局的单例的。所以在不同的Activity,Service中获得的对象都是同一个对象。
所以通过Application来进行一些,数据传递,数据共享,数据缓存等操作。
2.作用:
(1).Application是一个基类。这个基类的作用是获取整个App的状态。我们须要自定义一个类来继承这个基类。
(2).定义一些全局的和一些上下文都要用到的变量和方法。
3.长处:
(1).继承的方式:
生命周期随着应用程序的销毁而销毁。
(2).静态类或静态方法:
程序退出后该类或者变量不能立马被GC回收。
当你再次进入后会发现该静态类保存的信息状态是之前的。有可能会导致程序不是你想要的初始化状态。
(3).App的进程被创建时,这个类就会被实例化。onCreate()方法就会被运行。给全部全局变量赋初期值。这样,全部的Activity就共有这个类里面的变量了。
4.getContext()、getApplication()、getApplicationContext()、getActivity()的差别:
(1).getContext():获取到当前对象的上下文。
(2).getApplication():获得Application的对象
(3).getApplicationContext():获得应用程序的上下文。
有且仅有一个同样的对象。生命周期随着应用程序的摧毁而销毁。就像是社会。全部的都发生在这个社会上,仅且仅仅有一个社会。每一个Activity都有自己的上下文。而整个应用仅仅有一个上下文
(4)getActivity():获得Fragment依附的Activity对象。Fragment里边的getActivity()不推荐使用原因例如以下:这种方法会返回当前Fragment所附加的Activity,当Fragment生命周期结束并销毁时。getActivity()返回的是null。所以在使用时要注意推断null或者捕获空指针异常。所以仅仅要推断getActivity()为空。就能够不再运行以下的代码,这全然不影响业务的使用。
5. 应用程序创建Context实例的情况有例如以下几种情况:
(1).创建Application对象时,并且整个App共一个Application对象
(2).创建Service对象时
(3).创建Activity对象时。
Activity Service Application都是Context的子类。Context是一个抽象类。详细的实现是在ContextImpl类中。因此应用程序App共有的Context数目公式为:
总Context实例个数=Service个数+Activity个数+1(Application相应的Context实例)
6.Android应用中内存泄漏问题:
(1).对Context持有一个过长的引用。对Context的引用超过它本身的生命周期。Android应用程序限制使用的堆内存是16M
(2).静态变量拥有了很多其它的对象引用。内存仍然不会被销毁。
总结一下:避免Context泄漏应该注意的问题:
1.使用Application这样的Context类型
2.注意对Context的引用不要超过它本身的生命周期
3.慎重使用statickeyword
4.Context里假设有线程,一定要在onDestory()里及时停掉。
Android中Application类的详解:的更多相关文章
-
Android中Service的使用详解和注意点(LocalService)
Android中Service的使用详解和注意点(LocalService) 原文地址 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalServ ...
-
Android中Canvas绘图基础详解(附源码下载) (转)
Android中Canvas绘图基础详解(附源码下载) 原文链接 http://blog.csdn.net/iispring/article/details/49770651 AndroidCa ...
-
Android中SurfaceView的使用详解
Android中SurfaceView的使用详解 http://blog.csdn.net/listening_music/article/details/6860786 Android NDK开发 ...
-
Android中的windowSoftInputMode属性详解
这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下 在前面的一篇文章中 ...
-
Android中Application类总结
本文出处: 炎之铠csdn博客:http://blog.csdn.net/totond 炎之铠邮箱:yanzhikai_yjk@qq.com 本文原创,转载请注明本出处! 前言 最近的开发中经常使用到 ...
-
Android 中的消息传递,详解广播机制
--------------------------------------广播机制简介--------------------------------------------- Android中的广 ...
-
[转]Android中Application类的用法
原文链接:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application ...
-
【转】Android中Application类用法
转自:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application和A ...
-
c++中string类的详解
,<时返回-1,==时返回0 string的子串:string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串strin ...
随机推荐
-
conversations.im
最后在即时消息 https://conversations.im/ https://github.com/chrisballinger/ 对话是Android 4.0的Jabber / XMPP客户 ...
-
ajax上传
使用FormData,进行Ajax请求并上传文件:具体代码如下: html代码: <!DOCTYPE html><html lang="en"><he ...
-
Touch Event
转自: http://hi.baidu.com/masaiui/item/971775e8b316238bc10d754b 参考: http://hedgehogking.com/?p=55 ...
-
C#Web编程
1.Web服务器控件可以包含服务器上调用的事件处理程序.只有送回服务器时,才在服务器上触发事件.把autoPostBack设置为true,事件将立即传给服务器.这样就会使客户端调用Javascript ...
-
【BZOJ 2005】[Noi2010]能量采集
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得 ...
-
MVC使用Exception过滤器自定义处理Action的的异常
1.继承FilterAttribute ,IExceptionFilter自定义处理 /// <summary> /// 登录错误自定义处理 /// </summary> pu ...
-
javascript--瀑布流
简单瀑布流代码实现 html代码例如以下 <!DOCTYPE html> <html> <head> <meta http-equiv="Conte ...
-
SQLServer2000数据同步复制技术方法
一. 预备工作 1.发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户 --管理工具 --计算机管理 --用户和组 --右键用户 --新建用户 ...
-
C语言中的enum(枚举)使用方法
近期在写数据结构的广义表时候用到了这个概念,在学习C语言的时候没有太注意们这里学一下. 我在网上结合了非常多资料,这里自己总结一下. 首先说.JAVA和C++中都有枚举类型. 假设一个变量你须要几种可 ...
-
转载 C#文件上传
一.分析 本次博客,主要解决文件上传等一系列问题,将从两方面来论述,即1G以内文件和1G以上文件. 对于上传1G以内的文件,可以采用基本的三种上传方法:用Web控件FileUpload.html控件 ...