Android安卓编码规范及性能优化

基于图像分割的LIDC-IDRI 数据集预处理之数据下载篇 近期接触到了一个关于图像分割实验项目,关于数据预处理部分在此予以记录,和大家分享。 阅读详情
一、Android编码规范

1.java代码中不出现中文,最多注释中可以出现中文
2.局部变量命名、静态成员变量命名
只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写
3.常量命名
只能包含字母和_,字母全部大写,单词之间用_隔开
4.layout中的id命名
命名模式为:view缩写_模块名称_view的逻辑名称
view的缩写详情如下
LayoutView:lv
RelativeView:rv
TextView:tv
ImageView:iv
ImageButton:im
Button:btn
5.activity中的view变量命名
命名模式为:逻辑名称+view缩写
建议:如果layout文件很复杂,建议将layout分成多个模块,每个模块定义一个moduleViewHolder,其成员变量包含所属view
6.strings.xml中的id命名
命名模式:activity名称_功能模块名称_逻辑名称/activity名称_逻辑名称/common_逻辑名称
strings.xml中,使用activity名称注释,将文件内容区分开来
7.drawable中的图片命名
命名模式:activity名称_逻辑名称/common_逻辑名称
7.styles.xml:将layout中不断重现的style提炼出通用的style通用组件,放到styles.xml中;
8.使用layer-list和selector
9.图片尽量分拆成多个可重用的图片
10.服务端可以实现的,就不要放在客户端
11.引用第三方库要慎重,避免应用大容量的第三方库,导致客户端包非常大
12.处理应用全局异常和错误,将错误以邮件的形式发送给服务端
13.图片的.9处理
14.使用静态变量方式实现界面间共享要慎重
15.Log(系统名称 模块名称 接口名称,详细描述)
16.单元测试(逻辑测试、界面测试)
17.不要重用父类的handler,对应一个类的handler也不应该让其子类用到,否则会导致message.what冲突
18.activity中在一个View.OnClickListener中处理所有的逻辑
19.strings.xml中使用%1$s实现字符串的通配
20.如果多个Activity中包含共同的UI处理,那么可以提炼一个 CommonActivity ,把通用部分叫由它来处理,其他activity只要继承它即可
21.使用button+ activitgroup 实现tab效果时,使用Button.setSelected(true),确保按钮处于选择状态,并使activitygroup的当前activity与该button对应
22.如果所开发的为通用组件,为避免冲突,将drawable/layout/menu/values目录下的文件名增加前缀
23.数据一定要效验,例如
字符型转数字型,如果转换失败一定要有缺省值;
服务端响应数据是否有效判断;
24.同一个客户端如果要放在不同的市场,而且要统计各个市场下载及使用数据时
针对不同的客户端打不同的包,唯一的区别是versionName,apk文件名为versionName.apk
在升级时,要将自己的versionCode和versionName一并传给服务端,如果需要升级,则下载versionName相对应的apk
关于是否要强制升级:
1).不管何种情况都强制升级
2).判断用户的版本和当前最新版本,如果兼容则强制升级,否则可选;
25.有的按钮要避免重复点击
二、Android性能优化
1.http用gzip压缩,设置连接超时时间和响应超时时间
http请求按照业务需求,分为是否可以缓存和不可缓存,那么在无网络的环境中,仍然通过缓存的httpresponse浏览部分数据,实现离线阅读。
2.listview 性能优化
1).复用convertView
在getItemView中,判断convertView是否为空,如果不为空,可复用。如果couvertview中的view需要添加listerner,代码一定要在if(convertView==null){}之外。
2).异步加载图片
item中如果包含有webimage,那么最好异步加载
3).快速滑动时不显示图片
当快速滑动列表时(SCROLL_STATE_FLING),item中的图片或获取需要消耗资源的view,可以不显示出来;而处于其他两种状态(SCROLL_STATE_IDLE 和SCROLL_STATE_TOUCH_SCROLL),则将那些view显示出来
4).BaseAdapter避免内存溢出
如果BaseAdapter的实体类有属性非常消耗内存,可以将保存到文件;为提高性能,可以进行缓存,并限制缓存大小。

