- 浏览: 97722 次
- 性别:
- 来自: 深圳
最新评论
-
xiaoxue033:
还是会崩溃
ListView异步加载网络图片之三 -
send1988:
对我这个新手来说受益匪浅,谢谢lz
ListView异步加载网络图片之三 -
pp83223828:
在Adapter中,运用了Static public stat ...
ListView异步加载网络图片之三 -
Kendra:
贊
ListView异步加载网络图片之双缓存技术 -
天若子:
给力。。。
ListView异步加载网络图片完美版之双缓存技术(续)
文章列表
ListView异步加载网络图片完美版之双缓存技术
本示例参考学习了一个国外的示例:http://code.google.com/p/android-imagedownloader/,有兴趣的同学下载研究一下。
问题描述:在这一篇博客中将会为大家讲解如何将下载回来的图片进行缓 ...
Android开发博客推荐
Android-Touch事件传递详解
Android内存泄漏分析实战
Handler-looper消息循环原理分析
LeakCanary让Android内存泄漏无处遁形
黑月神话的技术分享
Handler概述
Handler在Android开发中非常重要,最常见的使用场景就是在子线程需要更新UI,用Handler来投递消息到主线程执行UI更新操作。因为Android系统的View是非线程安全的,所以需要在主线程更新UI。总的来说Handler就是用来做线程间通信,在不同线程之间传递消息。注:这篇文章所讲到的Handler是在主线程创建的,主线程在开始的时候已经创建了默认的消息循环。后面的文章会讲如何创建自己的消息循环。
从图中可以看出,四种颜色分别代表了四个对象,并且大致描述了几个对象之间的关系,以及消息的流转过程,首先Handler通过sen ...
黑月神话的技术分享
在UIActionSheet中嵌入UIPickerView,美观漂亮。我自己的项目中也是这么用的,在IOS7.1之前都运行的非常完美,但是当系统升级到IOS8.1之后,运行出来的效果就非常的糟糕,ActionSheet不能够完全的显示出来内容。
下面是解决之前与解决之后的效果对比图
解决方案就是通过用UIView模拟UIActionSheet
以后我将逐步在我的个人博客中写文章,有兴趣的同学可以访问:http://vjson.com
我相信对于Android开发者来说,屏幕适配一直是你心中的痛~,为了让Android开发者从屏幕适配的痛苦中解脱出来,我决定实现这个Android自动化屏幕适配的1.0版本。下面来讲一下思路。
首先以values-w360作为标准也就是360dp,对应的设备就是720×1080俗称的720P的屏幕,也就是说设计师给的设计稿是以720P的屏幕作为设计图的,那么如果设计图上面的尺寸是100px,那么我们就需要用100/2 = 50dp得到我们的这个标准值,以此类推,将app中所有需要适 ...
ListView异步加载网络图片完美版之双缓存技术
问题描述:以前对ListView加载网络图片以及缓存机制进行了分析,本来自以为已经完美了,前段时间有朋友说还有问题,问题是AsyncTask中的线程池满了>128。以前控制线程数量的方法是在ListView处于Fling状态的时候不去启动下载线程,然而这样的做法没有从更本上控制线程的数量。
解决方案:今天我将通过生产者消费者模式+信号量来控制AsynTask的执行。
// 通过信号量控制同时执行的线程数
Semaphore mSemaphore = new Semaphore(50);
// 这里是任务的消费者,去任务队 ...
dialog样式的Activty
1、自定义样式,在values目录新建一个styles.xml文件,在里面添加自定义的dialog样式,主要:parent="android:style/Theme.Dialog"
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme:CustomDialog" parent="android:style/Theme.Dialog&q ...
ListView异步加载网络图片之完美解决方案
问题描述:上一篇文章中解决了一个图片显示混乱的bug,但是还遗留下来一个更严重的bug,那就是当我们猛地拖动列表的时候,会感觉非常的卡顿,并且继续不顾一切的拖动程序就会崩溃,看一下抛出的异常是RejectedExecutionException。
错误的原因:由于异步加载图片用的是AsyncTask(异步任务),AsyncTask的内容实现是采用的一个线程池,池子的的最大容量是128,然而连续的滚动ListView触发了getView的调用,在getView中又去创建并执行了异步任务,所以就会导致线程池满了,看一下AsyncTask的源码
...
ListView异步加载网络图片之二
上一篇文章中卖了一个关子,遗留下来两个bug,不知道有没有同学发现,或者已经解了,那么这一篇文章我将解决其中一个bug(呵呵继续卖。。。)
问题描述:当我们把列表向下滚动再向上滚动反复的操作,本来应该是iteye的logo和妮露(看死神的同学应该知道)交替显示的,但是悲剧却发生了,图片乱了。
问题产生的原因:由于listview中列表项的view是复用的,当后台返回图片,并执行onPostExecute方法中调用这一句mViewHolder.mImageView.setImageBitmap(result)的时候,他会影响到所有复用的item,而这个 ...
ListView异步加载网络图片之一
前面用了三篇文章来写有关ListView性能优化,这一个文章,将讲解从网络异步加载图片,然后显示到列表中。由于需要异步加载,所以这里会用到AsyncTask这个类。
AsyncTask:他是Android提供的一个异步任务组件,他会开启一个后台线程,最后将执行的结果返回到UI线程,并且不用我们去操纵thread和handler,非常的方便。
注意:在AndroidManifest.xml中添加网络访问的权限,新手很容易忘掉的。。。如果网络的权限都没有,神马都是浮云了
<uses-permission android:nam ...
ListView性能优化系列之三
上一节讲到了ListView中的垃圾回收站,用来管理回收view,这一节将继续学习源码,看看这个垃圾回收站到底是怎么用的,convertView是如何传递到adapter的getView方法的。
makeAndAddView:这个方法是在ListView里面,顾名思义,这个方法中有两个动词make和add,所以这个方法的作用是构造一个view并且将这个view加入到viewgroup的children list中去。
private View makeAndAddView(int position, int y, boolean flow,
...
ListView性能优化系列之二
上一节从应用层面给出了ListView性能优化的方法,这一节将从ListView源码中探寻真谛。
下集预告:这一小节讲垃圾回收站,下一个小节讲这个回收站具体是怎么用的,以及adapter中的getView方法是如何拿到回收站的内容的。
下面是ListView的继承关系
ListView继承自AbsListView,而在AbsListView中的RecycleBin就是上一节中View复用的关键。下面就对RecycleBin进行分析
RecycleBin
1、RecycleBin中的数据结构,这些数据结构就是在垃圾回收站堆放的一个个垃圾桶。
priva ...
ListView性能优化之一
不知不觉,都已经正式工作三个月了,这几天将工作中学习的知识进行一个小小的总结,ListView是android中一个非常常用的空间,下面就对ListView控件的性能优化做一点儿分享,由于内容相对有点儿多,我会分为几篇文章进行分享,希望对同学们有帮助,个人愚见,请保持怀疑的眼光阅读。
下集预告:这一小节从表面上讲了性能提高的方法,下一小节将从listview的源码中探寻convertView是如何被回收利用的
问题
当列表中有成千上万条记录的时候,如果每一条记录都去new 一个view的话,就会发生oom
解决问题:通过view的复用来解决这一问题,用户之 ...
最近做项目,需要用到带下划线的EditText,通过学习Android提供的示例Notepad,对其进行小小的改动,解决文字压线的问题,但是光标压线的问题没有解决,希望以后能够解决,效果和代码如下:
效果图:
代码:
public class UnderlineEditText extends EditText {
private static final String TAG = "UnderlineEditText";
private Paint mPaint;
private Rect mRect;
private float mult = 1 ...
package org.iSun.heisedeyueya;
public class BigIntegerMultiply {
public static void main(String args[]) {
String s1 = "51212126";
String s2 = "22434565";
System.out.println(51212126L * 22434565L);
bigIntegerMultiply(s1, s2);
}
public static void bigInteger ...