android开发进阶,Android开发进阶 从小工到专家

《Android开发进阶从小工到专家》epub下载在线阅读全文,求百度网盘云资源

《Android开发进阶》(何红辉)电子书网盘下载免费在线阅读

专注于为中小企业提供成都网站设计、网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业含山免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

资源链接:

链接:

提取码: 0q3x  

书名:Android开发进阶

作者:何红辉

豆瓣评分:6.0

出版社:人民邮电出版社

出版年份:2016-2-1

页数:378

内容简介:

本书是一本专门介绍Android开发的图书。书中首先对Android开发的核心知识点进行深入讲解,然后介绍单元测试、代码规范、版本控制、重构、架构等重要的知识,使得读者在深入掌握技术的同时也帮助他们开阔眼界,且能够以更专业的方式设计应用软件,完成从只会实现功能的初级程序员到软件工程师、设计师的转变。

本书的主要内容为:构成Android系统基石的四大组件、创造出丰富多彩的UI设计的控件、保证App流畅的多线程开发、必知必会的HTTP网络请求应用、数据存储的核心SQLite数据库、让程序的性能优化、让程序更整洁的代码规范、管理程序的好帮手Git版本控制,以及需要掌握的高级技术,如单元测试、六大原则与设计模式、重构和综合实战等。

本书适合Android开发初学者、程序员学习,也适合作为大中专院校相关专业的师生用书和培训学校的教材。

作者简介:

何红辉 : 前友盟(阿里巴巴集团)Android工程师,CSDN博客专家,活跃于国内各大技术社区,热爱开源,热爱技术,热爱分享。Android事件总线开源库(AndroidEventBus)、Colorful作者,开发技术前线站长。

Android 开发进阶:Kotlin Coroutines 使用详解

还记得第一次听到 Coroutines 的时候,纳闷了一下,口瑞停,这是什么新的番号招式(误),之后其实也没有多在意了,好一段时间,因为一个档案的 I/O 会把 UI Thread 卡住,必须要用异步程序去处理,写 Handler Thread 可以避免,这也是最基础的方式,缺点也很明显某些时候还是避不掉,写 RX 又总觉得微妙感觉有点杀鸡用牛刀的感觉,后来看了一下决定用 Coroutines ,于是有了本篇文章。

普通情况下,执行的顺序会是很直白的 functionA() - functionB() - functionC() 。

如果只有一个 thread ,这样很顺畅没问题。

但假如这是一个跑在 main thread 上,而 ·function A· 是需要另一个 thread 的处理结果,而该结果是需要该 thread 耗费长时间作业才可以获得的。这边姑且称为 IO thread 好了。那不就意味着 function A 得等到 IO thread 处理结束并告知结果才能继续执行 function A 乃至 function B 之后才是 function C 呢?

那在等待 function A 的时候 main thread 啥事都不能做,只能 idle 在那边动也不动。

这如果是在 Android main thread 上,这样的行为会让画面 freeze ,时间稍微长一点就会 ANR 被 OS 当作坏掉进行异常排除了。

其实这个异步问题解决方案很多,诸如自己写一个 callback ,或者自干 Handler thread 去控管或者是用 RX ,去订阅之类。某些时候显得不直观,或者使用起来麻烦,总有种杀鸡何需使用牛刀的感觉。

那有没有可能?我就写成上面那样,但是当 function A 在等待 IO thread 时,让 main thread 去做其他的事情,等到 IO thread 结束耗时处理后,再回来继续执行 function A , function B 、 function C 呢?

是的,可以,这个解决方案便是 Coroutine 。

Coroutines ,这个单字会被标成错字,理由是他其实是两个单字合并而成的,分别是 cooperation + routine, cooperation 意指合作,routine 意指例行作业、惯例,照这里直接翻译就会是合作式例行作业。

想到辉夜姬让人想告白提到了惯例行为,也是念作 routine

那我们看到的翻译多半会是协程、协作程序…这样讲没啥前后感,谁协助程序?协助啥程序? 总之就是满头的问号。

这里 routine 指得是程序中被呼叫的 function、method ,也就是说,我们将 function 、method 协同其他更多的 function、method 共同作业这件事情称为 Coroutines 。

协同作业听起来还是很抽象,具体协同什么呢?

这便是 Coroutines 最典型的特色,允许 method 被暂停( suspended)执行之后再回复(resumed)执行,而暂停执行的 method 状态允许被保留,复原后再以暂停时的状态继续执行。

