本文从开发工具选择,UI界面、图片模块、网络模块、数据库产品选择、性能、安全性等几个方面讲述了如果开发一个Android应用。现在整理出来分享给广大的Android程序员兄弟们。

开发工具的选择

开发工具我将选用 Android Studio,它是Google官方指定的Android开发工具,目前是1.2.2稳定版,1.3的预览版也已经发布了。 Android Studio的优点就不需多说了,GitHub上大部分的Android开源库也都已迁移到Android Studio上来,在未提供 jar文件时,使用Android Studio可以极为方便地集成开源库。最为重要的是Google已宣布将在年底前停止对 Eclipse Android开发工具的一切支持(Google Ends Support for Android Eclipse Tools),因此请早日转移到Android Studio上来。

App设计风格

这一点对于一个开发者来说,貌似没有决定权,最终的决定权在产品部门手里。尽管这样,我还是会尽力说服产品部门将App设计成Material Design风格。

这一点说多了都是泪啊,作为一个Android开发者,却整天开发着iOS风格的App,相信很多公司都这样,为了节省成本和时间,Android和iOS共用一套UI。

举一个最常见的例子,Android App中每个页面TitleBar的左上角放一个返回按钮,这在iOS里是必须的,但Android有返回键啊,这样设计对于 Android完全是多此一举。

真心希望产品设计者尊重每种操作系统的风格及使用习惯,不要再设计不伦不类的产品。Material Design正好提供了一种这样的规范,自MD规范发布以来,其优雅的设计和清新的风格已吸引了大批设计者和开发者,如今MD设计不止在Android上(已有官方类库支持 MD风格),甚至在CSS、HTML、JavaScript网页设计上都越来越火。因此,对于App的设计风格,Material Design当仁不让,也许你曾经错过了Android Design,请不要再错过Material Design。

一些相关的链接:

Material Design官网
Material Design配色模板
MD一个设计案例网站
MD风格的Andorid抽屉源码:Android-MaterialDesign-NavigationDrawer
MD风格的一个App源码(有妹子哦):Android-MaterialDesign-DBMZ

版本支持

对于Android要支持的最低版本,可以参考各个版本的市场占有率,其实最靠谱的是根据自家App的统计数据来决定,目前我们的App最低支持2.2。以个人观点认为,虽然2.x的版本仍然有一部分用户,但其实手机更新换代特别快,为了更好的用户体验,也为了应用更新的API(很多第三方库也都有版本要求),应该提高最低支持的版本,大概3.0 为宜,即API Level为11。

App框架设计

相信大家都有体会,随着功能模块的增加,App越来越大,如果没有良好的架构设计,则代码将会变得臃肿且不易维护,各功能模块的耦合度会越来越高。因此可以把App模块化,将一个完整的App划分成几个相对独立的模块,这样即可以降低模块间的耦合也利于复用。

(技术交流qun:185873940)

1.网络模块

已经很少有单机版的App了吧,大部分都需要联网,从服务器请求数据,因此网络模模块必不可少。GitHub上的开源网络框架也特别多,个人认为可以使用开源框架,目前我会选okHttp或者Volley,也许以后会有更好的网络框架出现。注意如果使用开源框架,则必须要阅读其源码,必须能够驾驭它,这样就不至于当bug出现时束手无策。当然还可以自己写网络模块,目前我们的App网络模块就完全是自己写的,这样的好处是自己熟悉所写的代码,当有bug时可以迅速定位问题,同时注意处理一些联网过程中的细节,如:

(1)对HTTPS的支持、HTTPS证书的验证(目前很多做法都是默认允许所有HTTPS证书的,其实这样做是不安全的,应当真正地做证书校验)
(2)支持Wap方式上网,移动、联通、电信代理的设置
(3)支持重定向、数据压缩传输等
(4)其他值得注意的问题

自己写网络框架可以完美地处理这些细节,但时间成本比较大。如果使用开源框架,一般都没有处理这些细节,因此我们可以在第三方框架上做些修改,这样时间成本将会节省很多。

2.图片管理模块

图片也是App中不可少的元素,而且图片是占用内存的大户,因此图片管理框架特别重要,不好的图片框架容易引起内存泄露甚至导致崩溃。当然可以自己实现图片框架(目前我们也是这样做的),实现图片的下载、解码、缓存等关键环节。个人建议可以采用一些比较好的图片库,也许会比我们自己管理图片更完善和高效。我会推荐如下几个图片管理库:

