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类的详解:的更多相关文章

  1. Android中Service的使用详解和注意点(LocalService)

    Android中Service的使用详解和注意点(LocalService) 原文地址 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalServ ...

  2. Android中Canvas绘图基础详解(附源码下载) (转)

    Android中Canvas绘图基础详解(附源码下载) 原文链接  http://blog.csdn.net/iispring/article/details/49770651   AndroidCa ...

  3. Android中SurfaceView的使用详解

    Android中SurfaceView的使用详解 http://blog.csdn.net/listening_music/article/details/6860786 Android NDK开发 ...

  4. Android中的windowSoftInputMode属性详解

    这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下     在前面的一篇文章中 ...

  5. Android中Application类总结

    本文出处: 炎之铠csdn博客:http://blog.csdn.net/totond 炎之铠邮箱:yanzhikai_yjk@qq.com 本文原创,转载请注明本出处! 前言 最近的开发中经常使用到 ...

  6. Android 中的消息传递,详解广播机制

    --------------------------------------广播机制简介--------------------------------------------- Android中的广 ...

  7. [转]Android中Application类的用法

    原文链接:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application ...

  8. 【转】Android中Application类用法

    转自:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application和A ...

  9. c++中string类的详解

    ,<时返回-1,==时返回0  string的子串:string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串strin ...

随机推荐

  1. IDEA 开发工具在POM.XML文件中增加依赖

    在POM.XML 中使用快捷键 ALT+INSERT 选择第一个,输入关键字即可 选择版本,确认,ok

  2. JavaFX 一 出生新手村(阅读小规则)

    我就不讲IDE怎么装的,网上有的是,我仅仅是说说我学习过程中遇到的,该注意的东西 1.JavaFX刚開始出是基于脚本script开发的语言,所以网上会有流传比較多关于script的JavaFX,对于被 ...

  3. 把文件保存到 sdcard

    直接上代码: package com.example.test; import java.io.File; import java.io.FileNotFoundException; import j ...

  4. sql server 内置MD5加密函数

    http://blog.csdn.net/rookie_liu_ToFly/article/details/53116932 select right(sys.fn_VarBinToHexStr(HA ...

  5. 使用Java语言开发微信公众平台(三)

            在上一节课程中,我们来学习了微信公众平台最基础的一个接口——access_token,并且能够从微信公众平台中取到access_token. 那么,在本节课程中,我们要以上节课获取到的 ...

  6. 【Uva 1289】Stacking Plates

    [Link]: [Description] 有n(1≤n≤50)堆盘子,第i堆盘子有hi个盘子(1≤hi≤50),从上到下直径不减.所有盘 子的直径均不超过10000.有如下两种操作. split:把 ...

  7. .Net中的缓存依赖配置

    缓存--能非常好的提高网站的性能. 在訪问量大,但更新较少的站点中使用缓存,能够大大提高执行效率. 在.net中给我们提供了非常好的缓存机制.页面缓存.数据缓存,还有非常好的依赖缓存. 依赖缓存优点就 ...

  8. badblocks 检查硬盘是否有坏道

    硬盘是比較easy坏掉的设备,使用一段时间后可能会出现坏道等物理故障. 当硬盘出现坏道后,若不及时更换或者进行技术上的处理,磁盘的坏道就会越来越多,并会造成频繁死机和数据丢失. 最好的处理方法是更换新 ...

  9. HDU 2102 A计划 (三维的迷宫BFS)

    题目链接:pid=2102">传送门 题意: 三维的一个迷宫,起点在第一层的S(0,0,0)处,问是否能在规定的时间内走到第二层的P 处.'*'代表不能走,'.'代表能够走,'#'代表 ...

  10. c#的中英文混合字符串截取

    public class StringHelper     {         public static string GetSubString(string str, int len)       ...