换句话说,就是我在 main thread 执行到 function A 需要等 IO thread 耗时处理的结果,那我先暂停 function A , 协调让出 main thread 让 main thread 去执行其他的事情,等到 IO thread 的耗时处理结束后得到结果后再回复 function A 继续执行,已得到我要的结果,这便是 Coroutines 的概念,这听起来不是很简单了呢?

事实上这个概念早在 1964 年就已经被提出了,而很多语言也都有这样的概念,只是 Android 上头类似的东西一直没有被积极推广,直到 Kotlin 成为官方语言后, Coroutines 以 Support Library 的形式被推广才又在 Android 业界流行起来。

首先,因为 Kotlin 的 Coroutine 并没有包含在原有包装中,而是以 Support Library 的形式提供开发者使用,所以需要另外导入该 Library。

这里选用这个版本进行演示,实际中可以根据自己的需要修改版本。

那因为是在 Android 上使用的, Android 上头的 main thread 跟普通 java 有点不一样,所以还需要另一个 implementation,不然会报错。

导入之后就可以开始使用了。

这边我想做的是画面上有一个会倒数的 Text ,用 Coroutines 可以简单地做到

那跑起来结果就像这样:

这样如果要 Thread 有相同的结果可以写成这样:

这样会有什么问题就是另一个故事了,至少现在这样不会马上出现 Exception (最常见的就是使用者离开画面没多久就出现一个 Exception),不过也并不是说用 Coroutines 就不会发生这些问题,记得这些做法没有什么优劣,差别在都选择就是了。

说回 Coroutines ,那跟 Thread 一样,某些时候我们会想要临时把它停住,那 GlobalScope.launch 会回传一个 Job class 的玩意

想要把它停住的话就用 cancel 即可

Scope 指得是范围, Coroutines 可以作用的范围。在 Main thread 上或是 IO thread 上,又或者希望开更多的 Worker thread,然后是可以在某个控制流(e.g Activity 的生命周期)中可被控制的。

原则上,在 Kotlin 里头使用任何标记 suspend 的 method(后面会提)都会在 Scope 里面,这样才可以控制 Coroutines 的行进与存活与否。

那这边举的例子, GlobalScope 继承自 CoroutineScope 。它是 CoroutineScope 的一个实作,它的概念就是最高层级的 Coroutines ,它的作用的范围伴随着 Application 的生命周期,那其实他的概念与 Dispatch.Unconfined 相同(待会会提到),用他其实可以避免 Coroutines 被过早结束,但也要记得是,这个用法类似直接呼叫静态函数,需要注意。

那如果直接实作 CoroutineScope 呢?

那会要求实作一个 CoroutineContext ,这是什么玩意?指的就是 Coroutines 作用的情景,这边可以指定他是在 Main thread 上或者就直接弄一个 Job 给他:

这样 launch 的时候就会使用这个 Job 来操作了,如果没有特别定义,那这个 Job 就是跑在 Worker thread 上了,用它更新 UI 会出现 Exception ,这方面可以依据自己的需求去做调整。

不过更多时候我会希望他能够跑在 Main Thread 上, Koltinx Coroutine 有提供 CoroutineScope 的实作 - MainScrope

android软件开发工程师的进阶之路应该如何走

小明首先需要购买一本Android入门的书籍,为了更快地学习Android,小明业余时间也都用来一边看书一边照着书中的例子敲代码,结果2周时间小明就把这本书学了一遍。看完这本书后,小明对Android的历史、结构、代码规范等都有了一个大概的了解,并且,小明已经可以写出一些简单的Activity了。这个时候在小明眼里,Android开发很简单很好玩,通过在xml中摆放一些按钮文本框什么的就可以做一些界面了。

小明开始跟着他的技术导师做需求,一些简单的小需求小明自然是不在话下了。突然有一天来了一个需求,该需求要求小明在Activity中为一个button加一个动画效果,小明慌了:“完全没接触过,书上也没有讲,怎么办呢?”小明冷静了下,打开了百度搜索,输入“Android 动画”,打开前几个链接,小明恍然大悟,照着网上的例子把需求给实现了。后来导师告诉他:“学好Android,官方文档是必须看的,既全面又权威”。然后小明如获至宝,花了一年时间把上面的guide和training都看了一遍,并且他还动手抄了几个小例子。

