当前位置: 首页 > 科技观察

Android学习路上会遇到的各种瓶颈总结

时间:2023-03-12 12:44:51 科技观察

前言对于大多数大三学生来说,这个暑假是他们人生中的最后一个暑假。对于IT专业的同学来说,开学后将面临各大IT公司的秋招,其中不乏从零开始的Android实习生。在Android初学者的道路上,每个Android实习生都会遇到各种各样的瓶颈。克服瓶颈首先要克服自己对所有瓶颈的偏见,把回避瓶颈的行为变成享受瓶颈带来的乐趣的过程。喜力比国产啤酒贵很多的一个重要原因是喜力的瓶颈:你现在去买一瓶玻璃瓶的喜力,用手捏住瓶颈,拇指按一下星星,然后用你最熟悉的瓶子。你会喜欢瓶颈的感觉。Android布局与屏幕适配Android初学者遇到的第一个瓶颈就是Android布局的编写。首先,Android的布局是用XML写的,而大多数大学生在大学阶段学习网页制作的时候都是用HTML来画基本的控件,然后再用CSS来美化页面;而Android是用XML来绘制界面的,样式也是用XML写的。学习XML最重要的是熟能生巧,多练习会变得更容易。另外,XML和HTML有很多相似之处,比如padding和margin的区别。此外,Android系统碎片化严重,不同型号的手机屏幕尺寸和分辨率不同。为了解决这个问题,我们可以将背景贴图做成.9png格式,使用content和padding来支持控件。如果需要适配的模型过于极端,我们可以通过百分比布局——PercentRelativeLayout和PercentFrameLayout等来解决这个问题。不同组件的生命周期Android初学者遇到的第二个瓶颈是生命周期。Android的生命周期主要包括三种:Activity生命周期、Fragment生命周期、Service生命周期。如果学不会Activity的生命周期,就做不了界面跳转的特效,做不了系统Activity的回调(摄像头等);学不会Fragment的生命周期,就不会写懒加载;如果你学不会Servicelifecycle,你连后台运行都做不到。学习生命周期时,记住“无图时不直观,无图时难理解”,用图表辅助记忆。网络请求和json解析Android是移动互联网的重要组成部分。网络请求和Json解析是Android学习中的重要环节,很多初学者都会在这里遇到瓶颈。为了突破这个瓶颈,初学者首先应该选择合适的框架,尽快解决实践工作中的问题。常用的网络请求框架有Volley、OKHttp;常见的json解析框架有Gson、Jackson等,如果你的求职目标是阿里巴巴集团,学习FastJson可以帮到你;另外,还有网络请求和jsonParsingRetrofit集成在一起。实习生刚进入公司时,要记得利用工作时间解决工作中的问题,利用业余时间探索知识,提升能力。工作之余,应该学习上述框架的源码和实现原理。比如Android网络请求必须在子线程中进行,否则会引发NetworkOnMainThreadException;当前的网络请求基于HttpURLConnection,任何有关HttpClient的信息都已过时;还有必要理清Handler、ThreadPool、AsyncTask等的原理;json解析的知识还包括JSONObject和JSONArray的区别,Java的泛型机制,Java的反射机制等等。图片加载和内存优化安卓机的价格普遍比iPhone低很多,所以安卓系统比iOS系统更容易遇到内存溢出问题(OutOfMemoryError,简称:OOM),这也是常见的学习瓶颈之一对于初学者。OOM多发生在图片上,其次布局中嵌入的地图和视频也是OOM的罪魁祸首之一。解决加载图片OOM,首先要尽快选择Picasso、Glide、Fresco等框架解决工作中的问题,然后利用个人时间学习Android缓存机制——LruCache和DiskLruCache;地图和视频的OOM应该在界面回收时清除控件,停止服务;其他OOM应该用弱引用和软引用来解决。RecyclerViewAndroid最常用也是最复杂的控件是RecyclerView(2014及之前的数据是ListView),因为列表中的滑动冲突、数据修改等问题都会在RecyclerView中体现出来。为了克服这些瓶颈,需要了解RecyclerView.Adapter(包括前面的BaseAdapter)的工作原理,ViewHolder的工作原理,ViewGroup的事件分发机制。这些内容不经过努力是无法完全掌握的。克服了以上瓶颈后,估计实习生也该毕业转正了,晋升路上又会遇到新的瓶颈。新瓶颈有新玩法:此方法需要双手操作,如果用另一只手按住打开的瓶颈,可以在HIGH弹奏时用力摇晃,弹奏时突然松开瓶颈高手。自定义控件Android自带的控件无法满足过于复杂的界面控件的要求,因此绘制自定义控件也是Android工程师的必备技能。绘制自定义控件,需要掌握View几个常用方法的重写,如onDraw()、onMeasure()、onLayout()等;对事件分发机制的理解也应该比RecyclerView更熟练;另外需要掌握Canvas和Animator相关知识,AndroidCanvas和HTML5Canvas有很多相似之处,可以突破Canvas的学习瓶颈。进程间通信不同App之间以及同一个App的不同进程之间需要进行多进程通信。在视频播放等占用大量资源的场合,多进程通信是很有必要的。进程间通信初学者百度的“多进程”都会被AIDL搞糊涂。其实只要尝试一下Messenger框架,所有的进程间通信问题都会迎刃而解。Android性能全面优化及崩溃分析Android新手最后一个会遇到的瓶颈就是Android性能的全面优化。前面提到的Android内存优化是Android性能优化中最重要的部分,但也只是一小部分。Android性能优化还包括安装包大小优化、GUI绘图优化、功耗和流量优化等。在GUI方面,可以使用ViewStub,去除其他不需要的背景,避免OverDraw;安装包体积可以通过压缩图片、去除重复无用的依赖等方式进行优化;power和traffic可以用push代替polling,以及以GZIP文件格式下载过长的数据流等方式进行优化。在移动应用性能方面,崩溃(Crash)的影响最为严重。崩溃是指App运行过程中大量用户操作被强制关闭。崩溃会导致关键业务中断、产品信誉下降、用户流失。Crash可以通过UncaughtExceptionHandler捕获,也可以通过UMeng、Bugly等服务进行分析。请注意:如果你打算转阿里巴巴,使用UMeng,如果你想转腾讯,使用Bugly。突破上述所有瓶颈后,Android程序员的技术水平可以达到独树一帜的水平。甩掉初学者帽子的程序员会发现,他们的头顶不再是瓶颈,而是从技术到管理的天花板。