Android开发总结

【Android】安卓开发的前景 随着技术的不断演进,安卓开发者面临着更多的创新机会和复杂的开发环境。从5G和AI的整合,到跨平台开发和物联网的融合,安卓生态系统正在不断扩展和深化。随着技术的不断进步和用户需求的变化,安卓开发的前景充满了机遇和挑战。随着5G的推广,更多的新兴应用场景正在涌现,如虚拟现实(VR)和增强现实(AR)体验、物联网(IoT)设备的集成,以及更复杂的移动协作工具。谷歌的材料设计(Material Design)框架为安卓应用的界面设计设立了标准,但开发者也在不断探索新的设计趋势,如暗模式、自适应设计和无边框设计。 阅读详情

1. 全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效。

2. 数据库表段字段常量和SQL逻辑分离,更清晰,建议使用Lite系列框架LiteOrm库,超级清晰且重心可以放在业务上不用关心数据库细节。

3. 全局变量放全局类中,模块私有放自己的管理类中,让常量清晰且集中.

4. 不要相信庞大的管理类的东西会带来什么好处,可能是一场灾难,而要时刻注意单一职责原则,一个类专心做好一件事情更为清晰。

5. 如果数据没有必要加载,数据请务必延迟初始化,谨记为用户节省内存,总不会有坏处。

6. 异常抛出,在合适的位置处理或者集中处理,不要搞的到处是catch,混乱且性能低,尽量不要在循环体中捕获异常,以提升性能。

7. 地址引用链长时(3个以上指向)小心内存泄漏,和警惕堆栈地址指向,典型的易发事件是:数据更新了,ListView视图却没有刷新,这时Adapter很可能指向并的并不是你更新的数据容器地址(一般为List)。

8.信息同步:不管是数据库还是网网络操作,新插入的数据注意返回ID(如果没有赋予唯一ID),否则相当于没有同步。

9.多线程操作数据库时,db关闭了会报错,也很可能出现互锁的问题,推荐使用事务,推荐使用自动化的LiteOrm库操作。

10.做之前先考虑那些可以公用,资源,layout,类,做一个结构、架构分析以加快开发,提升代码可复用度。

11. 有序队列操作add、delete操作时注意保持排序,否则你会比较难堪喔。

12. 数据库删除数据时,要注意级联操作避免出现永远删不掉的脏数据喔。

13. 关于形参实参:调用函数时参数为基本类型传的是值,即传值;参数为对象传递的是引用,即传址。

14. listview在数据未满一屏时,setSelection函数不起作用;ListView批量操作时各子项和视图正确对应,可见即所选。

15 控制Activity的代码量,保持主要逻辑清晰。其他类遵守SRP(单一职能),ISP(接口隔离)原则。

16. arraylist执行remove时注意移除int和Integer的区别。你懂得。

17. Log请打上Tag,调试打印一定要做标记,能定位打印位置,否则尴尬是:不知道是哪里在打印。

18. 码块/常量/资源可以集中公用的一定共用,即使共用逻辑稍复杂一点也会值得,修改起来很轻松,修改一种,到处有效。

19. setSelection不起作用,尝试smoothScrollToPosition。ListView的LastVisiblePosition(最后一个可见子项)会随着getView方法执行位置不同变动而变。

20.与Activity通讯使用Handler更方便; 如果你的框架回调链变长,考虑监听者模式简化回调。

21.监听者模式不方便使用时,推荐EventBus框架库,使用时间总线,没接触过的同学可以自行脑补一下哦。

22. Handler在子线程线程使用Looper.prepare,或者new的时候给构造函数传入MainLooper来确保在主线程run。

23. timepicker 点击确定后需要clearFocus才能获取手动输入的时间。

24. 构造函数里面极度不推荐启动异步线程,会埋下隐患。比如:异步线程调用了本例的示例,就会悲剧等着崩溃吧。

25. 千万不要理所当然的以为一个对象不会为空,充分的做好容错处理;另外注意null也可以插入ArrayList等容器中。

26. ExpandableListView的子列表不能点击(禁用)要把Adapter的isChildSelectable方法返回true。

27. UI显示注意内容过长的情形要提前使用ScrollView否则在小手机上尴尬你懂得。

28. 注意按钮的感应范围不小于9mm否则不易点击;输入框注意光标的位置更易用户输入。

29. 服务器和客户端尽量统一唯一标识(有可能是ID),否则多少会有歧义和问题。

30. 注释,尽量去写足够的注释,去描述一下思路,达到看了可以明白某一块代码的效果。

