A. 学安卓开发的话难不难和java比哪个好学
阅读进阶书籍,阅读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群英传》
B. 学Android看哪本书最详细
学习安卓入门的话可以看郭神的《第一行代码》(第三版),进阶可以看任玉刚的《Android开发艺术探索》
缩放图片可以用PhotoView框架:网页链接
制作二维码可以用ZXing框架:网页链接
C. 怎么准备Android面试
总体上来说可以分为两种类型,小公司注重你的实践能力,大公司看中你的综合能力。小公司面试会比较集中安卓开发这一块,比较在意你之前有没有类似的项目经验,有没有遇到过目前他们所遇到的一些问题,准备这类公司面试除了基本的一些知识点还需要关注一些安卓开发实际中经常遇到的一些问题,诸如图片缓存,常见的开源框架,oom问题等等。大公司面试比较在意你的综合能力,无外乎是数据结构与算法,计算机网络,操作系统,Java这。我想说在我列出的这么多考查点中,数据结构与算法是一个分水岭,这个的准备需要一个长时间的积累,真正的高手与一般人一试就知道,屡试不爽,所以很多公司都痴迷于考算法,像是美团,网络,爱奇艺等公司,总共整个面试下来可以让你手写5个算法题以上,我说这么多只想告诉你这是一个门槛,能不能跨过去决定了你最终所找工作的水准,所以我都会建议每一个找程序员相关工作的人,这一块要尽早准备,多刷一些leetcode或是其他类似的题。然后在剩下的几块知识中,我只想说你可以不用全部都懂,但是你必须要在某一块知识点是有深入研究的,能够回答面试官4到5个追加问题,如果所以知识点都只能答上一到两个,面试官会觉得你的水平就是这样了,另外也会觉得你没有探究精神,关于后面一点是很恐怖的没有探究精神做不了好的程序员。如果按照重要程度,面试安卓我觉得可以做一个这样的排序:数据结构与算法,java,安卓,计算机网络,操作系统,后面是数据库或是设计模式之类的。java这一块比较重要的是多线程同步异步,java虚拟机内存回收,容器,面向对象一些知识点。就单单是多线程和虚拟机都可以看好几本专门讲解的书了,其他知识点就多啃啃java编程思想,遇到不懂在多翻翻博客加深理解。安卓这一块,异步机制,view的绘制,自定义控件,四大组件都非常重要。不管是android或是java都最好看一些源码,java可以看一些容器的源码,android可以看handler,looper,message等异步通信的源码或是一些开源框架的源码,会看源码绝对是加分项。计算机网络可以注重看上面几层,传输层注重研究。一般来说,前面这几点掌握好了,足以聊好几轮面试,一般面试官你都可以引导他去聊一些你擅长的知识点。后面几块知识点,你可以先掌握一些比较重要的,不一定每次面试都会遇到,但是也得准备。
我只提供一些大概的思路,具体到没一块知识点怎么准备可以自己去搜集,大的方向对了加上好的执行力一般可以取得不错的结果,祝好!
2016.03.14更新,加一些具体的准备建议:
上面这几块知识点,按照其重要程度排序,我个人认为可以这样排:数据结构与算法,Java,Android(如果不找安卓的就去掉这部分),计算机网络,操作系统,设计模式。下面我就按照这个顺序给出一些准备建议。
Ø 数据结构与算法
推荐书籍:大话数据结构,数据结构与算法分析(java语言描述),剑指offer,进军硅谷。
推荐在线刷题网站:Leetcode(LeetCode Online Judge),Lintcod(LintCode - 主页),牛客网(在线编程_C++Java前端经典笔试面试题库)
推荐方案:主要做三件事。
1, 先看一遍大话数据结构,熟悉一些基本概念,大话这本书只讲了一些基本的数据结构,像是B树,B+树,红黑树需要自己看一些博客或是网站,推荐一个讲解算法的网站-七月算法,另外海量数据处理也是一个经常考的专题,它结合了数据结构和操作系统的一些知识,这个需要进行针对性准备。
2,然后开始刷题,最推荐的肯定是leetcode,刷题建议按照标签进行刷题(比如队列,栈,哈希表),刷题从易到难,最好能够刷一百题左右,如果一天一题,至少要三个月以上,所以这个耗时比较长,要从比较早开始准备。进军硅谷这本书有按照专题进行编排,基本上的题目来自leetcode,可以作为一个参考。
2, 然后要分析一些常见数据结构的源码实现(比如队列,栈,hashmap之类的),数据结构与算法分析这本书有讲一些,可以结合一些博客进行准备。
Ø Java
找程序员工作,大多数情况下需要掌握好一门面向对象的语言,主流上分为Java和C++两大阵营。这里讲Java需要怎么准备。
入门书籍:Java核心技术卷一,Head first in java(如果一点面向对象的概念都没有那就看这本)
提高书籍:Java编程思想
Java虚拟机:深入理解Java虚拟机
Java多线程:Java多线程编程核心技术,Java并发编程实践
其实我觉得如果有一定基础建议直接看Java编程思想,面试中的考点经常都会在这本书中有讲到。当然Java虚拟机和多线程这两块需要再看一些专门讲解的书,每一次java面试考查内容几乎都离不开这两块。
总体来说java考察内容包括以下这些:
1,面向对象的一些基本概念:继承,多态之类的
2, 抽象类和接口
3, 静态类,内部类
4, Java集合类,同步和异步
5, Java类加载机制
6, Java内存模型和垃圾回收算法
7, 线程同步机制(volatile,synchronized,重入锁,threadlocal),线程间通信(wait,notify)
8, 异常处理
9, 多线程同步问题,生产者消费者,读者写者,哲学家就餐,用java实现
10,
了解java中设计模式的思想,用了哪些设计模式,有什么好处
Ø Android
入门书籍:第一行代码。
提高书籍:Android群英传,Android开发艺术探索。
上面的书看好了,一般问题不大。主要问的一些问题:
1, Activity,Service,BrocastReceiver,Intent,Fragemnet,ContentProvider,这些组件的基础知识,比如Activity两种启动方式,生命周期,四种启动模式,Service则主要是:两种启动方式,生命周期。还有组件之间怎么通信之类的问题。
2, Android的数据存储方式,数据库,sd卡,SharedPreferences 这些
3, Listview的优化,与scollview的区别
4, view状态与重绘,view的绘制过程,view的事件分发机制,view的事件冲突处理
5, Android多线程异步机制,AsyncTask工作原理与源码实现,Handler,Message,Looper异步实现机制与源码分析
6, Android常见的开源框架(主要是网络通信,图片加载这些),了解怎么使用,分析源码
7, Oom和anr异常引发的原因,怎么解决
8, 了解一些常见的图片缓存技术
Ø 计算机网络
推荐书籍:计算机网络自顶向下,tcp/ip协议详解卷一
主要看:主要看应用层,传输层,网络层,其中传输层最为重要。主要的一些考察内容有:
1, TCP和UDP的区别
2, TCP的三次握手,和四次挥手,为什么需要三次握手,为什么要四次挥手(这两个为什么要考虑非常清楚)
3, TCP拥塞控制算法(慢启动,拥塞避免,快速恢复),流量控制算法,滑动窗口协议,选择重传。
4, TCP可靠性是怎么保证的(通过哪些机制保证)?
5, HTTP协议报文格式,请求方法字段以及各个方法之间的区别,了解常见的响应状态码,了解cookie机制,了解WEB缓存技术(条件get方法)。
6, DNS协议的各层域名服务器,两种查询方式(递归和迭代),dns缓存
7, Udp的特点,适用场景,校验机制
8, 从输入一个网址到最后网页显示整个过程发生了什么?
9, IP地址组成,ARR,RARP,ICMP协议,路由选择算法
D. 如何学习安卓软件开发
一、前言
不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知。懂的越多的时候你才会发现懂的越少。
如果你的知识是一个圆,当你的圆越大时,圆外面的世界也就越大。
最近看到很多Android新手问Android学习路线,学习方法啊,如何入门啊,所以我从网上找了一些资料,然后以我的工作经验给大家总结一下,让你们少走弯路,提取一些工作中经常用到的技术。
二、学习知识汇总1、Java se基础
1).Java基本数据类型与表达式,分支循环。
2).String和StringBuffer的使用、正则表达式。
3).面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收;构造函数、this关键字、方法和方法的参数传递过程、static关键字、内部类。
4).对象实例化过程、方法的覆盖、final关键字、抽象类、接口、继承的优点和缺点剖析;对象的多态性:子类和父类之间的转换、抽象类和接口在多态中的应用、多态带来的好处。
5).Java异常处理,异常的机制原理。
6).常用的设计模式:Singleton、Template、Strategy模式。
7).JavaAPI介绍:种基本数据类型包装类,System和Runtime类,Date和DateFomat类等。
8).Java集合介绍:Collection、Set、List、ArrayList、LinkedList、Hashset、Map、HashMap、Iterator等常用集合类API。
9).JavaI/O输入输出流:File和FileRandomAccess类,字节流InputStream和OutputStream,字符流Reader和Writer,以及相应实现类,IO性能分析,字节和字符的转化流,包装流的概念,以及常用包装类,计算机编码。
10).Java高级特性:反射和泛型。
11).多线程原理:如何在程序中创建多线程(Thread、Runnable),线程安全问题,线程的同步,线程之间的通讯、死锁。
2、android UI编程
1)、Android开发环境搭建:Android介绍,Android开发环境搭建,第一个Android应用程序,Android应用程序目录结构。
2)、Android初级控件的使用:
TextView控件的使用
Button控件的使用方法
EditText控件的使用方法
ImageView的使用方法
RadioButton的使用方法
Checkbox的使用方法
Menu的使用方法
3)、Android高级控件的使用:
ListView的使用方法
GridView的使用方法
Adapter的使用方法
Spinner的使用方法
Gallary的使用方法
ScrollView的使用方法
RecyclerView
4、对话框与菜单的使用:
Dialog的基本概念
BlockquoteAlertDialog的使用方法
DatePickerDialog的使用方法
Menu的使用方法
自定义Menu的实现方法
5.控件的布局方法:
线性布局的使用方法
相对布局的使用方法
6.多Acitivity管理:
AndroidManifest.xml文件的作用
Intent的使用方法
使用Intent传递数据的方法
启动Activity的方法
IntentFilter的使用方法
Activity Group的使用方法
7、自定义控件实现方法:
自定义ListView的实现方法
可折叠ListView的使用方法
自定义Adapter的实现方法
自定义View的实现方法
动态控件布局的上实现方法
上拉刷新下拉加载更多
3、android网络编程与数据存储
1).基于Android平台的HTTP通讯:
Http协议回顾
使用Get方法向服务器提交数据的方法
使用POST方法向服务器提交数据的实现方法
使用Http协议实现多线程下载
使用Http协议实现断点续传
2).Android数据存储技术:
SQLite3数据库简介
SQL语句回顾
SQLite3编程接口介绍
SQLite3事务管理
SQLite3游标使用方法
SQLite3性能分析
访问SDCard的方法
访问SharedPreferences的方法
参考自:Android学习路线
三、进阶之路(初级->中级->高级)1、初级工程师
小明之前完全没接触过Android开发,是个应届生,他的待遇是13k,然后小明以校招的身份进入了网络,然后小明需要怎么学习才能成为初级工程师呢?这个时候,小明对编程基础、数据结构、C语言都有一定基础,Java语法什么的也都掌握的比较好,Android才有java语言,无奈的是小明并不会搞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》
2、中级工程师
小明经过一年的努力学习终于成为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群英传》
3、高级工程师
小明成为了梦寐以求的高级工程师,月薪达到了20k,还拿到了一丢丢股票。这个时候小明的Android水平已经不错了,但是小明的目标是资深工程师,小明听说资深工程师月薪可以达到30k+。
为了成为Android资深工程师,需要学习的东西就更多了,并且有些并不是那么具体了,如下所示:
继续加深理解”稍微深入的知识点“中所定义的内容
了解系统核心机制:
了解SystemServer的启动过程
了解主线程的消息循环模型
了解AMS和PMS的工作原理
能够回答问题”一个应用存在多少个Window?“
了解四大组件的大概工作流程
…
基本知识点的细节
Activity的启动模式以及异常情况下不同Activity的表现
Service的onBind和onReBind的关联
onServiceDisconnected(ComponentName className)和binderDied()的区别
AsyncTask在不同版本上的表现细节
线程池的细节和参数配置
…
熟悉设计模式,有架构意识学习方法
这个时候已经没有太具体的学习方法了,无非就是看书、看源码和做项目,平时多种总结,尽量将知识融会贯通从而形成一种体系化的感觉。同时这个阶段对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习。关于设计模式的学习,最近一本新书推荐给大家《Android 源码设计模式解析与实战》,既可以学习设计模式,又可能体会到Android源码中的设计思想,我最近也在阅读此书。
技术要求:
稍微深入的知识点
系统核心机制
基本知识点的细节
设计模式和架构
书籍推荐
《Android开发艺术探索》、《Android 源码设计模式解析与实战》、《Android内核剖析》
参考自:Android学习路线指南
四、学习视频跟书籍
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的,我这里给你们整理了大概80G的学习视频跟书籍,赶快点我点我点我。。。下载。。
附上出处链接:https://www.hu.com/question/21112875/answer/97586938
E. Android开发艺术探索IPC章节疑问,阅读过此书的高手请指导一下。不懂的请别乱cv瞎回复 谢谢。
模糊
F. 怎样从零开始学习安卓软件开发
1、Java se基础
1).Java基本数据类型与表达式,分支循环。
2).String和StringBuffer的使用、正则表达式。
3).面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收;构造函数、this关键字、方法和方法的参数传递过程、static关键字、内部类。
4).对象实例化过程、方法的覆盖、final关键字、抽象类、接口、继承的优点和缺点剖析;对象的多态性:子类和父类之间的转换、抽象类和接口在多态中的应用、多态带来的好处。
5).Java异常处理,异常的机制原理。
6).常用的设计模式:Singleton、Template、Strategy模式。
7).JavaAPI介绍:种基本数据类型包装类,System和Runtime类,Date和DateFomat类等。
8).Java集合介绍:Collection、Set、List、ArrayList、LinkedList、Hashset、Map、HashMap、Iterator等常用集合类API。
9).JavaI/O输入输出流:File和FileRandomAccess类,字节流InputStream和OutputStream,字符流Reader和Writer,以及相应实现类,IO性能分析,字节和字符的转化流,包装流的概念,以及常用包装类,计算机编码。
10).Java高级特性:反射和泛型。
11).多线程原理:如何在程序中创建多线程(Thread、Runnable),线程安全问题,线程的同步,线程之间的通讯、死锁。
2、android UI编程
1)、Android开发环境搭建:Android介绍,Android开发环境搭建,第一个Android应用程序,Android应用程序目录结构。
2)、Android初级控件的使用:
TextView控件的使用
Button控件的使用方法
EditText控件的使用方法
ImageView的使用方法
RadioButton的使用方法
Checkbox的使用方法
Menu的使用方法
3)、Android高级控件的使用:
ListView的使用方法
GridView的使用方法
Adapter的使用方法
Spinner的使用方法
Gallary的使用方法
ScrollView的使用方法
RecyclerView
4、对话框与菜单的使用:
Dialog的基本概念
BlockquoteAlertDialog的使用方法
DatePickerDialog的使用方法
Menu的使用方法
自定义Menu的实现方法
5.控件的布局方法:
线性布局的使用方法
相对布局的使用方法
6.多Acitivity管理:
AndroidManifest.xml文件的作用
Intent的使用方法
使用Intent传递数据的方法
启动Activity的方法
IntentFilter的使用方法
Activity Group的使用方法
7、自定义控件实现方法:
自定义ListView的实现方法
可折叠ListView的使用方法
自定义Adapter的实现方法
自定义View的实现方法
动态控件布局的上实现方法
上拉刷新下拉加载更多
3、android网络编程与数据存储
1).基于Android平台的HTTP通讯:
Http协议回顾
使用Get方法向服务器提交数据的方法
使用POST方法向服务器提交数据的实现方法
使用Http协议实现多线程下载
使用Http协议实现断点续传
2).Android数据存储技术:
SQLite3数据库简介
SQL语句回顾
SQLite3编程接口介绍
SQLite3事务管理
SQLite3游标使用方法
SQLite3性能分析
访问SDCard的方法
访问SharedPreferences的方法
初级工程师
技术要求:
基本知识点
比如四大组件如何使用、如何创建Service、如何进行布局、简单的自定义View、动画等常见技术
书籍推荐
《第一行代码 Android》、《疯狂Android》
中级工程师
技术要求:
稍微深入的知识点
AIDL、Messenger、Binder、多进程、动画、滑动冲突、自定义View、消息队列等
书籍推荐
《Android开发艺术探索》、《Android群英传》
AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的区别;
Binder:从Java层大概理解Binder的工作原理,懂Parcel对象的使用;
多进程:熟练掌握多进程的运行机制,懂Messenger、Socket等;
事件分发:弹性滑动、滑动冲突等;
玩转View:View的绘制原理、各种自定义View;
动画系列:熟悉View动画和属性动画的不同点,懂属性动画的工作原理;
懂性能优化、熟悉mat等工具
懂点常见的设计模式
搞懂view的滑动原理
搞懂如何实现弹性滑动
搞懂view的滑动冲突
搞懂view的measure、layout和draw
然后再学习几个已有的自定义view的例子
最后就可以搞定自定义view了,所谓万变不离其宗
高级工程师
技术要求:
稍微深入的知识点
系统核心机制
基本知识点的细节
设计模式和架构
书籍推荐
《Android开发艺术探索》、《Android 源码设计模式解析与实战》、《Android内核剖析》
继续加深理解”稍微深入的知识点“中所定义的内容
了解系统核心机制:
了解SystemServer的启动过程
了解主线程的消息循环模型
了解AMS和PMS的工作原理
能够回答问题”一个应用存在多少个Window?“
了解四大组件的大概工作流程
…
基本知识点的细节
Activity的启动模式以及异常情况下不同Activity的表现
Service的onBind和onReBind的关联
onServiceDisconnected(ComponentName className)和binderDied()的区别
AsyncTask在不同版本上的表现细节
线程池的细节和参数配置
…
熟悉设计模式,有架构意识学习方法
-----------------------------------------------------------------
作者:小码同学
链接:https://zhuanlan.hu.com/p/163528281
来源:知乎
着作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
G. Android 开发中,有哪些坑需要注意
同一个应用的JNI代码,不要轻易换NDK编译的版本,否则会有很多问题(主要是一些方法实现不一样,并且高版本对代码的检测更严格),比如r8没有问题,但到r9就有问题了,这是个大坑;
Android的JNI代码中,有返回类型的函数没有返回值编译的时候也不会报错;
当前Activity的onPause方法执行结束后才会执行下一个Activity的onCreate方法,所以在onPause方法中不适合做耗时较长的工作,这会影响到页面之间的跳转效率;
谨慎使用Android的透明主题,透明主题会导致很多问题,比如:如果新的Activity采用了透明主题,那么当前Activity的onStop方法不会被调用;在设置为透明主题的Activity界面按Home键时,可能会导致刷屏不干净的问题;进入主题为透明主题的界面会有明显的延时感;
不要在非UI线程中初始化ViewStub,否则会返回null;
公共接口一定要考虑到代码重入的情况,能设计为单例就尽量用单例;
不要通过Bundle传递大块的数据,否则会报TransactionTooLargeException异常:java - Issue: Passing large data to second Activity
尽量不要通过Application缓存数据,这不稳定:不要在Android的Application对象中缓存数据!
尽量不要使用AnimationDrawable,它在初始化的时候就将所有图片加载到内存中,特别占内存,并且还不能释放,释放之后下次进入再次加载时会报错;
9图不能通过tinypng压缩,不然会有问题;
genymotion模拟器快是因为它是基于x86架构的,如果你的应用中用到了so,但没有x86架构的so,只能放弃使用它;Android Studio的模拟器也一样;
Eclipse的Android开发环境配置好后不要轻易升级ADT和build tools,不然会浪费你很多时间,还有就是一个workspace中的工程不要太多,不然每次启动都会很慢;
Android studio每个版本、gradle每个版本差别都比较大(我是这样认为的),对于jni代码的编译建议在Eclipse中进行,如果在Android studio中开发jni会浪费很多时间,主要是编译脚本的配置比较麻烦;
Eclipse中的Lint太不靠谱,特别是主工程中依赖library的时候,很多提示都是有问题的,建议使用Android Studio的工程清理工具,特别推荐;
不同API版本的AsyncTask实现不一样,有的是可以同时执行多个任务,有的API中只能同时执行一个线程,所以在程序中同时执行多个AsyncTask时有可能遇到一个AsyncTask的excute方法后很久都没有执行。调用AsyncTask的excute方法不能立即执行程序的原因分析及改善方案
同一个应用,相同的图片分别放在drawable-xxhdpi、drawable-xhdpi、drawable-hdpi、drawable-mdpi、drawable-ldpi中,在同一设备中占用的内存会大不一样(设备的dpi是固定的,图片放在不同的dpi文件夹下,在设备上显示时需要将图片转换成和当前屏幕一样dpi后在设备中显示,所以即使该图片在不同dpi文件夹下大小一样,但放在内存中的大小却不是一样的,并不一定是长*宽*4),做应用的内存优化之前可以先看一看你的工程是如何做屏幕适配的,是否有优化的空间。强烈推荐这个屏幕适配视频教程,花两个半小时就能看完:Android-屏幕适配全攻略
谨慎对待数据库升级(比如需要在原数据库中增加字段),避免数据丢失或者操作数据库异常的情况,数据库升级方法可以查阅《第一行代码》P263;
多个程序共用一套代码(一套代码,在桌面上多个图标)时需要处理好不同入口进入时的堆栈问题;
使用Adapter的时候,如果你使用了ViewHolder做缓存,在getView的方法中无论这项的每个视图是否需要设置属性(比如TextView设置的属性可能为null,item的某一个按钮的背景为透明、某一项的颜色为透明等),都需要为每一项的所有视图设置属性(textview的属性为空也需要设置setText(""),背景透明也需要设置),否则在滑动的过程中会出现内容的显示错乱。
谨慎使用Android的多进程,多进程虽然能够降低主进程的内存压力,但会遇到如下问题:(1)不能实现完全退出所有Activity的功能(如果有同行在应用内采用多进程成功实现过完全退出程序欢迎沟通交流);(2)首次进入新启动进程的页面时会有延时的现象(有可能黑屏、白屏几秒,是白屏还是黑屏和新Activity的主题有关);(3)应用内多进程时,新启动一个进程都会重新跑一次Application的onCreate方法,不上重新创建一个Application,但会重新跑Application的onCreate,这样就不能在Application中缓存数据作为内存共享的途径了;(4)多进程间通过SharedPreferences共享数据时不稳定,具体可以查阅《Android开发艺术探索》。
使用Toast时,建议定义一个全局的Toast对象,这样可以避免连续显示Toast时不能取消上一次Toast消息的情况(如果你有连续弹出Toast的情况,避免使用Toast.makeText);
View的面积越大绘制的时间就越长,透明通道对View的绘制速度影响很大;
不要通过Msg传递大的对象,会导致内存问题。
关于AS的使用经验,参见:[Android Studio使用过程中需要弄明白的一些问题](Eclipse转Android Studio的过程中有必要弄明白的一些问题 - 张明云的知识共享 - 知乎专栏)
Eclipse的工程转成AS的版本后,在同一个机器中安装会报”INSTALL_FAILED_VERSION_DOWNGRADE“这个错误,原因是因为as除了可以在Manifest.xml文件中设置apk的版本名和版本号,还可以在build.gradle文件中设置apk的版本名和版本号,记得修改build.gralde中的版本名和版本号到最新就可以了;
通常情况下,在插入USB之后可能会跳转到一个新的界面,这时候可能你本来是横屏的,突然跳转到这个新界面是竖屏的,虽然你的界面被压在下面,但是还是会被强制横竖屏切换一次,如果这时候你的界面不做处理就会重载,如果你的界面里面有很多fragment,这时候的重载更加复杂,难以处理。所以建议不做横竖屏切换的界面都弄一下横竖屏切换不重载。
如果你在 manifest 中把一个 activity 设置成 android:windowSoftInputMode="adjustResize",那么 ScrollView(或者其它可伸缩的 ViewGroups)会缩小,从而为软键盘腾出空间。但是,如果你在 activity 的主题中设置了 android:windowFullscreen="true",那么 ScrollView 不会缩小。这是因为该属性强制 ScrollView 全屏显示。然而在主题中设置 android:fitsSystemWindows="false" 也会导致 adjustResize 不起作用;
做自定义手写功能时,底层上报的点并不会都在MotionEvent中能够及时接收到,比如底层一秒钟200个点,上层收到的可能只有几十个点,为了提高手写的流畅度,在onTouchEvent中,通过MotionEvent中的getHistorySize能够获取到从底层传输到上层过程中所有的点。
H. 安卓开发教材
你好
学习Android首先要有Java基础,很多Java书都写的不错,从入门到精通Java之类的也不错,讲解的比较简单。
我在这给大家介绍的是
《Head First Java 中文高清版》
2
看完上面的那本可以看郭霖的
《第一行代码》了,里面讲的很是基础,
把里面的例子都敲一下,就算入门了。
3
《Android编程权威指南》这本书也是非常不错的,是外国人写的,把这个好好看完,会学到很多知识。
Android进阶之路
先要进阶,Java语言的学习也需要进一步,推荐《Think In Java》
这本书大家都极力推荐,我认为也很不错。
《Android群英传》对具有一定Android开发基础的读者,这是网络说的,这本书进阶还不错。
《Android开发艺术探索》是一本Android进阶类书籍,里面讲解大部分以Java代码为主,讲解的很不错。
android源码设计模式解析与实战,很多大的公司对设计模式还是需要熟悉的,看完了这本书上手大型项目应该没问题了。
满意请采纳
I. Android 开发者应该先看哪些文档
作为计算机专业的学生我可以给你以下建议,希望能给你有所帮助。
你首先要有java基础(android是基于java),想必大学课程都有教,而DOCS中的Dev Guide里面对其解释十分清晰,可以仔细阅读。并可以到相关社区中找到很多的文档和学习资料。
软件的开发需要耐心,所以不能急要慢慢的测试,你要知道一个软件成功的开发出来需要多少时间多少软件开发者的心血。勿忘初心方得始终。