3.使用线程池,分为核心线程池和普通线程池,下载图片等耗时任务放置在普通线程池,避免耗时任务阻塞线程池后,导致所有异步任务都必须等待
4.异步任务,分为核心任务和普通任务,只有核心任务中出现的系统级错误才会报错,异步任务的ui操作需要判断原activity是否处于激活状态
5.尽量避免static成员变量引用资源耗费过多的实例,比如Context
6.使用WeakReference代替强引用,弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用。
7.超级大胖子Bitmap
及时的销毁(Activity的onDestroy时将bitmap回收,在被UI组件使用后马上进行回收会抛RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap) 设置一定的采样率(有开发者提供的图片无需进行采样,对于有用户上传或第三方的大小不可控图片,可进行采样减少图片所占的内存),从服务端返回图片,建议同时反馈图片的size 巧妙的运用软引用 drawable对应resid的资源,bitmap对应其他资源 任何类型的图片,如果获取不到(例如文件不存在,或者读取文件时跑OutOfMemory异常),应该有对应的默认图片(默认图片放在在apk中,通过resid获取);
8.保证Cursor 占用的内存被及时的释放掉,而不是等待GC来处理。并且 Android明显是倾向于编 程者手动的将Cursor close掉
9.线程也是造成内存泄露的一个重要的源头。线程产生内存泄露的主要原因在于线程 生命周期的不可控
10.如果ImageView的图片是来自网络,进行异步加载
11.应用开发中自定义View的时候,交互部分,千万不要写成线程不断刷新界面显示,而是根据TouchListener事件主动触发界面的更新
12.Drawable
ui组件需要用到的图片是apk包自带的,那么一律用setImageResource或者setBackgroundResource,而不要根据resourceid
注意:get(getResources(), R.drawable.btn_achievement_normal)该方法通过resid转换为drawable,需要考虑回收的问题,如果drawable是对象私有对象,在对象销毁前是肯定不会释放内存的。
13.复用、回收Activity对象
临时的activity及时finish
主界面设置为singleTask
一般界面设置为singleTop
14.位置信息
获取用户的地理位置信息时,在需要获取数据的时候打开GPS,之后及时关闭掉
15.在onResume时设置该界面的电源管理,在onPause时取消设置


三、AndroidUI优化

1.layout组件化,尽量使用merge及include复用
2.使用styles,复用样式定义
3.软键盘的弹出控制,不要让其覆盖输入框
4.数字、字母和汉字混排占位问题:将数字和字母全角化。由于现在大多数情况下我们的输入都是半角,所以 字母和数字的占位无法确定,但是一旦全角化之后,数字、字母的占位就和一个汉字的占位相同了,这样就可以避免由于占位导致的排版问题。
5.英文文档排版:textview自动换行时要保持单词的完整性,解决方案是计算字符串长度,然后手动设定每一行显示多少个字母并加上‘\n‘
6.复杂布局使用RelativeLayout
7.自适应屏幕,使用dp替代pix
8.使用android:layout_weight或者TableLayout制作等分布局
9.使用animation-list制作动画效果
UFS软件分区介绍 本文主要介绍了ufs软件分区管理的概况,能够使大家对软件分区有个大体的认识 阅读详情

相关推荐

Zemax单模光纤耦合仿真避坑指南:数值孔径、模式匹配与镀膜影响详解

本文详细解析了Zemax单模光纤耦合仿真中的关键避坑要点,包括数值孔径的多重定义与换算、模式匹配度评估及镀膜影响分析。通过实际案例和技术公式,帮助工程师避免常见仿真误差,提升激光通信和光纤传感系统的设计精度。特别针对OpticStudio用户提供了实用的参数设置建议和优化策略。

weixin_30836759的博客 465

Android最佳性能实践(三)——高性能编码优化

在前两篇文章当中,我们主要学习了Android内存方面的相关知识,包括如何合理地使用内存,以及当发生内存泄露时如何定位出问题的原因。那么关于内存的知识就讨论到这里,今天开始我们将学习一些性能编码优化的技巧。 避免创建不必要的对象 创建对象从来都不应该是一件随意的事情,因为创建一个对象就意味着垃圾回收器需要回收一个对象,而这两步操作都是需要消耗时间的。虽说创建一个对象的代价确实非常小,并且Android 2.3版本当中又增加了并发垃圾回收器机制,这让GC操作时的停顿时间也变得难以察觉,但是这些理由都不足以让我

郭霖的专栏 6万+

解密m3u8视频合并:从猫抓插件到本地文件修改全流程

本文详细解析了m3u8视频合并的全流程,特别针对加密视频片段提供了解决方案。从使用猫抓插件捕获m3u8文件地址,到利用N_m3u8DL-CLI工具自动下载、解密并合并ts片段,手把手教你处理AES-128加密等常见问题,最终生成完整的本地MP4文件,适合需要备份或处理流媒体资源的用户。

