学习笔记 | Android Studio安卓开发入门经验总结 干货
最近完成了移动编程课程的学习,加上其它安卓开发项目的经历,感觉收获颇为丰富。故在此总结整理安卓开发中比较常见的一些问题,技巧和指南。
Android Studio是谷歌基于IntelliJ IDEA社区版开发的,面向安卓开发的免费集成开发环境。其方便快捷的开发调试和可视化UI编辑可以令安卓开发事半功倍。本项目所使用集成开发环境为Android Studio 4.1.1,编程语言为Java,使用JDK 1.8,使用Gradle 4.1.1进行项目工程构建和依赖管理。
Android Studio新建项目时选择一个Activity模板作为默认MainActivity,先选择Empty Activity作为开始。接着,Minimum SDK指的是本项目所支持的最小安卓SDK,点击“Help me choose”会出现如下界面帮助选择合适的安卓最小SDK版本:
图1 安卓API版本选择帮助界面
其中CUMULATIVE DISTRIBUTION表示如果支持该安卓版本以上设备,则预估能支持安卓设备占所有安卓设备的百分比。可见Minimum SDK越小所能支持设备越多,但没有必要一味追求支持更多设备,这需要根据一定的市场调查与经验来决定。本项目选择支持默认的安卓6.0及以上。
安卓开发常见的开发模式有MVC,MVP,MVVM等(详见本站文章 “学习笔记 | Android开发常用的几种模式”),其中MVC非常容易上手,结构清晰易懂,为了简化开发,本项目使用MVC模式进行开发。
- 安卓应用配置文件AndroidManifest.xml: 用于配置包名、应用权限、应用图标及名称、主题等基本信息,此外包括了应用的Activity相关配置,没有在此进行注册的Activity是不能被启动的。
- 程序代码java: 在java目录下的对应包名中存放包括Activity在内的各java程序文件。
- 资源文件res: 存放用于UI相关的各类资源,主要有:drawable:存放可被绘制的图形,包括矢量图和位图,以及由xml编写的各类图层、状态选择器等比较实用的前端UI部件。layout: 以xml文件形式编写的用户交互界面,可以在Android Studio中进行实时渲染预览、可视化编辑等。values:arrays.xml: 存放数组,在程序中按照自定义的数组名进行读取。colors.xml: 存放Hex色值,在程序中按照自定义的颜色名字进行读取。dimens.xml: 存放尺寸信息。strings.xml: 存放字符串,按照自定义的字符串名进行获取,方便多语言程序的本土化。themesthemes.xml: 程序主题,包括主色次色和各类样式。themes.xml(night): 程序夜间主题。mipmap: 存放贴图文件,如果期望贴图有放大缩小动画之类的可以获得更好的图像表现。xml: 存放一些其它xml格式的文件,例如网络安全配置文件network_security_config。
- Gradle构建配置文件build.gradle项目级构建配置build.gradle(Project: $project_name):用于配置适用于项目的Gradle构建设置,例如使用的Gradle版本,构建脚本的仓库,依赖包仓库。例如:
- 模块级构建配置build.gradle(Module: $project_name.app)
正如生物一样,Activity和Fragment作为安卓交互程序也有“生死”,也就是生命周期。Activity生命周期:如图为一个Activity从被启动到被停止的生命周期:
图2 Activity生命周期[2]
- onCreate(): Ativity被创建的时候,常用于初始化基本布局,使用setContentView()加载布局文件,进行一些其它基本不耗时间的操作,实在需要就用异步线程,避免页面长时间空白。
- onStart(): Activity被展示的时候,也就是说被创建了不一定要显示出来,但要显示出来了才onStart()。
- onPause(): Activity将要被挂起的时候,页面失去焦点无法交互,此时Activity仍可见,比如将转入后台运行。
- onResume():Activity已经从后台唤起并显示出来,将要但还未获得焦点无法操作的时候。
- onStop(): Activity以及失去焦点且要转入后台的时候,此时Activity已不可见。
- onRestart(): Activity被挂起后又被唤醒的时候,此时Activity还未显示出来。
- onDestroy(): Activity被彻底销毁的时候。
Fragment生命周期:Fragment生命周期与Activity周期较为类似,但其中比较值得提及的是:
- onAttach():Fragment与Activity建立关联的时候,也就是此时Fragment已经知道了拥有自己的“上司”Activity是谁。
- onActivityCreated():此时建立关联的Activity已经结束了onCreate()并返回。
- onCreateView():此时初始化Fragment布局,也是将基本的布局加载好,不建议耗时间的操作,实在需要就用异步线程。
- onDestroyView():Fragment的视图已经被销毁,但与Activity的关联未销毁,仍然可以重新创建视图。
- onDetach():与Activity的关联将要被解除,Activity在onDestory()时会自动调用与之有关联的Fragment的onDetach()方法。
Android 4.0以后网络请求不能在主线程中执行已经是老生常谈了,这是为例放置线程阻塞应用无响应。解决方案一般就是启动异步线程进行处理,UI线程和网络请求就分离开了,各干各的。但这之间如何通信呢,或者说网络请求结束,不管成功失败,如何告诉UI线程?这将在3.3.3 Handler消息处理中提到。线程通常还要用到线程辅助类Runnable,在Runnable的要求强制重写的方法run()中执行网络请求任务。例如:
不仅如此,耗时操作通常都是在线程中执行的,例如数据库读写和一些其它文件操作之类,可见,多线程是安卓开发中一个重要的技术。
上节中提到,不同线程间如何通信,Handler就是一个易用的方案。如果把各个线程比作各干各活的工人,Handler就像是个中间人,负责把各个工人传来的消息进行处理,并有权操作UI线程中的组件,比如更新TextView的文字(非UI线程是不能操作的)。“工人”如何给Handler发一条消息?实现起来很简单,比如网络请求处理成功以后:
而Handler接收到消息后的处理一般如下:
Activity间使用Intent类进行跳转和数据传输,具体如下:
值得注意的是,Intent所能传输的数据容量是有上限的,过多的数据不建议使用Intent进行传输。
RecyclerView是基于viewholder的回收理念在ListView上的一个升级版,功能强大,当然在不需要进行回收的场景就当然不要用了,例如实现多行可选择的标签,如果标签滑出屏幕外被回收了的话,选中状态也会一起丢失,除非用额外的对象进行选中状态记录。RecyclerView的适用场景是有大量用于展示的列表数据的场景,比如微信的公众号页面的推文卡片、微信朋友圈、QQ的好友列表、小红书的瀑布流帖子等。和ListView类似,要将数据适配到视图上进行展示需要使用适配器Adapter,不同的是RecyclerView的BaseAdapter已经将viewholder模式封装好了,而目前RecyclerView的适配器有很多优秀的第三方库,例如Github上开源的CymChad的适配器助手BaseRecyclerViewAdapterHelper,封装了基本的适配器操作,秩序简短的几行代码就能实现基本的适配操作,也封装了很多功能丰富的类与接口,例如可以实现下拉刷新,上拉加载的接口,可以实现多布局共存的MultiItemAdapter<T>等等[4],因此在合适的场景下使用是很好的,避免重复造轮子,但为了学习和了解更底层的原理,本项目中还是用最原始的ListView和RecyclerView的自带适配器。
如上所说,列表视图需要一个中间件:适配器,来将数据适配到布局上,这是一个从结构化的数据到结构化的视图的中间过程,纵观整个项目开发,可以发现有很多地方在使用这样的理念,除了列表视图的适配器以外,装载Fragment的ViewPager的PagerAdapter也是同样使用了适配器的概念,使得ViewPager可以比较方便的管理多个Fragment,降低耦合。同样的,这样的理念也可以运用到有着多种网络请求的场景中,使用工厂模式和适配器理念,将网络请求返回结果适配到实体类对象或UI视图里,这对于降低耦合度和提高多态性是很有帮助的。
[1] Android中 mipmap与drawable区别https://blog.csdn.net/userzhanghao123/article/details/70243872[2] Activity与Fragment生命周期探讨https://www.jianshu.com/p/1b3f829810a1[3] fragment生命周期(总结)https://blog.csdn.net/weixin_33774615/article/details/88126868[4] BaseRecyclerViewAdapterHelperhttps://github.com/CymChad/BaseRecyclerViewAdapterHelper
原文地址:https://ranlychan.top/archives/73.html
总结:这份Android学习路线,绝对干货
不知不觉自己已经做了几年开发了,犹记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知。懂的越多的时候你才会发现懂的越少。
如果你的知识是一个圆,当你的圆越大时,圆外面的世界也就越大。
最近看到很多Android新手问Android学习路线,学习方法啊,如何入门啊,所以我从网上找了一些资料,然后以我的工作经验给大家总结一下,让你们少走弯路,提取一些工作中经常用到的技术。
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),线程安全问题,线程的同步,线程之间的通讯、死锁。
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的实现方法
动态控件布局的上实现方法
上拉刷新下拉加载更多
1).基于Android平台的HTTP通讯:
Http协议回顾
使用Get方法向服务器提交数据的方法
使用POST方法向服务器提交数据的实现方法
使用Http协议实现多线程下载
使用Http协议实现断点续传
2).Android数据存储技术:
SQLite3数据库简介
SQL语句回顾
SQLite3编程接口介绍
SQLite3事务管理
SQLite3游标使用方法
SQLite3性能分析
访问SDCard的方法
访问SharedPreferences的方法
张阳之前完全没接触过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》
张阳经过一年的努力学习终于成为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资深工程师,需要学习的东西就更多了,并且有些并不是那么具体了,如下所示:
- 继续加深理解”稍微深入的知识点“中所定义的内容
- 了解系统核心机制:
- 了解SystemServer的启动过程
- 了解主线程的消息循环模型
- 了解AMS和PMS的工作原理
- 能够回答问题”一个应用存在多少个Window?“
- 了解四大组件的大概工作流程
- …
- 基本知识点的细节
- Activity的启动模式以及异常情况下不同Activity的表现
- Service的onBind和onReBind的关联
- onServiceDisconnected(ComponentName className)和binderDied()的区别
- AsyncTask在不同版本上的表现细节
- 线程池的细节和参数配置
- …
- 熟悉设计模式,有架构意识学习方法
这个时候已经没有太具体的学习方法了,无非就是看书、看源码和做项目,平时多种总结,尽量将知识融会贯通从而形成一种体系化的感觉。
同时这个阶段对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习。
关于设计模式的学习,最近一本新书推荐给大家《Android 源码设计模式解析与实战》,既可以学习设计模式,又可能体会到Android源码中的设计思想,我最近也在阅读此书。
技术要求:
- 稍微深入的知识点
- 系统核心机制
- 基本知识点的细节
- 设计模式和架构
- 书籍推荐《Android开发艺术探索》、《Android 源码设计模式解析与实战》、《Android内核剖析》
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的
文末附上一份Android进阶资料,这些学习资料搭配进阶65W+年薪,Android高级工程师成长曲线,会达到事半功倍的效果。
内容包含:Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 这几块的内容
这些都是我现在闲暇还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效的帮助大家掌握知识、理解原理。
分享给大家,非常适合近期有面试和想在技术道路上继续精进的朋友。也是希望可以帮助到大家提升进阶
如果你有需要的话,可以【评论】或者【私信】我获取
喜欢本文的话,不妨顺手给我点个赞、评论区留言或者转发支持一下呗~
零基础学习App开发第一天——创建与发布App
移动web时代,手机的兴起使得大部分在手机上的应用开发变得如火如荼,然而传统的app开发需要掌握的知识点繁多,开发周期特别漫长,为了解决这个问题,webapp应运而生,它使得app开发的难度大幅度降低,只要你懂前端就可以开发app;然而由于技术的更迭,不光出现了app,还有小程序以及一些网站,于是,很多人瞄准了多端应用市场,所谓多端指的是一套代码多个平台运行,比如我在DCloud上写了一个应用,我可以把它打包为小程序、网站和App,这样就减少了我们开发的难度和时间,目前最火的要属DCloud和APICloud了,由于uniapp是基于DCloud,所以咱们今天所讲的内容全部基于DCloud平台,好了,下面让我们一起进入到今天的课题中吧。
这个就是我们今天的主人翁,往后我们会一直用这个工具开发app甚至小程序和网站,下载地址:https://www.dcloud.io/hbuilderx.html,下载好后直接安装即可,安装好后界面是这样的,如图:
安装完毕之后需要我们再去申请注册一个DCloud的账号用于登录,这个很简单,就不说了。
首先我们新建一个目录,如图:
然后选择uniapp,如图:
此时我们先填写项目名称,然后选择项目的目录,最后我们可以选择一个合适的模板,或者是空模板,这里我们我们为了上手方便选择hello uni-app这个模板,选择的这个模板里面的内容是uni-app中的所有组件的使用方法,如图:
当我们点击创建后就会自动生成一个目录了,如图:
通过目录里面的文件夹名我们可以了解到,应用的界面其实是放在pages文件夹里的,所以我们随便点击一个pages里的文件,然后将其运行在内置浏览器中,如图:
当我们做完这一切之后就可以发布这个app,在发布之前我们还可以对这个App的其它设置进行一些调整,如图:
调整好之后,我们就可以来打包了,如图:
这里有三个选项,云打包、本地打包和制作应用wgt包,这三个选项是什么意思了,首先,云打包可以不用在电脑上安装任何sdk就能制作一个app,而本地打包就麻烦点,需要我们下载Android studio然后还有一些sdk才能打包好,过程比较繁琐;至于wgt包,制作好了之后可以进行同步更新并且不用用户再度下载,非常的方便。因此这里我们选择云打包,如图:
可以看到有些平台的apk打包成功了,不过有些失败的,不去纠结那么多,我们直接把这些apk安装到手机上即可使用。
本文主要和大家讲的就是关于uniapp的制作和打包,可以看到,uniapp让我们轻松做到了从零基础到开发app。更多精彩好文敬请关注公众号简易编程网。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。