android 释放bitmap fragment,,为什么重复Replace Fragment会内存泄漏
如图,当点击下面的两个按钮时,REPALCE上面的Fragmnet,共两个,反复切换时发生了内存泄漏
这是Fragment的代码:
public class Fragment2 extends Fragment {
private List lb = new ArrayList<>();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
allocBitMap();
allocBitMap();
return inflater.inflate(R.layout.f2, container, false);
}
private void allocBitMap() {
Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.men);
lb.add(b);
}
@Override
public void onDestroy() {
Log.e("onDestroy", "yes, onDestroy");
super.onDestroy();
}
}
这是Activity的部分代码
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_left:
transFragleft();
break;
case R.id.bt_right:
transFragright();
break;
}
}
Fragment f1 = new Fragment1();
Fragment f2 = new Fragment2();
private void transFragleft(){
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.rl_f, f1);
ft.commit();
}
private void transFragright(){
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.rl_f, f2);
ft.commit();
}
这是反复切换时的内存状态:
这是LOGCAT,可以看到onDestroy执行了,整个Fragment生命周期马上就结束了
04-27 09:46:04.682 29320-29320/com.sg.fragmentpitfall E/onDestroy: yes, onDestroy
04-27 09:46:06.344 29320-29320/com.sg.fragmentpitfall E/onDestroy: yes, onDestroy
04-27 09:46:07.895 29320-29320/com.sg.fragmentpitfall E/onDestroy: yes, onDestroy
那么为什么他占用的那块内存还在呢?
提问2:
JAVA中怎样分配一定内存,用于实验,我这种bitmap的方法太LOW了,而且里面还有CONTEXT;
提问3:
是否应该避免使用FRAGMENT(我知道用HIDE/SHOW的方式要比REPLACE要好
谢谢!
android 释放bitmap fragment,,为什么重复Replace Fragment会内存泄漏相关推荐
- Android性能优化之利用强大的LeakCanary检测内存泄漏及解决办法
本篇文章主要介绍了Android性能优化之利用LeakCanary检测内存泄漏及解决办法,有兴趣的同学可以了解一下. 目录 前言 什么是内存泄漏? 内存泄漏造成什么影响? 什么是LeakCanary? ...
- Android笔记 Application对象的使用-数据传递以及内存泄漏问题
Application的使用 What is Application Application和Actovotu,Service一样是android框架的一个系统组件,当android程序启动时系统会创 ...
- Android 内存泄漏检测开源库LeakCanary 研究
1. Android 内存空间不足会引发的问题 1.1 异常 1.2 卡顿 1.3 从 Java 堆内存超限这个问题开始 2. 内存优化着手点 2.1 检测 RAM usage 2.2 进程 2.3 ...
- Android内存泄漏查找和解决
Android内存泄漏查找和解决 目录: 内存泄漏的概念 一个内存泄漏的例子 Java中"失效"的private修饰符 回头看内存泄漏例子泄漏的重点 强引用与弱引用 解决内部类的内 ...
- Android内存优化之内存泄漏
内存泄漏 内存泄漏一般有以下几种情况:单例.静态变量.Handler.匿名内部类.资源使用未关闭 单例导致的内存泄漏 单例的情况主要是因为单例的生命周期比较长,如果引用的一些资源(比如Context. ...
- Android应用内存泄漏的定位、分析与解决策略
Hello,大家好,我是Clock.翻了一下简书,发现有一个多月没有更新博客,本来今天打算和妹纸去电影院看<你的名字>,然后再去到处浪的. 结果因为妹纸公司临时有事,她不得不回公司一趟.. ...
- Android内存泄漏的分析和避免
内存泄漏 Java是垃圾回收语言的一种,其优点是开发者无需特意管理内存分配,降低了应用由于局部故障(segmentation fault)导致崩溃,同时防止未释放的内存把堆栈(heap)挤爆而导致程序 ...
- Android内存泄漏
Java是垃圾回收语言的一种,其优点是开发者无需特意管理内存分配,降低了应用由于局部故障(segmentation fault)导致崩溃,同时防止未释放的内存把堆栈(heap)挤爆的可能,所以写出来的 ...
- Android 内存泄漏分析指北
android 内存泄漏分析指北 简单来说内存泄漏就是当对象不再被应用程序使用,但是垃圾回收器却不能移除它们,因为它们正在被引用 java 垃圾回收介绍: Java 虚拟机运行所管理的内存包括以下几个 ...
最新文章
- redis 五大数据结构__常用命令
- jvm性能调优实战 -56没有WHERE条件的SQL语句引发的OOM MAT 排查步骤
- POJ 3255 Roadblocks 次短路
- angularjs的$http请求方式
- Zookeeper的客户端Curator基本使用
- FFmpeg总结(一)FFmpeg官方文档分块
- 阿里巴巴牵手上汽集团:成立汽车科技公司
- 用treeview遍历文件夹(vb)
- 学习RedHat7第一课
- Mac录制屏幕转GIF
- 当你不能够再拥有,你唯一可以做的,就是令自己不要忘记
- springboot配置文件密文解密
- linux parallel指令参数,GNU Parallel的具体使用
- linux Ubuntu使用Eclipse菜单栏不见了解决方法
- Java是什么?有什么特点?
- Spring Cloud Alibaba - Sentinel入门案例(四)(热点规则 )
- 自监督学习和计算机视觉
- 计算机动画专业教学大纲,3d-Max动画制作课程教学大纲
- Android蓝牙bt/ble开发
- Ijkplayer Android介绍
热门文章
- 如何使用 MySQL 的 IDE 导出导入数据表文件(以 Navicat for MySQL 导出导入 Excel 文件为例)
- java mapreduce教程_Java搭建MapReduce完成二次排序步骤
- tensorflow适用于python版本_tensorflow用python哪个版本更好?
- elemntui icon 大小_自定义elementui中的图标
- Segmentaion标签的三种表示:poly、mask、rle
- linux 进程函数替换,Linux使用exec函数实现进程替换的代码分享
- 浪潮集团PHP,浪潮php实习第一天(初识php)
- dokcer mysql修改编码_默认支持utf8编码的mysql docker镜像
- flash 用 html 播放,使用flash插件在HTML上播放音频
- JDK源码解析之 Java.lang.Float