weixin_29290947的博客 1362

Android高性能编码 - 第七篇 Efficient Java与Android Lint

7.1 Efficient Java中的性能要点Effective Java是一本被广泛认可的著作,它指明了在写Java代码时兼顾可维护性与效率的方式。Android也是使用Java来开发的,书中的部分建议可能不适用,因为并非所有Java特性都有针对Android优化(比如说枚举,序列化等等),或者是因为移动设备的局限(例如Dalvik/ART)。不管怎样,书中的大部分规范是稍微修改下甚至不修改就...

BlueYangDroid的专栏 333

星链V3的2048条波束与1Tbps:多波束相控阵的工程代价

低轨卫星通信的容量提升,核心在于多波束相控阵天线的空间复用能力。相控阵通过控制大量天线单元的相位,可在同一阵面同时形成多条独立指向的波束,从而在有限频谱内成倍提升系统容量。星链V3宣称的2048条波束与1 Tbps汇聚吞吐量,正是基于这一原理:更多波束意味着更高的频率复用系数和更灵活的资源调度。但工程实现并非免费午餐,数字背后是供电、散热、重量、发射成本及运维复杂度的急剧攀升。从用户侧看,更精细的波束也带来切换频繁、低仰角衰减等新挑战。本文从多波束相控阵的基础原理出发,拆解波束形成、频谱复用和动态调度的工程

weixin_33462167的博客 347

广工计组实验f2一位全加器

一位全加器实验

weixin_63692154的博客 2847

Android高性能编码优化

转载于: http://blog.youkuaiyun.com/guolin_blog/article/details/42318689 避免创建不必要的对象 创建对象从来都不应该是一件随意的事情,因为创建一个对象就意味着垃圾回收器需要回收一个对象,而这两步操作都是需要消耗时间的。虽说创建一个对象的代价确实非常小,并且Android 2.3版本当中又增加了并发垃圾回收器机制,这让GC操作时的停顿时间也

ZY_RainBow的博客 317

set_data_check专题[使用,report_timing,setup/hold检查]

set_data_check用于约束『数据-对-数据』的『建立保持』时间检查,通常被称为非时序约束 ( non-sequential constraints ), 理论上set_data_check 可以设在任意的两个data pin 上,其中一个pin 称为 constrained pin 类似于寄存器的data pin, 另一个pin 称为related pin 类似于寄存器的clock pin.

cy413026的博客 1万+

Android Studio自动检查代码规范并提示如何优化的一些插件

推荐几个项目可能用到的插件 1.CheckStyle 首先进入设置页面进入Plugin页面,如图所示 点击Browse repositories进入选择页面,输入checkstyle即可选择安装,如图所示 安装完成后点击Other Settings中的checkstyle进入选择文件页面,点击右上方的“+”选择你自己的checkstyle文件并应用即可。

zhou_wenchong的博客 8603

王珊数据库系统概论第5版视频教材

目录 隐藏 说明:本课程共包括1种电子书、84个高清视频(共68课时)、1种纸质书(赠品)。 网授课程 王珊《数据库系统概论》(第5版)网授精讲班【共68课时】 序号 名称 课时 1 第1章 绪 论(1) 00:32:25 2 第1章 绪 论(2) 00:17:03 3 第1章 绪 论(3) 00:50:19 4 第1章 绪 论(4) 00:20:37 5 第1章 绪 论(5) 00:24:47 6 第2章 关系数据库(1) 00:47:23 7 第2章 关系数据库(2) 00:14:48 8 第2章 关系

mrtaoy96的博客 1147

【用unity实现100个游戏之10】复刻经典俄罗斯方块游戏(附项目源码)

当今游戏产业中,经典游戏的复刻一直是一项受欢迎且具有挑战性的任务。俄罗斯方块是一个深入人心、令人上瘾的经典游戏,在过去几十年里一直享有广泛的流行度。其简单而富有策略性的玩法吸引了无数玩家的关注。因此,我决定利用Unity引擎来复刻这款经典游戏,以让更多的人重新体验其中的乐趣。通过使用Unity引擎,我能够利用其强大的工具和功能,从头开始构建一个与原版俄罗斯方块游戏相似的游戏。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2796

Android编码规范及性能优化整理

最近看到新人的android代码实在问题太多,一些基本的地方都有问题,于是重新培训了下代码规范,希望后面能慢慢好起来。 一、Android编码规范 1.java代码中不出现中文,最多注释中可以出现中文 2.局部变量命名、静态成员变量命名只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写 3.常量命名只能包含字母和_,字母全部大写,单词之间用_隔开

