21—小结(Week)
来源:互联网 发布:微信群自动加人软件 编辑:程序博客网 时间:2024/04/26 01:57
这时候如果界面的数据依赖网络请求结果的话,就会造成阻塞状态。
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)
- 20—小结(Week)
- week——ten
- Week—schedule 2
- week
- Week
- hdu3743——Frosh Week
- Week 21 (07.05.21-07.05.25)
- Summary of this week, Dec.21,2013
- HackerRank——Week of Code 26
- Hackerrank——Week of Code 27
- Hackerrank——Week of Code 29
- 机器学习入门教程——week 1
- 机器学习入门教程——week 2
- week after week----艰苦奋斗
- Recite Machine设计记录——week.01
- Stanford Andrew Ng ——Machine Learning WEEK 1
- week——input新属性,显示年周
- css样式字体相关属性及背景相关属性
- 周易六十四卦——大过卦
- 258. Add Digits
- css样式之文本相关属性及边框相关属性
- 104. Maximum Depth of Binary Tree
- 21—小结(Week)
- C中信号处理函数
- #ifdef 和#endif的作用
- 226. Invert Binary Tree
- c++中头文件iomanip是什么?
- 用户及其权限管理
- 你不知道的全文检索---solr概述
- 349. Intersection of Two Arrays
- F8App-ReactNative项目源码分析4-js篇