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性能优化

  • 2015年06月04日 18:56
  • 29KB
  • 下载

android性能优化之内存泄露

  • 2017年10月13日 15:31
  • 2.73MB
  • 下载

Android的性能优化

Android的性能优化写在前面: 公司给了我一周的时间去学习Android性能的优化,参考了张明云老师的一片文章,并且用公司的实际项目进行测试(附有截图),还进行了一些知识点,注意事项以及很多网址...
  • MeloDev
  • MeloDev
  • 2016年04月01日 17:58
  • 1761

android的一些性能优化

  • 2013年05月09日 16:08
  • 223KB
  • 下载

优化Android App性能十大技巧

  • 2015年07月02日 22:39
  • 315B
  • 下载

android 性能优化小技巧

好的性能离不开好的代码,这里不讲大的oo原则,只讲一些基本的小技巧。   1.尽量使用static    static 能够使 变量,方法 变为属于类的,访问时能够节省访问对象...
  • hudfang
  • hudfang
  • 2016年06月25日 20:34
  • 320

Android应用性能优化

  • 2015年03月05日 14:31
  • 3.41MB
  • 下载

Android ListView加载多item布局及性能优化

在开发过程中,遇到一些比较旧的项目,请求网络数据时,接口返回一长串的JSON字符串,其中包括各种不相关的数据。而我们又需要把这些数据一一对应写在同一个界面上,又需要分别展示在不同的布局上,这时候就需要...
  • donkor_
  • donkor_
  • 2016年11月17日 19:35
  • 1394

Android性能优化之内存泄露

  • 2017年11月01日 11:25
  • 2.7MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android性能优化之一
举报原因:
原因补充:

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