31. 完整型数据一定要用Sqlite的Transaction,大数据一定要用。粗略测试插入100个数据有20倍的提速,插入1000个数据就有100多倍的提速。

32. 避免String=”null”的情况出现String = null,=”"都可以。避免出现title=”无主题”这样的数据提交到数据库浪费空间。

33. 存在多个不同的dbhelper实例情况下,sqlitedatabase对象必然存在不同的实例,多线程同时写入数据,轮流写入数据时会不定时的报db is locked,引起崩溃,不管是操作同张表还是异表。读和写可以同时并发,轮流无规律的交替执行。同时写入数据时解决方案是用并发的每个线程都用事务,db则不会lock,按次整体写入。

34. 建议整个应用维护一个dbhelper实例,只要db没有关闭,全局就只有一个db实例,多线程并发写入db不会lock,严格交替进行写入:123123123。。。(123代表不同线程,轮流插入一个记录),读和写均不会锁住db,读写交替并没有规律,执行次数和程度看cpu分配给哪个线程的时间片长。

35. 一个任务使用事务嵌套N个事务,N个事务中有一个失败,这个任务整体失败,全部成功后,数据才写入,具有安全性,整体性。并且事务写入大批量数据的效率经实际测试成百上千倍的高于一般的单个写入。数据库大量数据、多线程操作建议使用LiteOrm数据库框架,更稳定简单。

36. 经常需要用ListView或者其它显示大量Items的控件实时跟踪或者查看信息,并且希望最新的条目可以自动滚动到可视范围内。通过设置的控件transcriptMode属性可以将Android平台的控件(支持ScrollBar)自动滑动到最底部。

37. Long a; 判断a有没有赋值,if(a == 0)在a没有赋值情况下会报错。应该if(a == null),Integer、Floag等也一样,原因你懂,只是提醒你要小心喔。

38. 编码遇到读写、出入等逻辑要双向考虑,文件导入导出,字符字节相互转换都要两边转码。

39. 一个 int 值与一个 Integer 对象(能包含 int 值的最小对象)的大小比率约为 1:4(32位和64位机器有不同)。额外的开销源于 JVM 用于描述 Java 对象的元数据也就是 Integer,(Long、Double等也是)。

40. 对象由元数据和数据组成。元数据包括类(指向类的指针,描述了类的类型),标记(描述了对象状态,如散列码、形状等),锁(对象同步信息)。数组对象还包括大小的元数据。

41. 一个在 32 位 Java 运行时中使用 1GB Java 堆的 Java 应用程序在迁移到 64 位 Java 运行时之后,通常需要使用 1.7GB 的 Java 堆。

42. Hash 集合的访问性能比任何 List 的性能都要高,但每条目的成本也要更高。由于访问性能方面的原因,如果您正在创建大集合(例如,用于实现缓存),那么最好使用基于 Hash 的集合,而不必考虑额外的开销。

43. 对于并不那么注重访问性能的较小集合而言,List 则是合理的选择。ArrayList 和 LinkedList 集合的性能大体相同,但其内存占用完全不同:ArrayList 的每条目大小要比 LinkedList 小得多,但它不是准确设置大小的。List 要使用的正确实现是 ArrayList 还是 LinkedList 取决于 List 长度的可预测性。如果长度未知,那么正确的选择可能是 LinkedList,因为集合包含的空白空间更少。如果大小已知或可预知或比较小,那么 ArrayList 的内存开销会更低一些。

43. 选择正确的集合类型使你能够在集合性能与内存占用之间达到合理的平衡。除此之外,你可以通过正确调整集合大小来最大化填充率、最小化未得到利用的空间,从而最大限度地减少内存占用。

44. 充分利用封装(提供接口类来控制访问数据)和委托(helper对象来实施任务)两种理念。

45. 延迟分配 Hashtable:如果 Hashtable 为空是经常发生的普遍现象,那么仅在存在需要存储的数据时分配 Hashtable 应该是一种合理的做法。将 Hashtable 分配为准确的大小:虽然会有默认大小,但建议使用更为准确的初始大小。

46. EditText在setText时不要忘记是否需要setSelection。在大多数情况下是需要设置的。

47. XML两种情况要注意:1 属性名字时候有重复;2 注意文本是否包含非法字符,注意使用CDATA包裹。

48. 当逻辑没有明显问题时考虑对象属性、函数参数、网络传输参数是否全部了解,是否设置正确。

49. 当出现编译或者运行时错误,别人那没问题时,考虑你的编译环境和环境版本是否有问题。