(1)Glide,Google的一些官方App,如Google photos都使用了,还要解释更多吗?
(2)Fresco,FaceBook的开源库,功能超级强大,支持WebP、Gif、JPEG渐进显示,关键是其对图片内存的设计思想,使得图片内存开销大大减少。
(3)Android-Universal-Image-Loader,在出现上述图片库之前,貌似这个最火吧,之前个人的App中也用了它。
(4)Picasso,Square的开源库,据说Glide就是参考Picasso设计的。

3.本地数据库模块

也许你的App需要用到本地数据库,那么建议你采用流行的ORM框架,如ActiveAndroid或greenDAO,使用第三方库会大大方便你对sqlite的操作,个人认为在使用中我们需要注意数据库升级以及多线程并发操作数据库的问题。

4.文件管理模块

一个App,肯定会涉及到一些文件,如配置文件、图片、视频、音频、SharedPreferences文件等。我们可以提供一个全局的文件管理模块,负责文件的增、删、改、查等操作。另外还需支持文件压缩,文件的上传与下载操作,对于下载需要支持多线程并发下载、断点续传等功能。

5.组件内、组件间通信机制

对于一个App,组件通信必不可少,通信类型可以分为点对点和点对面的的通信,点对点即只有唯一的接收者可以响应消息,点对面则类似于消息广播,即所有注册过的都可以响应消息。在Android 中,通常使用消息机制来实现,但消息机制的耦合度比较高。目前也有一些通信框架,如EventBus、Otto等事件总线框架,这些框架可以极大地降低组件间的耦合,但无法完美地实现点对点通信,因此建议消息机制和事件总线机制结合使用。

6.数据处理框架

其实还应该有一个数据处理框架,当发出数据请求后(走子线程),经网络模块返回数据(一般为JSON格式),JSON数据一般不能直接交给View层使用,需要解析成对应的Model,同时如有需要,还要缓存数据,因此这些流程可以抽象成一个数据处理的框架。这个框架可以认为接受数据请求的url,并将数据Model返回给Activity或 Fragment。对于JSON数据解析,建议使用fastjson,速度快且稳定,缺省值也比较完善。

7.线程调度模块

其实Android中有很多操作,如请求数据、下载图片、清除缓存等都是需要在子线程中执行的,往往很多时候都是直接起一个Thread来做了,这样做就会很乱而且线程多了将难以管理。因此可以抽象出一个线程调度模块,它维护一个线程池,如果有需要线程的话就通过线程调度模块取线程来做,这样就方便统一管理。当然第三方库中的线程操作我们将无法归到线程调度模块来管理,但其他涉及到线程的操作都应该来统一处理。

8.业务层

业务层大概就是四大组件、Fragment、View了,建议尽可能地使用原生组件,少用自定义组件,因为原生组件性能是最好的。另外建议使用MVC模式就好,只要设计管理好自己的逻辑,至于MVP、MVVM等模式个人认为都有缺陷,总之寻求一个折中吧,有得必有失。

9.APK动态加载机制

随着App的增大,功能的扩展,很多App已经采用了APK动态加载的机制,也可以叫做插件化。由于本人没有在实际的App中应用过,所以不便发表过多评论。但这种机制个人认为很有前途,这种机制将利于App的解耦、功能扩展和局部升级。具体可以参考一个商用的解决方案:ApkPlug-移动应用模块化解决方案和一个开源的APK动态加载框架。

10.App的安全性考虑

Android App的安全问题很少有人重视,但这的确是一个很严重的问题,一些好的App经常被人破解。建议将一些核心算法等写成.so库,重要的逻辑放在服务器端,数据请求采用加密等,另外打包APK时至少要混淆代码,还可以采用APK加壳机制,总之这类的防范措施永远不嫌多。

一口气漫无逻辑地写了这么多,可能会有遗漏的内容,后续会补充完善。我想如果按照上述原则,至少可以开发出一款不错的App。

最后

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

