• Android中Application类的详解:


    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()里及时停掉。

  • 相关阅读:
    如何用纯 CSS 创作一个跳动的字母 i
    如何用纯 CSS 创作一个变色旋转动画
    如何用纯 CSS 创作气泡填色的按钮特效
    如何用纯 CSS 创作一个跳 8 字型舞的 loader
    如何用纯 CSS 创作一只徘徊的果冻怪兽
    如何用纯 CSS 创作一个单元素抛盒子的 loader
    如何用纯 CSS 创作单元素点阵 loader
    如何用纯 CSS 创作一个摇摇晃晃的 loader
    [Monkey King]
    473. 核电站问题
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7105615.html
Copyright © 2020-2023  润新知