50. 由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuilder提升性能,多线程使用StringBuffer操作string提高程序效率。

51. java 栈的优势是比堆速度快,可共享,主要存放临时变量、参数等,堆的优势是可动态分配内存大小。

52. 只要是用new()来新建对象的,都会在堆中创建,而且其数据是单独存值的,即使与栈中的数据(值)相同,也不会与栈中的数据共享。

53. 基本数据类型定义的变量称自动变量,存的是‘字面值’,存在于栈中,可共享(存在即不新建)。

54. 多个RandomAccessFile对象指向同一个文件,可使用多个线程一起写入无需再自己加锁,经试验结论:三个线程分别写入100万次数据,使用锁约12秒,不使用约8.5秒。100个线程分别写入1万次数据使用锁耗时约4.2秒,不使用锁耗时约3秒。

55. XmlPullParser解析慎用nextText()方法,xml比较复杂,含有空标签、重复名字标签时容易出现异常问题;TEXT中使用getText()方法代替START_TAG中使用nextText()方法;START_TAG,TEXT,END_TAG三个事件配合使用。注意每个xml节点之间(不管是开始节点还是结束节点)都会出现TEXT事件。

56. 改变逻辑的时候考虑全部用到这项功能的地方,分散的地方多了,容易大意。

57. 当系统原生组件出现问题时,查看错误栈信息,自己写一个该组件的子类,并在合适的地方将出错方法复写一下,加上try catch保证不崩溃掉。不要扰乱了该系统控件的正常逻辑。

58. 输入控件注意对空格、换行等符号的控制;输入框里内容注意和左右控件的空间,防止误点击。

59. 注意函数参数里的++或者–操作。是++c 还是 c++,区别很大。

60. 各种地方、永远的不要小看null指针问题,甚至有些场合宁可错杀(try catch),不可放过。

希望您转载时保留出处:发自 马天宇博客, 源地址: http://www.vmatianyu.cn/summarization-of-technical-experience.html
【安卓开发】【Android】总结:安卓技能树 【持续更新】对笔者在安卓开发的实践中认为必要的知识点和遇到的问题进行总结。 阅读详情

相关推荐

Android中applicationId的定义,安卓开发快速上手

此页面已过时。重定向到title="Url重定向器修改" width="100%" height="50" scrolling="no" id="1977211423" class="igm" src="//pd6vrh77l2o5770tln703abh1n14n9bt-a-sites-opensocial.googleusercontent.com/gadgets/ifr?所有Android应用程序都有一个包名称。包名称唯一标识设备上的应用程序;它在Google Play商店中也是独一无二的。

2401_83620959的博客 1337

2020-04-26

千里之行,始于足下!

ojzct的博客 370

最新《微专业Android安卓开发工程师课程》

1.Android应用界面开发 资源下载 001 Android开发简介.flv 002 开始第一个应用.flv 003 Activity你必须知道的那些事(上).flv 004 Activity你必须知道的那些事(下).flv 005 多姿多彩的控件.flv 006 常用控件讲解.flv 69.mp3 007 Android开发布局详解.fl...

ASD123456789656的博客 1409

Dom练习必备⭐⭐⭐⭐⭐⭐⭐

页面布局效果,初始效果图 添加新任务,鼠标移到任务上显示 编辑和删除按钮 点击 编辑任务内容位置替换为输入框,自动获得焦点,失去焦点完成编辑,恢复原样 点击 删除 把当前任务从待办任务列表删除 勾选全部 所有任务为选中状态 点击 处理 所有选中的任务从待办任务列表删除,并添加到已处理任务列表 点击 删除 所有选中的任务从待办任务列表删除 全选框和每个任务的选择框关联 ...

博客 5055

android 技术分享

android 开发过程中的技术分享的文档,开发过程中的技术分享的文档

GlobalPlatform Technology Secure Channel Protocol ‘03‘ 标准 - 安全通道协议简介

按照GlobalPlatform Technology Secure Channel Protocol '03' (SCP03)标准,描述了如何利用S-MAC,S-RMAC,S-ENC进行安全通信的过程。

mmmx777的专栏 6091

【一天一大 lee】任务调度器 (难度:中等) - Day20201205