有一天,小明又需要做一个动画相关的需求,这可难不倒小明,它熟练地打开了,输入“Android 动画”,突然他楞了一下:”总不能每次写动画都要百度一下吧!“,于是他在CSDN开了一个博客,把动画相关的知识点都写上去,为的是后面再写动画相关的代码就不用百度去搜了,事实如何呢?后面再写动画相关的代码,小明的确不用再去百度搜了,因为通过写一篇动画博客,他把动画相关的细节都已经记住了,这样他就可以不用再去参考任何文档了,后来小明还学会了把一些琐碎的不方便放在博客上的东西写到了印象笔记上面,什么时候忘了10秒钟以内都可以快速找回来,而不是花10分钟去再次搜索一遍。

这里总结一下,Android入门的时候,需要有一本入门书,好好学习书中的内容,同时花一年时间把Android官方文档中的training和guide看一遍,同时通过写博客和记笔记的方式来做总结,建议让自己的每篇博客都有价值些。通过一年时间的学习,相信每个人都可以达到中级工程师的水平。

技术要求:

- 基本知识点

比如四大组件如何使用、如何创建Service、如何进行布局、简单的自定义View、动画等常见技术

- 书籍推荐

《第一行代码 Android》、《疯狂Android》

中级工程师

小明经过一年的努力学习终于成为Android中级工程师了,月薪变成了17k。到了中级工程师,已经可以在公司里干很多体力活了,但是一些很重要的任务小明还不能一个人承担起来,这个时候小明需要学习的内容就很多了,如下所示:

- AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的区别;

- Binder:从Java层大概理解Binder的工作原理,懂Parcel对象的使用;

- 多进程:熟练掌握多进程的运行机制,懂Messenger、Socket等;

- 事件分发:弹性滑动、滑动冲突等;

- 玩转View:View的绘制原理、各种自定义View;

- 动画系列:熟悉View动画和属性动画的不同点,懂属性动画的工作原理;

- 懂性能优化、熟悉mat等工具

- 懂点常见的设计模式

学习方法

阅读进阶书籍,阅读Android源码,阅读官方文档并尝试自己写相关的技术文章,需要有一定技术深度和自我思考。在这个阶段的学习过程中,有2个点是比较困扰大家的,一个是阅读源码,另一个是自定义View以及滑动冲突。

如何阅读源码呢?这是个头疼的问题,但是源码必须要读。阅读源码的时候不要深入代码细节不可自拔,要关注代码的流程并尽量挖掘出对应用层开发有用的结论。另外仔细阅读源码中对一个类或者方法的注释,在看不懂源码时,源码中的注释可以帮你更好地了解源码中的工作原理,这个过程虽然艰苦,但是别无他法。

如何玩转自定义View呢?我的建议是不要通过学习自定义view而学习自定义view。为什么这么说呢?因为自定义view的种类太多了,各式各样的绚丽的自定义效果,如何学的玩呢!我们要透过现象看本质,更多地去关注自定义view所需的知识点,这里做如下总结:

- 搞懂view的滑动原理

- 搞懂如何实现弹性滑动

- 搞懂view的滑动冲突

- 搞懂view的measure、layout和draw

- 然后再学习几个已有的自定义view的例子

- 最后就可以搞定自定义view了,所谓万变不离其宗

大概再需要1-2年时间,即可达到高级工程师的技术水平。我个人认为通过《Android开发艺术探索》和《Android群英传》可以缩短这个过程为0.5-1年。注意,达到高级工程师的技术水平不代表就可以立刻成为高级工程师(受机遇、是否跳槽的影响),但是技术达到了,成为高级工程师只是很简单的事。

技术要求:

- 稍微深入的知识点

AIDL、Messenger、Binder、多进程、动画、滑动冲突、自定义View、消息队列等

- 书籍推荐

《Android开发艺术探索》、《Android群英传》

高级工程师

小明成为了梦寐以求的高级工程师,月薪达到了20k,还拿到了一丢丢股票。这个时候小明的Android水平已经不错了,但是小明的目标是资深工程师,小明听说资深工程师月薪可以达到30k+。

为了成为Android资深工程师,需要学习的东西就更多了,并且有些并不是那么具体了,如下所示:

- 继续加深理解”稍微深入的知识点“中所定义的内容

- 了解系统核心机制:

1. 了解SystemServer的启动过程

2. 了解主线程的消息循环模型

3. 了解AMS和PMS的工作原理

4. 能够回答问题”一个应用存在多少个Window?“

5. 了解四大组件的大概工作流程

6. …

- 基本知识点的细节

1. Activity的启动模式以及异常情况下不同Activity的表现

2. Service的onBind和onReBind的关联

