码迷,mamicode.com
首页 > 移动开发 > 详细

Android开发 关于静态static类与static方法持有Context是否导致内存泄露的疑问

时间:2019-04-13 19:19:54      阅读:1011      评论:0      收藏:0      [点我收藏+]

标签:bsp   stat   引入   app   模式   and   原则   自己   代码   

简述

  在Android开发的过程中,难免会使用单例模式或者静态方法工具类.我们会让它们持有一些外部的Context或者View一般有以下几种情况:

  1.   单例模式,类的静态变量持有Context
  2.   单例模式,类的静态变量持有View
  3.   单例模式,方法引入Context  
  4.   工具类静态方法持有Context
  5.   工具类静态方法持有View
  6.   工具类静态变量持有Context
  7.   工具类静态变量持有View

  我们就来逐一讲解一下以上情况Context是否能引用给它们.

 

Context的类型认识

  在讲解关于静态持有Context之前,我们需要来认识一下Context自己的区别,原则上Context其实只有2种(尽管Activity/Fragment/Service/都有Context,但是实际上他们属于一个类型的Context)

  第一种

应用的Context,下面的2行代码都是调用应用的Context,这个Context在一个app里只会有一个.并且在App启动时创建,App关闭时消亡,所以这个Context是贯彻App生命周期全程的.

Context applicationContext = getApplicationContext();
Context baseContext = getBaseContext();

  第二种

Activity 或者 Service 自己,Activity 或 Service自己本身就是Context,这种Context的生命周期只在Activity或Service的生命周期下,关闭了Activity后Context理所应当的也随着消亡.有多少Activity和Service就会有多少个Context,并且重复多次创建某个Activity的时候Context也是多个

 

单例模式持有Context的情况

 

 

工具类持有Context的情况

 

Android开发 关于静态static类与static方法持有Context是否导致内存泄露的疑问

标签:bsp   stat   引入   app   模式   and   原则   自己   代码   

原文地址:https://www.cnblogs.com/guanxinjing/p/10701192.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!