21—小结(Week)

2024-08-30 01:48
文章标签 21 小结 week

本文主要是介绍21—小结(Week),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

xutils的框架设计问题,他内部貌似采用的是线程池管理的,当线程池满的时候,其他的线程就会处于等待状态,

这时候如果界面的数据依赖网络请求结果的话,就会造成阻塞状态。

xutils的整个后台是基于ThreadPoolExecutor线程池来做的,该程序封装的线程池的最大连接数是10,所以每次new 一个httpUtils请求下载的时候,一个new 的请求对象最多download下10个图片,如果超过10个,第十一个download将处于等待的状态,然后因为程序封装了等待的最长时间是15s,所以超过十五秒的时候,就会报Failure了。

该情况导致的hungup的问题,目前的解决办法是:在每个线程中生成自己的HttpClient实例,即每次请求download下载一次的时候就new 一次。(不过宝宝觉得能够修改封装在xUtils里的最大连接数就更好了,不过看过源码后发现,因为它封装好的最大的连接数是写在它的构造函数里面的,所以不是太好修改。ps.版本貌似是2.6的)



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

FragmentActivity是Activity的子类~基本上一样,因为要使用Fragment所以FragmentActivity里面有对Fragment管理的方法和工具。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

、优化图片的方式

final BitmapFactory.Options options = new BitmapFactory.Options();

options.inJustDecodeBounds = true;
options.inSampleSize = 2;//压缩比(PS:最好是通过函数来动态计算出来,以后进行补充)
options.inJustDecodeBounds = false;
options.inTempStorage = new byte[16 * 1024];


Bitmap bmp = BitmapFactory.decodeFile(picturePath,options);

Bitmap resizedBitmap = Bitmap.createScaledBitmap(bmp, 960, 730, false);

---------------------------------------------------------------------------------------------------------------------------------------------------------

OOM导致UI线程阻塞,界面黑屏的情况,经不断的测试,最终发现是该显示的activity在finish的时候没有被释放,导致每次打开一次的时候,内存就会不断的向上增加,直至超过最大内存溢出。

查找主要原因的过程:

1.由于在logcat日志文件中,报错的地方是BitmapFactory.decodeFile(picturePath,options);所以我采取了三方法中的动态计算压缩比或者采用临时的空间存储,即通过流进行读取。。。这段等有空把代码贴上来。然后还采用bitmap.recycle,发现通过的ImageCache缓存中的LurCaache中的数据并没有清除。所以在重复打开一张图的时候,第二次操作的时候,由于第一次finish图片的activity的时候,bitmap已经通过recycle释放掉了,所以重复打开的时候就从缓存中虽然有,但是bitmap已经被释放了,所以是黑屏。

所以这种解决办法并不生效。

2.在ImageCache的构造中其实已经设置了当缓存超过一定的size,将会自动清除前面的一些缓存。此外在该类中还有一个清除所有图片缓存的函数,一开始我以为是ImageCache的清缓存的作用没有起作用。

3.最后通过打印系统的实时总运行内存和最大运行内存,以及实时的ImageCache中的LurCache的大小发现,图片的缓存大小其实一直没有增加,增加的是总运行内存,每打开一次activity就增加一次,最后发现是每次打开的activity没有释放。

4.在3中其实我还修改了对象类型为弱引用类型,发现其实activity已经是强引用了,最后没有生效。

弱引用的使用:A a = new A();

SoftReference<A> wra = new WeakReference<A>(a);

最后调用的时候是通过wra.get()来当作没有进行弱引用时的a使用的。

--------

Java对象的引用类型:

1)强引用:

2)软引用:

3)弱引用:

4)虚引用:。。。。

补充一点:OOM的常用的解决方案

1.

2.

3.

4.

5.

这篇关于21—小结(Week)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119456

相关文章

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Go之errors.New和fmt.Errorf 的区别小结

《Go之errors.New和fmt.Errorf的区别小结》本文主要介绍了Go之errors.New和fmt.Errorf的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考... 目录error的基本用法1. 获取错误信息2. 在条件判断中使用基本区别1.函数签名2.使用场景详细对

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

MySQL慢查询工具的使用小结

《MySQL慢查询工具的使用小结》使用MySQL的慢查询工具可以帮助开发者识别和优化性能不佳的SQL查询,本文就来介绍一下MySQL的慢查询工具,具有一定的参考价值,感兴趣的可以了解一下... 目录一、启用慢查询日志1.1 编辑mysql配置文件1.2 重启MySQL服务二、配置动态参数(可选)三、分析慢查

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c