3. onServiceDisconnected(ComponentName className)和binderDied()的区别

4. AsyncTask在不同版本上的表现细节

5. 线程池的细节和参数配置

6. …

- 熟悉设计模式,有架构意识

学习方法

这个时候已经没有太具体的学习方法了,无非就是看书、看源码和做项目,平时多种总结,尽量将知识融会贯通从而形成一种体系化的感觉。同时这个阶段对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习。关于设计模式的学习,最近一本新书推荐给大家《Android 源码设计模式解析与实战》,既可以学习设计模式,又可能体会到Android源码中的设计思想,我最近也在阅读此书。

技术要求:

- 稍微深入的知识点

- 系统核心机制

- 基本知识点的细节

- 设计模式和架构

- 书籍推荐

《Android开发艺术探索》、《Android 源码设计模式解析与实战》、《Android内核剖析》

资深工程师

这个阶段的程序员也许并没有太具体的学习路线了。

怎么学好Android开发

说的是刚刚起步学习的同学,假如开始没有任何的开发经验的话,千万不要着急,不要想着在短时间内就把一个语言学习好,因为你之前没有任何的学习经验,在这个过程中需要有耐心地学习完JAVA的基础知识,然后才开始踏上Android开发之旅。一类同学是只之前做过JAVA开发经验的,这类同学可以在Android上迅速上手,但是同样的是不可忽略Android的一些基础知识,只有把基础掌握好了,才能在后期取得大的进步。 二、Android基础知识学习 在掌握好JAVA基础知识后,接下来就是学习Android基础知识和如何查看开发文档了,在这个阶段我认为是学习最有劲头和最有收获的时候,因为从一无所知到了解是会让人有收获良多的感觉,事实上在这一阶段也是学习了很多,至少知道如何建立工程,知道一些基本的机制很常用函数的用法,这个阶段会出现很多的问题,往往一个很低级的问题都会把你难倒,而这阶段正式培养学习能力的好时机,还是那句话,凡是遇到问题第一个想的是自己去解决,自己解决不了的,用百度用谷歌,要学会使用搜索引擎,大部分的时候问题都能得到解决,因为你遇到过的问题别人早就遇到过了,假如搜索引擎也找不到好的答案,这时候可以到论坛发帖问,网上牛人很多,也可以选择到群里咨询。 三、Android开发进阶 学习完Android基础知识以后,很多同学很快就会感觉到学习停步不前,感觉自己似懂非懂,我觉得这个时候是学习最关键的时候,因为一旦你踏出这一步之后,你对Android的理解就会跟更加透彻,做起开发也会更加有信心,但是怎样跨过这一阶段,我根据自己的经验是首先是保持对自己的信心,自己找一个比较简单的项目做做或者找一些应用的源代码研究研究,然后自己山寨出来一个,这样你也会有了学习的方向,因为你在了解了基础知识以后急切需要证明一下自己到底是学到了什么东西,而开发出一个自己的简单应用,就是最大的证明了,而且在开发应用的时候,肯定会遇到很多的问题,而在独立解决bug的同时,你已经掌握了独立处理问题的能力。

Android 开发有什么进阶的书么

Android方面进阶的书籍很少,如果要只几本:

《Android开发艺术探索》

《APP研发录》

《Android高级进阶》

《深入理解Android内核设计思想》

这几本书非常值得一读。

进阶除了理论外,更多的是经验和更深入地思考,这些都是需要亲身实践才会印象深刻,就算你看了书,也不一定能够吸收,因为你没遇到过,可能无法理解其中的含义。举几个例子:

在java的finallize方法中释放与类相关的资源是不靠谱的;

在onCreate方法中直接显示PopupWindow会挂掉;

e.printStackTrace会比较耗时(频繁调用就知道了);

Activity设置为透明主题后,某些系统回调方法不会被调用;

这些知识在没有亲身实践之前去看书或者官方文档,多半会一带而过,但遇到这些问题之后去看书或者查资料会让你更加印象深刻,很难忘记。

还有到了一定程度,就不能只专注于Android了,要想更好地理解每个知识点,需要看其它方面的书和阅读源码。比如网络方面需要熟悉网络协议;性能方面需要了解算法、JVM和操作系统原理;程序设计需要了解设计模式;要了解某一个类的实现原理需要阅读源码;音方面需要了解编解码、数字信号处理方面的内容


本文名称:android开发进阶,Android开发进阶 从小工到专家
文章分享:http://ybzwz.com/article/dsddpep.html