• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 【玖哥乱弹】Android初学路上会遇到的瓶颈

【玖哥乱弹】Android初学路上会遇到的瓶颈

作者:玖哥的书房 字体:[增加 减小] 来源:互联网 时间:2017-08-02

玖哥的书房通过本文主要向大家介绍了Android,Android面试等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

对于大多数大三学生来说,这个暑假是人生最后一个暑假。对于IT专业的学生来说,开学后就要面对各大IT企业的秋招,很多人会成为从0开始的Android实习生。在Android初学之路上,每个Android实习生都会遇到各式各样的瓶颈。

 

克服瓶颈要从克服自己对一切瓶颈的偏见做起,把逃避瓶颈的行为变成享受瓶颈带来的乐趣的过程。要知道喜力比国产啤酒贵好多的一条重要原因就在于喜力的瓶颈:你现在去买一瓶玻璃瓶装喜力,用手握住瓶颈,大拇指按住那颗星,然后用你最熟悉的动作撸瓶颈,你会喜欢这种手感的。

 

Android布局和屏幕适配

 

Android初学者遇到的第一个瓶颈就是Android 布局的编写。首先Android的layout是用XML写的,而大多数大学生在大学阶段学习网页制作,都是用HTML绘制基本控件,然后用CSS进行页面美化;而Android却用XML绘制界面,style也是用XML写。学习XML最重要的熟能生巧,多练习练习就顺手了,另外XML和HTML有很多相似的地方,比如padding与margin的区别都是一样的。

 

此外Android系统碎片化严重,不同型号的手机有着不同的屏幕尺寸和不同的分辨率。为了解决这个问题,我们可以把背景贴图做成.9png格式,并且用内容和padding撑起控件。如果需要适配的机型实在太极端,我们可以百分比布局解决这个问题——PercentRelativeLayout和PercentFrameLayout等。

 

不同组件的生命周期

 

Android初学者遇到的第二个瓶颈就是生命周期,Android的生命周期主要有Activity生命周期、Fragment生命周期、Service生命周期三种。学不好Activity的生命周期,你做不好界面跳转的特效,也做不好系统Activity(相机等)的回调;学不好Fragment的生命周期,你写不出惰性加载;学不好Service的生命周期,你连后台运行都做不到。学习生命周期,要记住“文无图时少直观,图无文时难入微”,用图表辅助记忆。

 

网络请求和json解析

 

Android是移动互联网的重要组成部分,网络请求和Json解析是Android学习中的重要环节,很多初学者会在此处遭遇瓶颈。

 

为了突破这个瓶颈,初学者应该先选择合适的框架以尽快解决实习工作中的问题。常用的网络请求框架有Volley和OKHttp等;常见的json解析框架有Gson和Jackson等,如果你的求职目标是阿里巴巴集团,学习一下FastJson是可以助你一臂之力的;此外还有把网络请求和json解析整合到一起的Retrofit。

 

实习生初入企业,要记住用工作时间解决工作中的问题,知识的探索和能力的提升要利用自己的业余时间。下班后要学习以上框架的源码和实现原理,比如Android的网络请求必须在子线程中进行,否则会造成NetworkOnMainThreadException;现在的网络请求都是基于HttpURLConnection的,任何大谈HttpClient的资料都是过时的;还要弄清楚Handler的原理、ThreadPool的原理、AsyncTask的原理等;json解析方面的知识还有JSONObject和JSONArray的区别、Java的泛型机制、Java的反射机制等等。

 

图片加载和内存优化

 

Android机的价位一般比iPhone低得多,所以Android系统比iOS系统更容易遇到内存溢出问题(OutOfMemoryError,简称:OOM),这也是初学者常见的学习瓶颈之一。OOM最多发于图片,其次布局中嵌入的地图、视频等吃内存大户也是OOM的罪魁祸首之一。

 

解决加载图片的OOM应该先选择Picasso、Glide、Fresco等框架以尽快解决工作中的问题,然后利用个人时间学习Android缓存机制——LruCache和DiskLruCache;地图、视频的OOM应该在界面被回收时清除控件、停止服务;其他的OOM应该用弱引用和软引用解决。

 

RecyclerView

 

Android最常用也是最复杂的控件是RecyclerView(2014及以前的资料是ListView),因为滑动冲突、列表中数据修改等问题都会在RecyclerView中体现。为了克服这些瓶颈,必须要搞清楚RecyclerView.Adapter(也包括以前的BaseAdapter)的工作原理,ViewHolder的工作原理,以及ViewGroup的事件分发机制等内容,这些内容不下大力气学习是不能完全掌握的。

 