Android开发——如何设计开发一款Android App相关推荐

  1. Android studio课程设计开发实现---日记APP

    Android studio课程设计开发实现-日记APP 文章目录 Android studio课程设计开发实现---日记APP 前言 一.效果 二.功能介绍 1.主要功能 2.涉及知识点 三.实现思 ...

  2. Android通用框架设计与完整电商APP开发系列文章

    作者|傅猿猿 责编|Javen205 有福利 有福利 有福利 鸣谢 感谢@傅猿猿 邀请写此系列文章 Android通用框架设计与完整电商APP开发 课程介绍 [[导学视频](http://szv1.m ...

  3. Android课程表的设计开发

    Android课程表的设计开发 下载链接 鉴于很多人需要源码,这里给下代码. 下载地址(需要5积分,支持下(积累点积分...),没有积分的直接留言邮箱,我发给你或者找其他已经发过的人要下) 没积分的直 ...

  4. Android用户界面的设计方法心得,(8 Android) 用户界面UI设计

    (8 Android) 用户界面UI设计 3.1.1 Android界面视图类 Android 图形化的用户界面(Graphical User Interface , GUI) 采用了结构清晰的MVC ...

  5. android开发设计平台,10款开发和设计应该安装的android应用

    过去几年里有很多新开发的小工具出现,人们的生活越来越离不开智能机,当然包括android手机,它已经成为了人们的最大需求量之一,市场上出现的android手机也越来越多,人们也比较喜欢用andorid ...

  6. android支付界面设计,Android支付宝支付设计开发

    在移动支付领域,支付宝支付占用巨大份额,根据艾瑞咨询公布的报告数据:2014Q3,支付宝斩获了82.6%的市场份额,在移动支付的霸主地位越来越稳固.财付通支付的发力点在微信支付和手Q支付,在移动支付格 ...

  7. Android导航软件设计开发,基于Android平台的手机导航系统的设计与实现

    摘要: 互联网和移动智能技术的快速发展,平板电脑,智能手机,已经走进我们生活的方方面面,购物.外卖.租房.工作.旅游,医疗各个行业.我们无时无刻不在享受互联网和移动终端带来的便利.GPS全球卫星定位带 ...

  8. android开发常用的组件,7款Android开发者常用的Android UI组件

    关注微信号:javalearns   随时随地学Java 或扫一扫 随时随地学Java Android开发是目前最热门的移动开发技术之一,随着开发者的不断努力和Android社区的进步,Android ...

  9. Android 高级UI设计笔记08:Android开发者常用的7款Android UI组件(转载)

    Android开发是目前最热门的移动开发技术之一,随着开发者的不断努力和Android社区的进步,Android开发技术已经日趋成熟,当然,在Android开源社区中也涌现了很多不错的开源UI项目,它 ...

  10. 如何开发与设计一个爆款小游戏

    小游戏是今年游戏行业中又一个火爆的类型.它所指的不是微信小游戏,而是可以运行于微信.浏览器的H5游戏,也是能以Native形式运行的小游戏.它小而美,即点即玩,社交属性更强.在这次开发者巡回沙龙中,游 ...

最新文章

  1. IJCAI 2021 | 医学AI新坑:心电全景图及其生成网络
  2. 人群场景分析--Slicing Convolutional Neural Network for Crowd Video Understanding
  3. Linux下自动分割Nginx日志文件(三)-----Logrotate
  4. linux mint(Ubuntu、Debian) 18修改环境变量
  5. engineering department induction ppt
  6. Java防止Xss注入json_浅谈 React 中的 XSS 攻击
  7. OSPF——DR及BDR详解
  8. log4j的8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL)
  9. 1002. 三角形 (
  10. 16行代码实现微信聊天机器人,自动智能回复,打团了让它来陪老婆聊天
  11. python下载电影天堂_Python爬虫之《电影天堂》电影详情+下载地址爬取
  12. 《孤独的美食家》60家餐厅超全觅食攻略,吃货必收!
  13. SecureCRT无法键盘输入,无法回车
  14. Java Web从入门到实战
  15. mysql SELECT/UPDATE command denied to user 'root'@'localhost' for table 'XXX' 报错1142处理
  16. web开发中常用的几种统计图使用
  17. AC Leetcode 290. 单词规律
  18. Java如何模拟鼠标键盘输入
  19. GP232RL与FT232RL操作区别
  20. 稳定性高可用测试——各大厂质量保障实践分享汇总(上)

热门文章

  1. wpa_supplicant wpa_cli 无线网络配置
  2. 梦幻西游藏宝阁不显示服务器,玩转梦幻西游藏宝阁全服搜索功能体验
  3. 没有gpedit.msc这个文件获取管理员权限
  4. [MEM]综合能力考试-数学知识点
  5. 数据库空间管理-学习笔记
  6. 阿里起诉淘宝假货店主,携手数家公司利用大数据打假
  7. 深入理解LEFT JOIN
  8. latex sty文件设置
  9. 平安科技实习生面试经历
  10. 醉后不知天在水,满船清梦压星河。—第三十六天