再次探讨Android开发值得注意的规范

2024-06-15 10:58

本文主要是介绍再次探讨Android开发值得注意的规范,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇博客,我已经谈及一些有关Android开发值得注意的规范。在此基础上,来扩展探讨其他容易引发不规范编程的细节问题。

一、线程同步问题

很多时候,都需要开多个线程并发工作。但是,如果使用共享变量来实现线程之间通信,可能两个甚至多个线程同时访问某个变量,导致变量混乱引发死锁。为了实现线程同步,变量采用synchronized关键字作为同步锁。

用法如下-->

private Timer timer = null;
private void cancelNotification() {if (timer != null) {synchronized (timer) {...}}
}

二、捕获异常问题

执行一个方法可能会抛出多个异常,那么需要同时捕获这些异常并进行适当处理。这时会出现多个catch并行书写,显得不够简洁,可以把多个Exception采用或表达式写在一起。另外,catch里面最好进行恰当处理,比如使用log打印日志以便排查问题。最后,加上finally进行处理。

用法如下-->

try {...
} catch (OutOfMemoryError | Exceptio e){Log.e("mError",e.toString());
}finally{...
}
   三、全局与局部
   我清晰地记得C语言老师多次强调:能够使用局部变量(private)就不要使用全局变量(public),尽量减少使用全局变量。同理,能够使用私有方法,就不要写成公有方法。能够写成本地变量,就没必要写成成员变量。
    四、if表达式
    if表达式用于条件语句判断,有时候可以简化,有时候没必要if{}与else{}成对出现。
情景1:
if表达式简化前-->
if (account.isExist()) {return false;}return true;
简化后-->
 return !account.isExist;
情景2:
if与else成对出现-->
if(a == null){return;
}else {...
}
只需要if判断-->
if(a != null){...
}
五、布尔表达式
    众所周知,布尔表达式只有两个状态true和false,有时候return boolean值与结合if条件语句来写,可以直接使用布尔表达式更加简洁些。
情景1:
boolean值与if语句结合-->
if(a > b){return true;
}else {return false;
}
直接使用布尔表达式-->
return a > b;

情景2:
布尔变量与true/false比较-->
if(a == true){...
}
直接使用布尔变量本身-->
if(a){...
}

六、"HardCode"引用
    android studio很有意思,使用自带的lint静态代码检查时,可以检测出固定或指定(HardCode)代码片段引用,并且给出对应解决方法。
例如获取sd卡路径-->
public final static String DATA_URL = "/data/data/";
恰当用法-->
public final static String DATA_URL = Context.getFileDir().getPath();
    七、线性布局的权重

线性布局提供权重(weight)分配,如果在使用weight属性的情况下,高度或者宽度使用0dp代替wrap_content或者match_parent,性能会相对好些。
weight与wrap_content结合使用-->
android:layout_height="wrap_content"
android:layout_weight="1"
weight与0dp结合使用-->
android:layout_height="0dp"
android:layout_weight="1"

八、cursor对象
需要从数据库查询数据时,通常是利用cursor对象进行数据查询。但是很多时候,cursor使用完毕忘记关闭它。此时,静态代码检测后会抛出missing recycle()calls这样提示。那么,我们需要调用close()方法释放cursor。
    九、注意view的重绘
在xml布局里面,我们往往会利用background属性自定义背景色。此时静态代码检测后会提示"OverDraw:Painting regoins more than one"。事实上,我们已经在AndroidManifest.xml文件配置过activity窗体布局的背景色。android:theme="@android:style/Theme.Light.NoTitleBar"。现在呢,在xml父布局又自定义背景色。android:background="@color/white"。这样就造成了view的重绘,影响app的性能。
最后,我想说的是,本人编程初期也不注重开发规范。以上是我个人对开发规范的一些总结,如有错漏希望大家及时指出共同进步。我写下这篇博客初衷是,让自己更加注重开发规范,养成编写规范代码的习惯,以此自勉。同时,也共勉徘徊在不规范大门的同行,开发规范牢记于心,从细节做起,从现在做起。



这篇关于再次探讨Android开发值得注意的规范的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063256

相关文章

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件