克服了以上瓶颈后,估计实习生也该到了毕业转正的时间了,进阶路上还有新的瓶颈。新瓶颈有新的玩法:这种玩法需要双手操作,如果用另一只手按住打开着的瓶口撸瓶颈,你可以一边撸一边使劲摇,玩HIGH的时候突然松开按住瓶口的手。

 

自定义控件

 

Android自带的控件不能满足太复杂的界面控件需求,因此绘制自定义控件也是Android工程师的必备技能。绘制自定义控件需要掌握View的几个常见方法的重写,如onDraw()、onMeasure()、onLayout()等;对事件分发机制的了解也应该比RecyclerView更精熟;此外还需要掌握Canvas和Animator的相关知识,Android的Canvas和HTML5的Canvas有很多相似性,可以以此突破Canvas的学习瓶颈。

 

进程间通信

 

不同App之间以及同一个App的不同进程之间需要多进程通信,多进程通信在视频播放等占用大量资源的场合是很有必要的。进程间通信的初学者百度“多进程”会被AIDL绕得云里雾里,其实你只要试试Messenger框架,一切进程间通信的难题都会迎刃而解。

 

Android性能全面优化和crash分析

 

Android初学者会遇到的最后一个瓶颈是Android性能全面优化。前面提到的Android内存优化是Android性能优化中最重要的部分,但也只是一小部分,Android性能优化还包括安装包体量优化、GUI绘制优化、电量和流量优化等。

 

GUI方面可以利用ViewStub和去掉其他不必要的背景来避免OverDraw;安装包体积可以用压缩图片、去除重复且无用的依赖等方式进行优化;电量和流量可以通过用推送代替轮询、用GZIP文件格式下载过长的数据流等方式进行优化。

 

在移动应用性能方面,崩溃(Crash)带来的影响是最为严重的,Crash指App在运行过程中出现大段用户正在进行的操作的强制关闭现象。Crash会造成关键业务中断、产品口碑变差、用户流失等问题。Crash可以用UncaughtExceptionHandler捕捉,也可以利用UMeng和Bugly等服务分析,请注意:如果打算跳槽到阿里,就用UMeng,想要跳槽到腾讯,就用Bugly。

 

突破了上述所有瓶颈以后,Android程序员的技术水平都可以达到独当一面的程度,甩掉了初学者帽子的程序员会发现头顶不再是瓶颈,而是从技术到管理的天花板。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android:手把手教你 实现Activity 与 Fragment 相互通信(含Demo)
  • android自定义圆角背景实现富文本标题展示
  • 自定义收集用户行为统计库 (非常方便 可以自己拓展)
  • Android 6.0 Phone"通话显示"查询流程
  • Android缓存处理
  • 自定义进度条PictureProgressBar——从开发到开源发布全过程
  • 详解Android中的SQLite数据库存储
  • Android设备上获取照片、裁剪图片、压缩图片
  • Android触摸事件分发机制完全解析《一》
  • Android-SQLite和SQLiteOpenHelper

相关文章

  • 2017-05-26Handler消息传递机制(二)Handler,Loop,Message,MessageQueue的工作原理
  • 2017-05-26[android] 手机卫士保存密码时进行md5加密,androidmd5
  • 2017-05-26Java字节流在Android中的使用,java字节流android
  • 2017-05-26关于TCP MSS的内核设置
  • 2017-05-26深入理解 Android 之 View 的绘制流程,androidview
  • 2017-05-26从视频中每X秒创建一个缩略图
  • 2017-05-26Android—ZXing二维码扫描遇到的问题,androidzxing
  • 2017-05-26Xamarin.Forms+Prism(2)—— 基本使用 NavigationService,xamarin.forms
  • 2017-05-26Android View事件分发机制
  • 2017-05-26oracle 代码报错大全分析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android Studio下运行开源项目9GAG遇到的问题
    • zabbix 应用系列之nginx tcp stream监控
    • Android MotionEvent详解
    • Android Support 包知识,androidsupport
    • Android学习笔记-Button(按钮),android-button
    • 安卓组件------列表选择框,安卓组件------列表
    • Linux内核系列—9.操作系统开发之Loader,linuxloader
    • android http下载视频到指定目录,android目录
    • 【同行说技术】Android程序员从小白到大神必读资料汇总(三),android资料汇总
    • 自动完成文本框(AutoCompleteTextView与MultiAutoCompleteTextView)关联适配器,文本框autocomplete

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有