b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

listview的优化_安卓listview优化_android listview优化

电脑杂谈  发布时间:2017-04-06 16:19:30  来源:网络整理

android listview优化_安卓listview优化_listview的优化

listview的优化listview的优化

并且最好是静态内部类。静态内部类,不持有外部类的引用,避免内存泄露…

effective java中有提到过,static class的适用场景,主要作用是为了减少大量内部类都各自持有外部类引用带来的内存开销

非static内部类会持有外部类的引用,这样就会涉及到外部类的释放依赖内部类。如果内部类过多的引用外部类的话,这样很容易造成外部类得不到释放。

  在我的项目中,listview的每一个item都有一个图片和很多TextView,而且所有的TextView都要设置非系统的字体;Adapter使用的是ViewHolder优化,在getView中的代码已经很少了,但是还是卡;我的listview中的数据是一个对象的List,在对象里只存放了item需要展示的图片的资源ID,或者是图片的路径,需要通过一些操作才能获得图片,而这些操作其实是很耗时的;于是我将原来的对象进行了更改,将图片对象直接存放在item对应的对象中,然后再Adapter初始化的时候将这些对象初始化,虽然listview展示所需的时间稍微长了一点,但是结果是listview滑动流畅了很多;接着我又将从assets中获得字体TypeFace的操作放在了Adapter初始化的方法中,并且将字体通过静态的变量都存起来,然后再getView中只需为TextView设置一下taptface即可,不需要在从asset中获取字体所花费的时间;通过上面两步操作之后,我的listview一点都不卡了,十分流畅。

  listview的优化其实就是去找getView中的耗时操作,然后提取出来,要么使用异步的方式为item的布局设置数据,要是实在需要同步,就只能在Adapter初始化时将数据准备好,然后再getView中只需绑定一下就行。

listview的优化_android listview优化_安卓listview优化

  Java中,如果每当一个请求到达就创建一个新线程,开销是相当大的。在实际使用中,每个请求创建新线程的服务器在创建和销 毁线程上花费的时间和消耗的系统资源,甚至可能要比花在处理实际的用户请求的时间和资源要多得多。除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源。如果在一个JVM里创建太多的线程,可能会导致系统由于过度消耗内存或“切换过 度”而导致系统资源不足。为了防止资源不足,服务器应用程序 需要一些办法来限制任何给定时刻处理的请求数目,尽可能减少创建和销毁线程的次数,特别是一些资源耗费比较大的线程的创建和销毁,尽量利用已有对象来进行服务,这就是“池化资源”技术产生的原因。线程池主要用来解决线程生命周期开销问题和资源不足问题。通过对多个任务重用线程,线程创建的开销就被分摊到了多个任务上了,而且由于在请求到达时线程已经存在,所以消除了线程创建所带来的延迟。这样,就可以立即为请求服务,使应用程序响应更快。另外,通过适当地调整线程池中的线程数目可以防止出现资源不足的情况。所以,这里我们必须本地维持一个任务队列,将所有需要加载的图片放入队列中,每次只加载当前任务,随着列表的滑动,当前的View显示时,会将该任务置顶,优先加载。这样既能避免过多的线程占用大量资源,又可保证资源的合理使用。

  当程序加载图片的时候,图片的尺寸可能很大,但是在手机上显示的时候,实际在程序中显示的时候,imageview会将大图缩小显示,其实图片中很多细节不会显示出来。但是当我们使用BitmapFactory解析图片的时候,BitmapFactory会将完整的图片解析出来,按照图片的分辨率来创建内存,转换成Bitmap,会占用非常大的内存。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-39839-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 对外相继
      对外相继

      放银行只是缩点水

    热点图片
    拼命载入中...