Advertisement

60条Android开发实践总结。

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
Android开发注意事项与经验总结在Android App开发过程中,我们总结了60条技术经验注意事项,以下是详细的知识点总结:1. 统一风格和处理公共事件:使用BaseActivity来继承所有Activity,构建对话框统一构建器,方便统一风格和处理公共事件。2. 数据库表段字段常量和SQL逻辑分离:使用Lite系列框架LiteOrm库,数据库表段字段常量和SQL逻辑分离,清晰且重心可以放在业务上不用关心数据库细节。3. 全局变量管理:将全局变量放全局类中,模块私有放自己的管理类中,常量清晰且集中。4. 单一职责原则:不要相信庞大的管理类的东西会带来什么好处,可能是一场灾难,而要时刻注意单一职责原则,一个类专心做好一件事情更为清晰。5. 延迟初始化:如果数据没有必要加载,数据请务必延迟初始化,谨记为用户节省内存,总不会有坏处。6. 异常处理:异常抛出,在合适的位置处理或者集中处理,不要搞的到处是catch,混乱且性能低,尽量不要在循环体中捕获异常,以提升性能。7. 内存泄漏注意:地址引用链长时小心内存泄漏,和警惕堆栈地址指向,典型的易发事件是:数据更新了,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操作:arraylist执行remove时注意移除int和Integer的区别。17. Log打印:Log请打上Tag,调试打印一定要做标记,能定位打印位置,否则尴尬是:不知道是哪里在打印。18. 代码复用:码块/常量/资源可以集中公用,一定共用,即使共用逻辑稍复杂一点也会值得,修改起来很轻松,修改一种,到处有效。19. ListView操作:setSelection不起作用,尝试smoothScrollToPosition。ListView的LastVisiblePosition(最后一个可见子项)会随着getView方法执行位置不同变动而变。20. 通讯机制:与Activity通讯使用Handler更方便; 如果你的框架回调链变长,考虑监听者模式简化回调。21. 监听者模式:监听者模式不方便使用时,推荐EventBus框架库,使用时间总线,没接触过的同学可以自行脑补一下哦。22. Handler使用:Handler在子线程线程使用Looper.prepare,或者new的时候给构造函数传入MainLooper来确保在主线程run。23. TimePicker操作:timepicker 点击确定后需要clearFocus才能获取手动输入的时间。24. 构造函数极度不推荐:启动异步线程,会埋下隐患。比如:异步线程调用了本例的示例,就会悲剧等着崩溃吧。25. 容错处理:千万不要理所当然的以为一个对象不会为空,充分的做好容错处理;另外注意null也可以插入ArrayList等容器中。26. ExpandableListView操作:ExpandableListView的子列表不能点击(禁用)要把Adapter的isChildSelectable方法返回true。27. UI显示:UI显示注意内容过长的情形要提前使用ScrollView否则在小手机上尴尬你懂得。28. 按钮和输入框设计:注意按钮的感应范围不小于9mm否则不易点击;输入框注意光标的位置更易用户输入。29. 服务器和客户端标识:服务器和客户端尽量统一唯一标识(有可能是ID),否则多少会有歧义和问题。30. 注释:注释,尽量去写足够的注释,去描述一下思路,达到看了可以明白某一块代码的效果。31. 数据库优化:完整型数据一定要用Sqlite的Transaction,大数据一定要用。粗略测试插入100个数据有20倍的提速,插入1000个数据就有100多倍的提速。32. 字符串处理:避免String=”null”的情况出现String = null,=””都可以。避免出现title=”无主题”这样的数据提交到数据库浪费空间。33. 数据库操作:存在多个不同的dbhelper实例情况下,sqlitedatabase对象必然存在不同的。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • Android60注意点和经验汇
    优质
    本指南汇集了针对Android应用开发者的重要提示与实战技巧,包含界面设计、性能优化及兼容性等关键领域的60项注意事项和实用建议。 在Android应用开发过程中总结了以下60条技术经验和注意事项: 1. 统一风格与处理公共事件:使用BaseActivity继承所有Activity,并构建统一对话框构造器以确保样式一致及简化公共事件的管理。 2. 数据库字段常量和SQL逻辑分离:采用Lite系列框架中的LiteOrm库,将数据库表段字段常量与SQL操作代码分开设计,使业务重点更加清晰且无需关注底层细节。 3. 全局变量管理:全局变量应放置于专门的全局类中,并针对每个模块设立独立的管理类来存储其私有数据。这样可以保证常量易于识别和集中化处理。 4. 单一职责原则的应用:避免创建臃肿的功能性类,这可能会导致混乱并降低代码质量;相反地,应坚持单一职责原则——让每一个类专注于完成一项特定任务即可。 5. 延迟初始化策略:除非必须立即加载数据,请尽量推迟其初始操作以节省内存资源。这样做不仅有助于提高应用性能,还能改善用户体验。 6. 异常处理最佳实践:应当在合适的位置抛出异常,并集中化地进行捕获和解决;避免在整个代码中广泛使用try-catch语句块以免影响程序效率。 7. 防止内存泄漏:当引用链较长时需特别小心,注意检查堆栈中的地址指向。常见的问题包括ListView未及时刷新导致Adapter仍指向旧数据容器的情况。 8. 数据同步机制:无论是本地数据库还是网络操作,请确保新插入的数据能够正确返回ID(如果可能的话),以保证信息的一致性和完整性。 9. 多线程环境下操作数据库注意事项:关闭连接会导致错误并可能导致互斥问题;推荐使用事务处理,并建议采用自动化LiteOrm库来简化这一过程。 10. 架构设计考量:在项目开始前进行结构和架构分析,确定哪些资源、布局或类可以共享以提高代码复用率及开发效率。 11. 维护有序队列操作的正确性:执行add/delete等命令时注意保持原有的排序顺序;否则可能会导致混乱的结果。 12. 数据库删除数据技巧:在进行级联删除之前务必清理所有相关的脏数据,以免留下无法清除的数据残留物。 13. 形参与实参的区别处理:当传递基本类型参数给函数调用时传的是值拷贝(即按值传递);而对象作为参数则会传递其引用地址(即按址传递)。 14. ListView最佳实践:在数据未填满整个屏幕的情况下,setSelection方法可能不起作用。此外,在批量更新ListView子项内容时确保正确映射视图与实际项目。 15. 控制Activity代码复杂度和遵循设计原则:保持主逻辑清晰简洁,并遵守单一职责(SRP)及接口隔离(ISP)等软件工程准则来优化其他类的设计。 16. ArrayList操作指南:执行remove命令移除元素时需要注意int类型与Integer类型的差异处理方式。 17. 日志记录规范性建议:请为Log输出添加标签,便于定位调试信息来源;否则可能难以追踪具体位置的打印语句。 18. 代码复用策略推荐:对于可共用的部分(如常量、资源等),应尽可能地集中和共享这些内容。虽然可能会稍微增加一些复杂度,但修改一处即可全局生效的优点显而易见。 19. ListView滚动功能调整建议:setSelection方法可能无效时尝试使用smoothScrollToPosition;同时注意LastVisiblePosition属性会随着getView调用位置变化而更新。 20. Activity间通信方式选择:通过Handler实现与Activity之间的消息传递更加方便。对于较长的回调链路,则考虑采用统一标识符来减少歧义和错误。 21. 数据库性能优化策略:建议对完整数据类型使用SQLite事务处理,特别是在大数据量场景下能显著提高插入速度;经测试,在插入少量记录时可获得约20倍的速度提升,在大量数据情况下甚至可达百倍以上。 22. 字符串处理最佳实践:避免将空字符串赋值给变量(如String = null),而是使用null或。此外,不要在数据库中存储诸如“无主题”之类的占位信息以节省空间和提高效率。
  • Android经典60
    优质
    本书精选了60个典型的Android开发案例,涵盖了从基础到高级的各种应用场景,旨在帮助读者掌握Android开发的核心技能和最佳实践。 60个安卓源码。
  • SOME/IP项目经验
    优质
    本项目聚焦于SOME/IP协议在汽车电子系统中的应用实践,通过详细分析与开发过程分享,旨在为相关技术团队提供宝贵的参考和启示。 SOMEIP开发-实际项目总结 什么是SOME/IP? 全称Scalable service-Oriented MiddlewarE over IP(基于IP协议的面向服务的可扩展性通信中间件)。通常,它包括具体实现:SOME/IP、SOME/IP-SD和服务传输层协议(SOME/IP-TP)。 特点: 1. 服务发现 2. 远程过程调用(RPC) 3. 获取和设置进程信息 与CAN对比: SOME/IP是基于IP的面向服务通信中间件,而CAN则是一种控制器局域网络总线通信标准,在汽车中广泛使用。 形态: 在汽车软件开发领域,存在两种形式:一种作为Autosar模块集成;另一种则是独立于Posix系统的库文件形式。 消息格式: 一个完整的SOME/IP消息包含以下内容: - Message ID (服务或方法ID) - Length(从Request ID算起的消息长度) - Request ID - 协议版本号 - 接口版本号 - 消息类型 - 返回码 - 数据负载 支持的数据结构: 包括基础数据类型和复杂类型的结构化数据。 消息通信方式: 有四种:请求与响应、发送即忘、通知(发布/订阅模式)及事件通知。其中,Notification又分为周期性更新、变化时推送以及epsilon改变阈值推送三种情况。 EH32项目开发所需技能包括C++面向对象编程基础和IDL描述语言知识,并可能需要了解JNI编程用于Android相关工作。 Wireshark抓包分析报文建议使用Linux系统进行调试环境搭建,以提高开发效率。 依赖库: - C++ boost - 开源的vsomeip协议实现 - commAPI(基于FrancaIDL定义静态接口) 开发流程中会用到序列化技术来处理复杂的数据结构。然而,在与AUTOSAR设备通信时,需要遵循其规范。 Fidl文件示例说明了如何使用commApi工具生成代码,并进行JNI封装以实现在Java和C++间的调用。 通信矩阵: 每个服务名都有客户端进程和服务端进程,二者间通过SOME/IP协议完成消息交互。根据业务需求不同,一个Service Name可能包含多个方法及事件。
  • 基于Threejs的3D地图
    优质
    本文档总结了使用Three.js进行3D地图开发的经验和技巧,包括性能优化、交互设计及实用插件推荐等内容。适合前端开发者参考学习。 最近连续工作了一个月,完成了涉及3D技术的攻坚项目,在这个过程中也从传统的web开发转向了WebGL图形学领域。期间遇到了不少挑战,并且总结了一些经验分享给大家。 法线是垂直于物体表面的一个向量,它表示该面的方向,因此在光照和渲染模型时起着关键作用。每个顶点都关联一个法向量;如果多个三角形共享同一个顶点,则这些不同三角形的法向量会加起来形成最终的法向量(即N=N1+N2)。这意味着如果不做任何处理直接将3D物体的数据传递给BufferGeometry,由于所有共享顶点处的法线会被合成在一起,在经过片元着色器插值后,可能会导致渲染效果不佳。 我的解决方案是确保每个顶点拥有唯一的法向量。为此需要在共享顶点的地方复制一个新顶点,并相应地调整其属性以保持正确的光照和表面方向信息。这样可以避免由于多边形共用同一个顶点而导致的视觉问题或光效不准确的情况发生,从而提高渲染效果的质量。
  • 基于Three.js的3D地图
    优质
    本文档深入探讨了使用Three.js进行3D地图开发的实际应用和经验总结,涵盖了技术挑战、解决方案及优化策略。 本段落主要介绍了利用Three.js开发实现3D地图的实践过程,并通过示例代码进行了详细的讲解。内容对于学习或使用three.js的人来说具有参考价值。希望对需要的朋友有所帮助。
  • Android经典案例60
    优质
    本书精选了60个经典的Android应用开发实例,覆盖从基础到高级的各种技术点,旨在帮助读者掌握实用的编程技巧和设计理念。适合开发者参考学习。 这本书包含了60个经典的安卓案例,从简单到复杂一应俱全,并涵盖了各种UI设计、动画效果、硬件使用以及基础游戏等内容。
  • Android蓝牙驱动.pdf
    优质
    本PDF文档详细记录了在Android系统中进行蓝牙驱动开发的过程与经验,涵盖了从初始化到设备连接的各项技术细节和问题解决方案。 对于Android蓝牙开发初学者或初级工程师来说,掌握以下三部分内容是必不可少的:1. 打开蓝牙;2. 查找附近已配对或可用的设备;3. 连接设备;4. 实现设备间的数据交换。这些内容构成了学习和理解Android蓝牙技术的基础框架。
  • Android锁屏App难点
    优质
    本文主要探讨了在Android平台上开发锁屏应用程序时遇到的技术挑战和解决方案,旨在帮助开发者更好地理解和解决这些问题。 自定义一个漂亮实用的锁屏应用如果能获得用户的认可,并替代系统自带的锁屏功能,则可以成为一个重要的日活跃用户入口。最近我总结了在Android平台上开发锁屏应用程序所遇到的一些难点。 一、前言 实现锁屏的基本原理相当简单,即监听系统的亮屏广播,在屏幕点亮时展示自定义的锁屏界面;用户需要通过特定的操作才能解锁该界面。有些手机启动锁屏界面的过程较慢,所以会明显感觉到从黑屏到显示锁屏界面之间存在延迟。因此可以考虑在系统灭屏的时候就预先准备好应用程序的锁屏界面,这样当屏幕点亮时可以直接展示(需要注意的是,在灭屏后你的应用更容易被系统关闭)。 此外还需要注意的是,无论是监听亮屏还是熄屏广播,SCREEN_ON 和 SCREEN_OFF 都是只读属性。
  • Android经典案例60例.rar
    优质
    《Android开发经典案例60例》是一本全面解析Android应用开发技巧和实战经验的电子书,包含从基础到高级的各种实用示例。 Android开发60个经典案例
  • 60个经典的Android案例
    优质
    本书汇集了60个经典Android开发实例,涵盖了从基础到高级的各项技术要点,旨在帮助读者深入理解并掌握Android应用开发的核心技能。 在Android开发领域,掌握经典案例是提升技能的关键。这些案例涵盖了从基本的用户界面设计到复杂的网络通信、数据存储以及多媒体处理等多个方面。 1. 用户界面(UI)设计: - 滑动菜单:侧滑抽屉式的菜单设计,常用于展示更多功能选项。 - 自定义控件:根据需求定制独特的按钮、文本框等组件,提升应用的个性化。 - 布局管理:包括线性布局、相对布局和网格布局等多种方式来有效组织屏幕元素。 2. 动画与过渡效果: - 视觉动画:利用Android的ViewPropertyAnimator实现平移、旋转及缩放等动画效果。 - 转场动画:在活动之间添加过渡动画,增强用户体验感。 3. 数据管理: - SQLite数据库:本地存储数据,适用于小规模且结构化的数据处理场景。 - SharedPreferences:轻量级配置存储方案,适合保存用户偏好设置。 - 文件系统:用于较大或非结构化数据的储存需求,如图片和音频文件等。 4. 网络通信: - HTTP请求:使用HttpURLConnection或者OkHttp库进行HTTP/HTTPS请求操作。 - JSON解析:通过Gson或Jackson库将服务器返回的数据转化为Java对象以便处理。 - Retrofit:集成HTTP库以简化网络接口调用流程。 5. 异步处理: - AsyncTask:在后台线程执行任务,并且当需要更新UI时切换回主线程进行数据刷新操作。 - IntentService:用于处理耗时较长的任务,避免阻塞主线程运行效率低下问题。 - LiveData和ViewModel:配合Room数据库实现数据在后台与用户界面之间的实时同步。 6. 内存管理: - 对象生命周期理解:掌握Activity、Fragment等组件的生命周期过程以防止内存泄漏发生。 - 内存分析工具应用:使用Android Studio提供的内存分析工具检测并优化应用程序中的内存消耗情况。 7. 广播接收器: - 系统广播监听与响应机制设计:针对网络状态变化等情况进行系统级别的事件处理。 - 自定义广播实现特定场景通信需求:通过自定义的BroadcastReceiver来满足特殊应用场景下的信息传递要求。 8. 通知与推送功能集成: - 本地通知展示消息提醒用户注意重要事项。 - Firebase云消息推送(FCM)实现实时的消息发送,提高用户的活跃度和参与度。 9. 多媒体处理技术应用: - 图片加载库使用:如Glide、Picasso等高效地加载并缓存网络或本地图片资源。 - 音频视频播放支持:通过MediaPlayer库实现音频文件及视频的流畅播放功能,并且能够兼容流媒体服务。 10. 第三方库集成增强开发效率: - Google Maps API:整合地图相关服务,提供定位、导航等功能模块。 - Firebase Analytics:收集应用使用数据进行用户行为分析研究。 - Crashlytics崩溃报告工具帮助开发者快速识别并修复应用程序中的错误问题。 以上每个知识点都配有相应的源代码示例。通过学习和实践这些案例,开发人员能够更深入地理解Android平台的核心技术,并提高编程效率及产品质量。无论是初学者还是有经验的开发者都能从中受益匪浅。