2019独角兽企业重金招聘Python工程师标准>>>

一.内存管理技巧

1.推介使用IntentService

7.直接用ArrayList 不用List

二.高性能编码技巧

静态方法属于类,既可以通过类引用也可以通过创建对象来引用,

静态方法和非静态方法 都存放在代码区,静态方法是类方法,不用创建对象,直接拿来就用,而非静态方法是对象方法,

需要创建对象,然后用对象去访问。

静态方法可以直接用类名点出来方法,而普通方法需要创建类的对象后才能调用!
静态的方法和变量会调用时在内存生成一个唯一的标示,你可以理解成在物理内存中给静态一个位子,
这样的话在调用的时候可以直接找到,而且会节省内存,但是如果你声明的静态过多的话那么每一个都会在内存有一个位子,
那么你就没有资源运行别的,会报内存溢出!
普通方法是由java的gc机制(垃圾回收机制)来控制,可能同一个对象或变量在使用的过程中,这个时间的在内存占了一个位子,
而上个时间的还没有从内存中删除,这样的话就可能有2个一样的在内存中,这个2个一样东西只是内容值一样,但是内存值不一样,
你可以用"=="和"equals"来查看(这个只适用对象和String类型).java的gc机制会根据运行时的内存状态来自动清除一些用不到变量或对象,
就算你手动调用gc也是一样的!

10.成员变量存在堆中 本地变量存在栈中,访问栈比访问堆快

三.布局性能优化_hierarchyviewer工具与重用布局,ViewStub

能用RelativeLayout布局优化比LinearLayout更好,优化

案例:

点击标题栏在点击标题栏

实现ViewStub隐藏与显示

大家写项目的时候肯定会有一些东西提前写好,但是不到一定条件是不想让它显示出来的,我们可能的做法就是让它 View . GONE 或 View .INVISIBLE 等到一定条件了在代码里面这设置 View .VISIBLE 虽然这样写起来也挺方便的,也符合逻辑,但是这个条件是八百年都不出一次,你这么写就有点大才小用了,因为你事先布局好的Inflate, 也就是说 也就是说仍然会创建对象,会被实例化,会被设置属性。也就是说,会耗费内存等资源。

推荐的做法是使用 android.view.ViewStub ,ViewStub是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件。可以为ViewStub指定一个布局,在Inflate布局的时候,只有ViewStub会被初始化,然后当ViewStub被设置为可见的时候,或是调用了ViewStub.inflate()的时候,ViewStub所向的布局就会被Inflate和实例化,然后ViewStub的布局属性都会传给它所指向的布局。这样,就可以使用ViewStub来方便的在运行时,要还是不要显示某个布局。

但ViewStub也不是万能的,下面总结下ViewStub能做的事儿和什么时候该用ViewStub,什么时候该用可见性的控制。

首先来说说ViewStub的一些特点:

1. ViewStub只能Inflate一次,之后ViewStub对象会被置为空。按句话说,某个被ViewStub指定的布局被Inflate后,就不会够再通过ViewStub来控制它了。

2. ViewStub只能用来Inflate一个布局文件,而不是某个具体的View,当然也可以把View写在某个布局文件中。

基于以上的特点,那么可以考虑使用ViewStub的情况有:

1. 在程序的运行期间,某个布局在Inflate后,就不会有变化,除非重新启动。

因为ViewStub只能Inflate一次,之后会被置空,所以无法指望后面接着使用ViewStub来控制布局。所以当需要在运行时不止一次的显示和隐藏某个布局,那么ViewStub是做不到的。这时就只能使用View的可见性来控制了。

2. 想要控制显示与隐藏的是一个布局文件,而非某个View。

因为设置给ViewStub的只能是某个布局文件的Id,所以无法让它来控制某个View。

所以,如果想要控制某个View(如Button或TextView)的显示与隐藏,或者想要在运行时不断的显示与隐藏某个布局或View,只能使用View的可见性来控制。

