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

相关文章

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、

Python中合并列表(list)的六种方法小结

《Python中合并列表(list)的六种方法小结》本文主要介绍了Python中合并列表(list)的六种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、直接用 + 合并列表二、用 extend() js方法三、用 zip() 函数交叉合并四、用