西涛offbye-移动全栈技术博客 1534

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android开发编码规范、性能优化、UI优化及开发建议

一、Android编码规范   1.java代码中不出现中文,最多注释中可以出现中文;   2.局部变量命名、静态成员变量命名:只能包含字母,单词首字母出第一个都为大写,其他字母都为小写;   3.常量命名:只能包含字母和_,字母全部大写,单词之间用_隔开;   4.layout中的id命名:命名模式为:view缩写_模块名称_view的逻辑名称   view的缩写详情如下   Lin

西安尚学堂java培训 469

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android开发规范--编码规范/性能优化/UI优化

本文作者从Android编码规范、Android性能优化、Android UI优化这三个方面讲述了Android开发规范,Android开发者应该好好阅读这篇文章。 一、Android编码规范 1.java代码中不出现中文,最多注释中可以出现中文 2.局部变量命名、静态成员变量命名 只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写 3.常量命名 只能包含字母和_,字母

System Architect 966

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android性能优化编码规范

写出高效的代码有两条基本的原则: l  不作没有必要的工作。 l  尽量避免内存分配。     1.避免创建不必要的对象 对象创建永远不会是免费的。每个线程的分代GC给零时对象分配一个地址池以降低分配开销,但往往内存分配比不分配需要的代价大。 如果在用户界面周期内分配对象,就会强制一个周期性的垃圾回收,给用户体验增加小小的停顿间隙。Gingerbread中提到的并发回收也许有用,但不

我们很欢乐 1万+

Android编码规范

刚实习找工作那会儿是很困难的,基本上投出去的简历都是石沉大海,因为没有实际的项目开发经验、没有牛逼的背景、更重要的是没有真才实学,尽管我大学期间读的是计算机专业,也算是科班出身,可是……你懂的。后来勉强一家公司收留了我,然后一个问题立马出现在我的面前,那就是编写代码时候变量的命名:TextView ,ListView ……几乎是每一个.java or .xml 文件中命名的格式都不一样。其实,自己在

ZhangGeng's Blog 3784

【IVI】车载VHAL属性配置与区域管理详解

在Android Automotive OS中,VHAL(Vehicle Hardware Abstraction Layer)扮演着车辆硬件与软件系统间的桥梁角色。简单来说,它就像一位精通多国语言的翻译官,把车窗升降、空调调节等硬件操作转换成Android系统能理解的标准化指令。**属性(Property)**是VHAL的核心抽象单元,每个属性都代表一个具体的车辆功能状态。比如:0x00000201 表示左前车窗位置0x00400111 对应驾驶座温度调节。

weixin_34274029的博客 883

Android编程规范与常用技巧

转至http://stormzhang.com/android/2013/07/21/android-coding-standards/ 一、Android编码规范 1.java代码中不出现中文,最多注释中可以出现中文 2.局部变量命名、静态成员变量命名 只能包含字母,单词首字...

126

Android开发规范之编码规范2

Android开发规范之编码规范2 1,java代码中不出现中文,最多注释中可以出现中文,中文统一写在strings.xml中; 2,局部变量命名、静态成员变量命名 只能包含字母,单词首字母大写,其他字母都为小写 3,常量命名只能包含字母和_,字母全部大写,单词之间用_隔开 4,布局文件中的id命名 命名模式为:view缩写_模块名称_view的逻辑名称 常用控件的缩写如下 LayoutView:...

wdx_1136346879的博客 220

安卓开发规范(仅限自己收藏)

Android开发规范是本文要介绍的内容,主要是来了解并学习Android开发中一些细节的内容,具体关于Android开发规范内容的详解来看本文。 一、Android开发编码规范 1、java代码中不出现中文,最多注释中可以出现中文 2、局部变量命名、静态成员变量命名 只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写 3、常量命名 只能包含字母和,字母全部大写,单词之间用...

AHAI1078766113的博客 338

安卓开发规范

Android开发规范是本文要介绍的内容,主要是来了解并学习Android开发中一些细节的内容,具体关于Android开发规范内容的详解来看本文。 一、Android开发编码规范 1、java代码中不出现中文,最多注释中可以出现中文 2、局部变量命名、静态成员变量命名 只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写 3、常量命名 只能包含字母和_,字母全部大写,单词之间

beibeixiaonvwu的专栏 675
上一篇: android应用卸载提示(实用推荐)
下一篇: Android权限代码大全
thisiscx
博客等级 码龄26年 5粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值