下面就说一个例子,这个例子是这样的,我们先用 ViewStub把xml布好,这显然不会被 Inflate,我们在代码让他显示出来,但是突然条件有不符合了,我必须把显示的东西还得把它隐藏掉,但是这个时候 ViewStub已经被销毁了,已经不能再用了,这个时候我们还得用GONE和VISIBLE来控制显示和隐藏。

title_bar.xml

<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="wrap_content"    android:background="@android:color/holo_blue_dark">

    <ImageView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/imageView"        android:src="@mipmap/ic_launcher" /></merge>

inc.xml

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

    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_weight="1"        android:id="@+id/button_back"        android:layout_alignParentTop="true"        android:text="返回" />

    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="完成"        android:id="@+id/button_ok"        android:layout_alignParentTop="true"        android:layout_alignParentRight="true"        android:layout_alignParentEnd="true" /></RelativeLayout>

item_layout2.xml

<?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">

    <TextView        android:layout_width="71dp"        android:layout_height="wrap_content"        android:text="New Text"        android:id="@+id/textView_title"        android:layout_gravity="center_horizontal"        android:layout_alignParentTop="true"        android:layout_toRightOf="@+id/imageView2"        android:layout_toEndOf="@+id/imageView2" />

    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/imageView2"        android:src="@mipmap/ic_launcher" />

    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="New Text"        android:id="@+id/textView_content"        android:layout_alignBottom="@+id/imageView2"        android:layout_toRightOf="@+id/imageView2"        android:layout_toEndOf="@+id/imageView2" />

</RelativeLayout>

activity_main.xml

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

    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="@android:color/holo_blue_dark"        android:orientation="vertical">

        <ViewStub            android:id="@+id/stub_import"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:inflatedId="@+id/stub_import"            android:layout="@layout/inc"

            />

        <include layout="@layout/title_bar"></include>    </LinearLayout>

    <ListView        android:id="@+id/listView"        android:layout_width="match_parent"        android:layout_height="wrap_content" /></LinearLayout>

MainActivity.java

package com.example.administrator.hierarchyviewer;

import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewStub;import android.widget.ImageView;import android.widget.ListView;import android.widget.SimpleAdapter;

import java.util.ArrayList;import java.util.HashMap;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{private ImageView imageView;    private ViewStub vs;    private boolean b=true;    private boolean a=true;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        imageView= (ImageView) findViewById(R.id.imageView);         vs=(ViewStub)findViewById(R.id.stub_import);        imageView.setOnClickListener(this);        ListView lv=(ListView)findViewById(R.id.listView);        ArrayList<HashMap<String,String>> list=new ArrayList<>();        for (int i=1;i<20;i++)        {            HashMap<String,String> map=new HashMap<>();            map.put("title","title-"+i);            map.put("content","content-"+i);            list.add(map);        }        SimpleAdapter simpleAdapter=new                SimpleAdapter(this, list,R.layout.item_layout2 ,new String[]{"title","content"},new int[]{R.id.textView_title,R.id.textView_content});        lv.setAdapter(simpleAdapter);    }

    @Override    public void onClick(View v) {        if (v.getId()==R.id.imageView)        {            //可见               // vs.setVisibility(View.VISIBLE);            //或者        //   View v=vs.inflate();            if(b){//条件符合 显示布局               vs.inflate();                b=false;            }else{                if(a){//条件不符合 这个viewStub已经回收了所以我们只能用GONE和VISIBLE                    vs.setVisibility(View.GONE);                    a=false;                }else{//条件符合                    vs.setVisibility(View.VISIBLE);                    a=true;                }

            }        }    }}

转载于:https://my.oschina.net/xiaofeiandroid/blog/659039