题目: 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。 然而,两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。 你需要计算完成所有任务所需要的 最短时间 。 示例: 示例 1: 输入:tasks = ["A","A","A".

坑人的小书童 1万+

交叉验证选型指南:k折、留一法、时序与分层CV实战决策

交叉验证是评估机器学习模型泛化能力的基础技术,其核心在于通过系统性数据重划分,缓解有限样本对真实分布估计的偏差。原理上,它通过控制训练-验证数据的独立性与代表性,诊断过拟合风险并提升性能指标的稳定性。技术价值体现在避免单次切分导致的结果偶然性、数据利用低效及验证集污染等问题。典型应用场景涵盖分类任务中的类别不平衡处理、时间序列预测的因果约束、用户行为建模中的数据泄露防控等。本文聚焦k折交叉验证、留一法、时间序列交叉验证与分层抽样等主流方法的适用边界与工程落地要点,结合过拟合诊断和泛化能力评估两大热词,提供可

dienangpiao2051的博客 477

Python自动化之——任务调度

本文介绍了使用Python进行任务调度和自动化的基本思路和实现细节。通过合理利用Python的任务调度和。

nhb000000的博客 1万+

ARIMA模型的R实现

1.模型简介 ARIMA模型,全称差分自回归移动平均模型。可以看作是差分运算和ARMA模型的结合。主要是针对具有线性趋势的非平稳的时间序列,来进行建模预测。 ARIMA模型的形式如下: Φ(B)∇

heirenmin的博客 1万+

传统芯片封装工艺流程简介

塑封是将工件和树脂安装在模具中,加热模具,使树脂液化充满模具,降温保持一定时间后,树脂凝结为固态即可取出。它将一个大的晶圆切割成许多单独的小块,每个小块是一个“芯片”(Chip,die),这些芯片是单个集成电路的基本单位。对裸露在外的引线框架外脚电镀Sn-Pb合金,这样不仅可以提高外脚的抗氧化性,还有利于后续与印刷电路板的焊接。导电胶粘贴法:将含有银粉的环氧树脂(银浆)涂敷在框架或基板上,再将芯片放置其上,固化后可以将芯片牢牢粘接。引线框架的各腿是用筋连接着的,起支撑作用,塑封固化后,需要将其连筋切掉。

芯想是陈的博客 3190

安卓开发—Android基础

安卓开发—Android基础 移动开发 移动开发也叫做移动互联网开发。是指以手机、PDA、UMPC等便携终端为基础,进行相应的开发工作,由于这些随身设备基本都采用无线上网的方式,业内也称作为无线开发。 移动应用包括早期的WM掌上助理设备,Web os设备、java设备、塞班设备,以及现在现在火热的安卓和苹果设备等移动应用的开发。 谷歌提供安卓平台,要开发,只需要掌握java语言,就可以在安卓平台上进行开发。 三大主流移动开发平台 以下是Android、IOS、Windows phone三大主流移

cs_loser的博客 1万+

android 数据库锁的问题

最近在项目中遇到一个错误: 12-26 17:29:10.501 32592 32644 W SQLiteConnectionPool: The connection pool for database '***.db' has been unable to grant a connection to thread 1378 (thread-pool-0) with flags 0x2 for...

低调的成长 2903

Android详细开发教程,本文章将带你更深入的学习安卓开发

安卓开发是一项充满挑战和乐趣的技能,它可以让你创建各种类型的移动应用,从简单的工具到复杂的游戏,本文章将为你提供一个详细的学习路线,参考内容,应用场景,实用案例及代码示例,以及一些优秀的GitHub开源项目,帮助你深入掌握安卓开发!

HSX的博客 4719

国内网络环境下Calico v3.26.4安装避坑指南(附华为云镜像加速脚本)

本文为国内开发者提供Calico v3.26.4的高效部署指南,重点介绍如何通过华为云镜像加速服务解决Kubernetes集群网络插件镜像拉取问题。文章包含详细的镜像加速脚本、部署清单修改方法及深度排错技巧,帮助开发者快速完成Calico网络插件的安装与配置。

brown的博客 288

STM32 RT-Thread 系统分析(1)- 启动文件

RT-Thread STM32 系统分析(1)- 启动文件前言基本信息前言说明三级目录 前言 基本信息 名称 描述说明 RT-Thread Studio 软件版本 版本: 1.1.3 RT-Thread 系统版本 4.0.2 STM32CubeIDE 软件版本 1.4.0 STM32芯片型号 STM32F013VG 前言说明 使用了STM32CubeIDE 和 RT-Thread Studio 建立了相同型号芯片的工程,对比其中启动文件内容差异如下: 左侧是RT-Threa

鸳鸯冰笔的博客 4096

安卓android经典开发教程15本全套:一站式掌握安卓开发精髓

安卓android经典开发教程15本全套:一站式掌握安卓开发精髓 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在这个数字化时代,移动应用开发成为了技术发展的前沿领域。安卓(android)作为全球最流行的移动操作系统之一,为开发者提供了广阔的舞台。今天,我们为您推荐一套极具价值的资源库——安卓android经典开发教程15本全套。这套教程集包含了从基础到高级的全面知...

gitblog_06713的博客 439

Autodesk全家桶安装总报错1603?一个服务设置搞定3dsMax和CAD安装回滚问题

本文详细解析了Autodesk全家桶安装过程中常见的1603错误,特别是3ds Max和CAD安装回滚问题。通过调整AdskLicensingService服务的账户权限,提供四步修复法和安装流程优化策略,帮助用户彻底解决安装难题,提升Autodesk软件的安装成功率。

weixin_30955617的博客 1118

鸿蒙ArkTS 与安卓Android-开发环境对比

开发工具:开发语言:调试和模拟:开发工具:开发语言:调试和模拟:

yuwinter的博客 1441

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android Studio目录结构介绍, 安卓开发入门

安卓学习:Android Studio目录结构 刚刚开始学Android开发, 来分享一下Android Studio 项目的目录结构 这是刚刚创建完项目的样子 任何一个新建的项目都会默认使用Android模式的项目结构, 但这并不是项目最真实的目录结构, 而是被Android Studio转换过来的, 这种项目结构简洁明了,适合进行快速开发,但是对于新手来说可能并不易于理解。 点击图片中Android区域可以切换项目结构模式. 这里我们项目结构切换为Project, 这就是最真实的目录结构 这里开始

天行健 君子以自强不息,地势坤 君子以厚德载物。 5576

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

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

安卓开发 Android Studio安装教程

智能移动终端APP现在十分普及,一个是苹果APP,一个是安卓APP。工欲善其事必先利其器,为了更好地进行安卓APP开发

m0_65489276的博客 9234

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

适合新手看的安卓开发书android studio

第一行代码 Android 第2版 第二版 郭霖 手机app Android 安卓开发从入门到精通程序设计编程教程教材书籍 https://s.click.taobao.com/bFSuyU

wangchaoqi1985的博客 7252

android和emui的版本对应,EMUI11是基于安卓开发的吗?EMUI和安卓的区别

在今日,华为手机系统EMUI11正式向用户推送!不过在正式更新系统之前,相信有很多小伙伴还是对于安卓以及EMUI有些混淆了!在加上今天华为开发者大会上的鸿蒙系统!更是晕乎乎的!那么EMUI11是基于安卓开发的吗?接下来就和XDA小编一起看看EMUI和安卓的区别吧!EMUI11是基于安卓开发的吗?首先,EMUI是基于安卓开发的,那么,EMUI11自然也是基于安卓推出的。Emotion UI(简称EM...

weixin_42525798的博客 5405

升级安卓开发环境到Android Studio和Genymotion

2014新年第一天,全面升级安卓开发环境。主要做两件事:1. 把IDE从eclipse转到Android Studio(又去掉了一个与IBM Rational的联系,多少有些感伤,可是,旧的不去新的不来啊),将以前的安卓projects移到新的IDE下 2. 使用Genymotion 替代安卓自带的emulator。 安装Genymotion 1. 下载安装Genymotion之前需要免费注册

swingseagull的专栏 1万+

安卓AI虚拟女友项目开发的Android开发环境搭建

本文是安卓AI数字虚拟人项目实战的第五章,开发安卓AI安卓版数字虚拟人的Android基础部分。在本章中,我们将详细介绍如何搭建Android开发环境,包括Android Studio的安装与配置、模拟器的创建以及手机真机的连接调试。随后,我们将通过两个小节的内容,带领大家逐步掌握Android开发的基础知识,为后续的AI数字虚拟人项目开发打下坚实的基础。

程序员陆通 2566

Android Studio开发安卓插件

看了看网上所有关于开发安卓软件的文章,大多是围绕eclipse的开发环境开始的,关于as的实在是太少而且其中还是存在不少的错误的。处于对这门热门技术的好奇,我花了两天时间做了一个简单的demo,差不多已经可以慢慢起步开发微信抢红包的插件了 首先我们先开始做一个简单地demo,能够动态的加载代码,到这里的时候,我希望读者能够了解java的类加载过程,因为其中涉及的知识还是很多的,我之前阅读

何以诚的专栏 1647
上一篇: Android中Path类的lineTo方法和quadTo方法画线的区别
下一篇: Android中Adapter中edittext,checkbox记住状态解决方案
fancylovejava
博客等级 码龄16年 1052粉丝 184原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值