Android性能优化之一

原创 2016年08月30日 09:38:34

注意:文章内容来自不同文章 ,如有侵权请及时告知

Android性能优化之一:ViewStub 使用及使用场景

ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View。虽然Android开发人员基本上都听说过,但是真正用的可能不多。ViewStub可以理解成一个非常轻量级的View,与其他的控件一样,有着自己的属性及特定的方法。当ViewStub使用在布局文件中时,当程序inflate布局文件时,ViewStub本身也会被解析,且占据内存控件,但是与其他控件相比,主要区别体现在以下几点:

  • 1.当布局文件inflate时,ViewStub控件虽然也占据内存,但是相相比于其他控件,ViewStub所占内存很小。

  • 2.布局文件inflate时,ViewStub主要是作为一个“占位符”的性质,放置于view tree中,且ViewStub本身是不可见的。ViewStub中有一个layout属性,指向ViewStub本身可能被替换掉的布局文件,在一定时机时,通过viewStub.inflate()完成此过程。

  • 3.ViewStub本身是不可见的,对ViewStubsetVisibility(..)与其他控件不一样,ViewStub的setVisibility 成View.VISIBLE或INVISIBLE如果是首次使用,都会自动inflate其指向的布局文件,并替换ViewStub本身,再次使用则是相当于对其指向的布局文件设置可见性。

简单的需求场景:

在listview显示列表数据时,可能会出现服务端一条数据都没有的情况,此时显示一个EmptyView,提示用户暂无数据。此时考虑到实际应用中EmptyView显示出来的机会相当小,因此,可以在布局文件中使用ViewStub站位,然后确实没有数据时才viewStub.infalte()。

部分代码展示

1 public void showEmptyView() {
 2     listview.setVisibility(View.GONE);
 3     if (noDataView == null) {
 4         ViewStub noDataViewStub = (ViewStub) view.findViewById(R.id.no_data_viewstub);
 5         noDataView = noDataViewStub.inflate();
 6     } else {
 7         noDataView.setVisibility(View.VISIBLE);
 8     }
 9 }
10 
11 public void showListView(){
12     listview.setVisibility(View.VISIBLE);
13     if(noDataView != null){
14         noDataView.setVisibility(View.GONE);
15     }
16 }

使用场景

  • 1.对不同的部分都写出来,放到一个item文件中,然后逻辑分别处理不同部分的显示与否(View.VIS

  • 2.对这两种不同的item整个部分都分别区分开,完全写成两个item文件,然后结合listView显示不同布局分别做逻辑处理(通过getItemType()等方式)。

    以上两种处理方式其实都可以,第一种方式逻辑清晰,非常灵活,只是在一定程度上增加了内存和资源消耗。第二种方式是的布局文件有重复(虽然相同部分可以通过include,但是逻辑上还是有重复的),包括逻辑上处理的代码实质上的重复。一般对于有较大不同的item布局推荐采用此种方式。


Android性能优化之二: include 使用及使用场景

include标签可以允许在一个布局当中引入另外一个布局,那么比如说我们程序的所有界面都有一个公共的部分,这个时候最好的做法就是将这个公共的部分提取到一个独立的布局文件当中,然后在每个界面的布局文件当中来引用这个公共的布局。

简单的需求场景

目前几乎所有的软件都会有一个头布局,头布局中可以包含界面的标题、返回按钮、以及其它一些操作功能等,很多界面都需要一样头布局,显然我们不可能在每个界面当中都去写一遍这个头布局的代码,因此这种情况下使用include标签就非常合适了。

部分代码展示

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:text="Back" />

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Title"
        android:textSize="20sp" />

    <Button
        android:id="@+id/done"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:text="Done" />

</RelativeLayout>

在需要头布局中引入

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:orientation="vertical" >  

    <include
    android:layout_width="match_parent"  
    android:layout_height="wrap_content"  
    layout="@layout/titlebar" />  

    ......  

注意事项

  • include标签当中,可以覆写所有layout属性的,即include中指定的layout属性将会覆盖掉引入文件中指定的layout属性
    覆写属性之前 必须 先 覆写layout_height和layout_width,如果include不进行任何的覆写将会使用引入文件中的layout属性

Android性能优化之三:merge 使用及使用场景

merge标签是作为标签的一种辅助扩展来使用的,它的主要作用是为了防止在引用布局文件时产生多余的布局嵌套

Android性能优化之一:ViewStub

Android性能优化之一:ViewStub
  • wangweijun125455
  • wangweijun125455
  • 2015年07月31日 11:23
  • 184

Android性能优化之一 布局优化

本文为Android性能优化——布局优化,主要介绍使用抽象布局标签(include, viewstub, merge)、去除不必要的嵌套和View节点、减少不必要的infalte及其他Layout方面...
  • miss_dongangel
  • miss_dongangel
  • 2016年04月09日 21:55
  • 2139

Android性能优化典范 - 第6季

涉及的内容主要有:程序启动时间相关的三个方面:activity的创建过程,臃肿的application启动对象,主题启动显屏。另外还介绍了减少安装包大小的checklist以及如何使用VectorDr...
  • axi295309066
  • axi295309066
  • 2016年09月25日 10:09
  • 1279

Android性能优化常用方法

本篇博客主要介绍关于性能优化的一些方法,以及性能分析工具的使用。     一 性能优化的常用方法 主要内容包括布局优化,绘制优化,内存泄露优化,相应速度优化,ListView优化,Bitmap...
  • Tyssen
  • Tyssen
  • 2016年01月23日 14:28
  • 1488

Android开发性能优化总结(一)

安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户。 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流。...
  • gs12software
  • gs12software
  • 2016年04月17日 16:04
  • 20531

Android性能优化的总结之一

说到性能优化主要以Android的渲染机制、UI优化、多线程的处理、缓存处理、电量优化以及代码规范等几方面来进行性能优化,其实还要一种优化,虽然没有直接的对这些性能进行优化,但是确起到巨大作用的。 ...
  • zhuod
  • zhuod
  • 2016年11月16日 17:00
  • 175

性能优化之一

前言 性能检测与分析,一直在 APP 开发中相当重要,但又被我们常常忽略。很多 APP 或者开发者总是急功近利,总想着快速充实 APP 的相关功能,把开发进度放在首位没有问题,可很多时候就没有然后了...
  • weixin_35791555
  • weixin_35791555
  • 2017年09月16日 22:14
  • 87

Android性能优化系列之布局优化

在Android开发中,UI布局可以说是每个App使用频率很高的,随着UI越来越多,布局的重复性、复杂度也会随之增长,这样使得UI布局的优化,显得至关重要,UI布局不慎,就会引起过度绘制,从而造成UI...
  • u012124438
  • u012124438
  • 2017年01月15日 22:20
  • 7378

android 性能优化详解

非常好的一篇内存优化文章: 文章来源:https://www.cnblogs.com/xinmengwuheng/p/7232429.html 这一篇中我们将着重介绍Android的内存优化...
  • zhuxingchong
  • zhuxingchong
  • 2017年12月29日 17:07
  • 133

谷歌官方制作的 android性能优化典范 视频,我下载下来了并做了分享,希望更多人受益吧。

谷歌官方制作的 android性能优化典范 视频,我下载下来了并做了分享,希望更多人受益吧。 http://pan.baidu.com/s/1pJFTjmV...
  • yacoo_tight
  • yacoo_tight
  • 2015年04月09日 10:49
  • 431
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android性能优化之一
举报原因:
原因补充:

(最多只允许输入30个字)