安卓学习-性能最佳实战相关推荐

  1. 《高楼的性能工程实战课》学习所推荐的知识点

    文章目录 <高楼的性能工程实战课>学习所推荐的知识点 一.操作系统类 <性能之颠:洞悉系统.企业与云计算> <深入理解LINUX内核(第3版)> <嵌入式Li ...

  2. 推荐学习-Linux性能优化实战

    学习交流加(可免费帮忙下载CSDN资源): 个人微信: liu1126137994 学习交流资源分享qq群1(已满): 962535112 学习交流资源分享qq群2: 780902027 推荐一个学习 ...

  3. Linux性能优化实战学习笔记:第四十六讲=====实战分析

    Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...

  4. 安卓学习专栏——实战项目酷欧天气(4)给天气页面加上背景图片

    步骤 系列文章 前言 实现效果 项目结构 1.获取必应每日一图 1.1修改修改activity_weather.xml 1.2修改WeatherActivity 2.背景图和状态栏效果修改 2.1修改 ...

  5. 安卓学习专栏——实战项目酷欧天气(2)遍历全国省市县数据

    步骤 系列文章 前言 1.实现效果 2.项目结构 util包 util包下新建HttpUtil util包下新建Utility 3.新建choose_area.xml布局 4.新建ChooseArea ...

  6. Linux性能优化实战学习笔记:第十讲==中断

    Linux性能优化实战学习笔记:第十讲 一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 ? 1 2 3 4 5 6 7 wget http://www.tcp ...

  7. linux性能优化实战学习笔记-(1)CPU性能分析工具与套路

    版权归Linux性能优化实战 作者倪鹏飞,本文主要是为学习.整理相关知识点,请勿用作商用,侵删. linux性能分析工具 下图来自:Brendan D. Gregg http://www.brenda ...

  8. 学习Linux性能优化实战-1

    文章目录 前言 平均负载 命令 进程调度 命令 相关文件 CPU使用率 perf 软中断 测试工具 前言 最近在极客时间上面发现了倪鹏飞老师的Linux性能优化实战,自己感觉讲得很好,有兴趣的朋友可以 ...

  9. 安卓学习文档收集汇总

    安卓学习文档收集汇总 https://www.jianshu.com/p/86aed183ce6c?utm_campaign=maleskine&utm_content=note&ut ...

最新文章

  1. 日期控件判断是否为空
  2. SAP MM MIGO Return Delivery 组合实现部分数量的Reversal
  3. checksum命令 linux_关于Linux操作系统的一些命令是什么?
  4. Javascript实现AES加密解密(ECB/CBC)
  5. 前端基础git(一)-git入门代码版本控制介绍
  6. 《UNIX网络编程卷1》第一例及问题
  7. 蓝桥杯 卡片换位(bfs)
  8. 用MyEclipse测试发送email时报java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
  9. Spring Framework 4.0 M1: WebSocket 支持
  10. summernote 字体名字不显示_觉得 Windows 10 显示字体不好看吗? 教你轻松更换成 Mac 字体版本。...
  11. 搭档之家:14天1.5万人民币!悉尼将征收入境隔离费
  12. c语言ab43错误的是,求助,AB+没法玩下去了,详情请看报错代码
  13. 【计算机视觉40例】案例14:指纹识别
  14. 初识智遥工作流软件——表单开发篇2
  15. 仿猫眼电影在线选座组件
  16. 词云图制作(wordcloud pyecharts)
  17. 鸿蒙os电脑界面,鸿蒙OS平板UI界面曝光:双Dock栏设计+超级终端互联功能
  18. 计算机二级C语言操作题怎么做?注意事项(难点易错点总结笔记)
  19. Oracle 踩坑记录
  20. 写作中的英文标点符号

热门文章

  1. 我的笔记本电脑有一个自带的摄像头 可是开机后在我的电脑里没有这个图标
  2. windows1064安装oracle,在Windows 10系统下安装Oracle 11g数据库
  3. python爬虫如何配置动态爬虫代理
  4. zabbix4.0添加mysql报警_部署监控三剑客 Zabbix4.0 监控以及告警机制
  5. php使用 js格式解析,php 无限级数据JSON格式及JS解析_PHP教程
  6. vue引用js文件的多种方式
  7. 快速解决mongodb出现id重复问题
  8. 对order by的理解
  9. 教你如何查看 Git 提交中发生了什么变化
  10. Firewalld共享上网及本地yum仓库搭建步骤