上周花式填坑第7期话题:“如何开发一款完整的Android App ”,在大家与嘉宾积极的互动中完美落幕。
为此小慕精选出优质的问答内容,分享给对安卓开发感兴趣的小伙伴们。
Q:第三方的SDK怎么用好?app的趋势是什么情况?
Qiujuer:对于第三方的SDK,在中小型企业中一般来说会采用开源社区中相对优秀的框架进行开发,其主要表现为:图片加载处理、网络访问、数据库存储、基础控件等模块。
这些都是一些比较通用的模块,使用起来会极大的简化开发,对于企业来说采用这样的框架是非常不错的,因为节约成本。而对于个人来说更加希望的是能够去研究对于库的底层实现,理解原理。
对于大型企业来说,一般不会采用开源社区的框架,或者说会更改社区的框架为自己的方案来使用,而且粒度更细,具体到一个功能点上,比如数据上报,日志采集等等。以上是对你第一个问题的描述,不过我看你写的SDK,这个不知道你是否写错,我是回答的库相关的内容,如果错了,可以私信我哈。
第二个问题,app的趋势,这个说实话真的不好说,因为app越来越看重质量,当然也看重创新点,就技术上来说可能今后的发展会趋向快速开发,就是一套逻辑Android和iOS同时跑,这个在电商领域非常看重,当然其他领域目前这个需求还不多。总的来说app还是比较强的需求,加紧学习就好
Q:老师,推送咋实现?需要Socket吗?如何使用socket,需要注意什么?
Qiujuer:首先,推送一般是使用第三方框架来解决,因为第三方框架本身足够优秀,而且支持大数据并发的情况,所以这个选择不错。当然这是说的方法,并不是技术。
如果是技术的话,我们一般会根据具体的情况进行操作,比如使用Http轮训, websocket,socket.io等技术, 当然本质上其实就是socket。 而且我也建议使用socket如果有条件的话,因为要使用socket的话需要消耗的资源和开发投入都是非常高的,无论是服务还是人员投入。 当然你如果已经决定了使用socket你需要注意的是如何解决数据粘包,心跳,重连,数据可达等指标的突破。 希望你成功,祝你愉快~
Q:APP中的线程,什么时候需要线程,线程怎么调度和切换?
Qiujuer:线程的使用有两种情况,一种是当你要调度的方法强制限定需要线程的时候,第二种是当你需要进行耗时操作的时候,常见的是:网络操作,文件操作,数据循环操作,数据库操作等都是需要开一个线程进行处理。
至于线程直接的数据交换有两种方式进行,一种是自己建立循环机制,然后建立一个小的池,把一个线程中的结果放到池子中去,而另外一个线程负责循环这个池子,当有数据的时候就经行处理即可,从而达到线程的数据交互,整个过程可以借助锁,通知,等待来节约资源成本。
当然还有常见的非常简单的方式采取Handler进行调度操作也是可以完成的。当然这涉及很多细节部分,特别是内存泄漏等等。在我的IM课程中这个部分有成熟的框架来解决,当然你也可以使用类似于EventBus,RxJava来解决都是可以的。
Q:APP中的图片、网络、数据库这几个大头该如何解决相关问题?
Qiujuer:对于这几个大头我不建议在技术储备不够的情况下自己去完成,因为一旦处理不当只会给自己带来烦恼,同时也会带来更多的错误。我建议使用现在比较成熟的框架来解决,比如Glide,DbFlow,OkHttp等框架都是值得使用和参考的。如果自己要另外开发一定需要衡量当前的业务以做考虑。
Q:老师 一款类似ofo共享单车的 app从制作到上线需要多久
Qiujuer:你好,这个问题我相信很多同学都有这样的问题,但是这样的问题往往又比较难回复,因为团队人数和能力往往是不等的;所以回答出来并不一定准确。
只能大概推断“人天”(1人1天)来算,这里我就按照中等水平的能力来说(因为这个共享单车app难点在服务器,不在手机端)大约需要70人天左右,也就是两个小伙伴一起加紧做就1个月多一些就完成了。当然这个是在有设计有参考物(单车软件)来说的。 哦,我才看了前面说的是摩拜的,ofo的话至多55人天就差不多了。
Q:请问老师,该怎么做机型适配,毕竟公司财力有限不太可能把市面上所有的手机都买来做适配,是否应该选择腾讯云测这种平台来做测试,还有一个问题就是如果第三方SDK使用的比较多的话该怎么给APP做瘦身
Qiujuer:Hello,对于机型适配,这个问题我想很多公司都无法拥有世界上所有的手机设备,只能说尽可能抽取典型的来测试,比如华为,oppo等,特别是厂家对系统有更改的机型可以重点照顾,当然还要看你所面对的用户群体,如果是海外的那就不用担心这么多了,适配三星这些是重点。
另外你说的借助云平台这个是可以的哈,可以采取腾讯,百度这些都有类似的服务的,但是做这些的时候一定要注意一点就是你的app安全性,以及你的app是否可以程度泄漏的风险,因为有些app是不能进行公开测试的。
第二点啊,app瘦身,这个常规的做法是删减app中的图片资源,因为大部分问题都是因为图片资源,还有一点就是你引用的有jni部分的库也就是 .so 的文件,因为这些文件比较大,而且不利于压缩。其实本身的java代码并不会太大的文件大小,就算你达到了方法数溢出也不会有太多的size存在;所以优化你的资源和JNI资源,当然如果必要可以加上混淆来移除未使用的java代码和代码简化操作,这样就能删减很大部分的size了。
Q:请问老师项目中准备使用第三方开源库时,如何进行技术选型呢?在决定使用第三方开源库时,碰到的问题:
1. 如何找到优质第三方开源库?
2. 如何尽可能减少成本的对比开源库优劣,并快速上手?
Qiujuer:多谢你的提问;一般来说找开源库有几个技术点:代码质量、性能、内存、功能、健壮性。性能和内存这个可以直接测试对比拿到,而对于健壮性和代码质量这个真的只能通过不断的尝试和查看开源的代码来决定。
在这里有必要说的是,很多国内的开源库往往都是吹的热闹,但是代码其实是非常糟糕的,至少能轻易的找出BUG和不足,这样的库往往都是因为宣传得当导致扩散的很多,而使用的人又不看源码实现所以就被掩盖了。
所以我选型库,一般都是优先国外大厂的:Facebook Google... 等,你也可以参考。如果到了要使用非大厂的库的时候一定要记住的是看看这个库的代码实现,别去受所谓的名气和star影响。至于快速上手就只能看对应的官方文档了,这个如果官方文档写的OK那就非常简单的;如果有这些方面的咨询可以联系我,我给你推荐推荐。
Q:初级安卓工程师至少应该掌握哪些知识呢
Qiujuer:对于初级Android来说其实需要懂的不需要太深,但是知识点需要足够全面;简单来说就是你不需要理解到控件的底层实现,你也不需要知道一个UI的操作纠结发生了什么,但是你需要知道我们的Android是怎样的体系,是由那些部分构成,怎么才能作出一个app即可。
我在这里给你贴出一个表: Android 基础: Activity,Frag,Service,XML Java 基础:String,StringBuilder,StringBuffer,List,HashMap,Thread,ThreadPool Android :UI,自定义控件,界面优化,性能优化,JNI,跨进程传递,SQL 设计模式:单实例,代理,观察者,工厂模式,适配器模式 框架模式:MVC,MVP 算法:冒泡排序,插入排序、选择排序、快速排序、堆排序、归并排序 上面的就是初中级别需要知道的一些常见的内容,你可以对照着去完善你的知识点,当然你也可以先去工作,在工作中去完善这些。
Q:从网上下载了源码,应该从哪里开始看,想写一个app从哪里开始写?
Qiujuer:多谢你的提问;一般而言看别人的源码有多种情况,如果是完整的app那么就去找入口界面一般是MainActivity或者LaunchActivity,从这个界面看起;然后去找你感兴趣的界面,比如是设置界面,那么你就从主界面去看是如何进入到设置界面的找到操作,再找具体的界面,然后去找自己需要找的设置界面的逻辑。
一般来说就是要有一个兴趣点和一个入口就能扩展开到整个APP。当然如果对于一些第三方库,那就从使用这个库的入口方法进入去查看。
Q:现在的安卓开发,原生安卓和H5,各自的前景如何?
Qiujuer:同学,你好,对于原生和H5其实没有谁更好,谁不好,只是适用场景不同。原生一般开发的都是一些更加注重体验注重性能的app,常见的就是你手机里边所有原始的应用基本上都是原生的。
而对于H5更多的是用于我们的Web开发,适用的范围一般是电商的比较多,因为电商需要经常更改,这种情况下使用H5会更好,因为每次产品更新,节日活动不用更改app就可以完成。
所有H5是电商的利器;所有具体的就要看公司的性质了,如果公司偏向电商那就是H5的会更多,而对于面向设备的一些开发基本上都是使用的原生Android开发了。两者并不冲突,相铺相成,就看你的喜欢都是可以的哈。
Q:看您的android项目中用到了好多个model,我比较喜欢多建几个包,给我带来的好处没怎么体会到啊,反而我添加依赖的时候各种麻烦,想请您讲解一下为什么项目中要用多个modle引用
Qiujuer:你好,这个问题其实和他们问的都不同哈,也证明你有自己的学习方向,这是非常不错的,赞~
对于AS中分module的开发,这个其实是为了进行一定意义上的物理隔离。什么意思呢?我在这里举例说一下,现在一个项目,其中有支付,有下载,有数据打包上报,我们常规的情况下都是进行的分package来进行开发,但是这样在大型项目中往往会遇到的问题是,可能多个不同的业务逻辑上有相互的代码交叉(耦合);那么这种代码在后期是非常难进行维护的,而且层级上也并不够;所以我们建议的是进行一定业务的分包module操作,把不同的逻辑分开为不同的包,然后在不同的module中去完成对应的逻辑,这样的情况下就会形成一种都被app引用,不同module可以线性引用,但是无法相互引用的模式,从而避免了业务的交叉,当一个模块有问题的时候也更加容易定位。当然这样的分包并不一定是按照业务逻辑来进行分包,也可以提出公共部分比如commom、网络、图片加载、数据存储等常规的模块进行独立的module开发,也方便不同的人员之间的协作开发;减少冲突的作用。在我的课程IM实战课程中就有这些的讲解,不妨看看哦。多谢你的提问,
Q:mvp模式适合所有项目吗?应该如何进行测试
Qiujuer:首先,MVP并不适合所有的项目,其实没有那一个模式是适应所有的项目的;基本上都是根据项目需要再做调整,直到适合项目。
对于测试,我们提倡的是自测,也就是开发的时候就进行数据的测试,自己尽可能的预料到所有的情况,进行数据的测试;当然这个流程主要体现在打断点和日志的方式。对于写单元测试,一定要衡量好单元测试的粒度,让粒度刚刚好,怎么样才能能刚刚好呢,这个取决于你们的项目情况,尽可能小一些,细节一些即可。一般都是测试底层,不测试上层逻辑。因为上层逻辑可能变化很多,导致测试用例频繁更改,效率反而不高。
Q:老师你好,我想请教一下:我要做一款android社交聊天软件。
请问您会选什么样的框架和数据库作为后端?选用什么通信机制比较好?
可以用node.js作为server端吗?会有什么样的问题呢?
如果我用node.js作为server端,选用比如express做为框架,并且用socket.io作为后端与android的通信机制合适吗?这样做有坑吗?坑大吗?如果您要用node.js做,选用哪个框架,哪种通信机制比较好?
在3上面的基础上选用MongoDB做为数据库合适吗?
如果直接改为第三方提供的后台,比如firebase,哪种比较好?您怎么看?
问了好多问题,非常想知道您的建议。谢谢!
Qiujuer:1.框架我会选择贴近我的项目需求的框架,比如我们的课程中的Jersery框架就足够我们的项目使用了,即简单又稳定,而且典型。数据库我会选择MySQL,他不是最好的,但是是最适合的。通讯机制,我想在条件允许情况下我会自建socket服务器进行数据通讯;如果是快速而且投入不够那么我会使用第三方推送来帮助我完成工作。
2.可以使用node.js作为服务器,而且也很简单哦,我最近也在尝试这个的哈,只是这个的效率还没有仔细测试过,另外就是还不知道是否支持足够的批量压力。优点是界面渲染非常OK,缺点我还没体会到,可能数据操作上没有java那么简单。
3.node.js作为后端和Android通讯是完全可行的哈,因为已经尝试过了;另外使用socket.io也是非常不错的选择,我这边也是使用的这个方案,但是最近准备尝试直接用socket来试试看。至于坑,就是协议上的问题,因为我当时采用的框架后端和android端不够匹配导致无法建立链接,当然后面解决了。要说我采取的框架这边我会采用“Koa js”,因为他的webapi方式非常便捷,你也可以试试,很不错的哈。
4. MongoDB数据库我倒是没有试过,你可以试试哦;回头告诉我咋样哈~理论上来说是可行的方案,应该也蛮不错的哈~
5.第三方的后台我建议你使用firebase,因为他经过了检验了,足够稳定与优秀;缺点就是协议不够现代化,传输消耗上比较高,所以有能力自己搭建是更好的,但是这里我不会使用云信这些产品,因为不是我的心里不踏实,对于非要用类似的我还不如逻辑自己来,数据使用第三方推送完成,至少我把数据加密后不成问题。
嘉宾介绍:Qiujuer,个人主页点击查看
共同学习,写下你的评论
评论加载中...
作者其他优质文章