今有史以来第一次在写博客,窃以为不能敷衍了事,因而分享一点个人的心得与体会。写这篇博文之前都是借鉴前辈的经验不断地摸索“浪费了”挺多宝贵时间,从第一次接触编程语言java了解OOP(面向对象编程),再到多年前刚上大学时接触Arduino编程和html全栈和后台维护,后来为了深入学习嵌入式辗转stm32嵌入开发,从多年前刚接项目赚第一桶金到后来独立接手个人项目到如今,越发觉得“物联网”是一个大的潮流和趋势,加之有项目产品对摄像监控和数据传输分析有需求,因而开始着手深入学习Android编程开发。
从Java来深入剖析和了解Android
学过java接触过核心类库的朋友应该都知道,所有的类都直接或间接派生自java.lang.Object,也就是通俗意义上的一个Java对象。在面向对象的基础上java有其语言基础:【分隔符、基本数据类型、变量、操作符】—>【语句】原本到这里发展就应该停止,然而为了格式化存储数据便出现了数组,为了限定对象的成员变量出现了枚举类型,为了扩展存储并兼容不同类型的数据于是就出现了数据库,为了增加代码重复性和扩展父类(也叫超类,常用关键字Super)出现了继承,为了使方法得以多次重复使用而不用从新构造实例重写方法出现了将输入方法类型当做一个参数进行传递,于是便出现了一个重要概念,那就是泛型,而一个父类可以有多个子类,而为了重用前人代码片出现了核心类库,与之对应的留下了相应类库的接口和API(这个文档特别重要),为了方便管理类库的对象让他们组织在一起便出现了一个重要的概念那就是集合框架,为了允许一个对象根据接收到的方法调用来确定要调用哪一个方法实现,意思是为了在创建一个对象后来决定应该实现哪个子类对象的方法,便出现了多态,目的就是在操作不同数据库或者不同子类时只需要实例化一个对象,而通过类的对象,我们就可以反射来构造对象,进而得到这个类的所有的信息,便出现了反射机制,为了完全隐藏类的实现便出现了嵌套类和内部类,在大型项目中为了并发完成任务出现了可以“同时”完成支线任务的多线程(和嵌入式中的定时器中断概念基本一致)以区别常规C语言面向过程的进程,为了更容易编写多线程程序出现了并发工具。在优化方面为了方便咱们调试程序,出现了错误捕获机制错误处理(嵌入式中常常用中断捕捉异常或者“看门狗”来实现),为了给编译器允以提示而出现了注解,区别协同开发中给同伴和自己看的注释,为了适应现代化需求不得不提到一个国际化技术,关键内容是进行语言处理。在硬件处理方面,java没有了指针的概念,但仍然保留了堆栈的概念,并在C语言基础之上多了垃圾处理机制,堆栈的概念在后续编程中特别重要,这部分牵扯到内存的分配,有机会和单片机寄存器和内存分配一起详述。
大致重要的内容便是这些(突然想出书,想想还是算了),夹杂的细节内容其实还有很多很多,比如匿名函数、静态工厂、数字处理中装箱和拆箱、原子变量、单例等等,多如牛毛,有一些要用的时候才能想起来,有一些不常用忘了就忘了,其实从我这些年的项目开发经验来说(我深入学习过C和C++,做过个人网站用js和PHP),重要的其实是编程思想和解决问题的思路,这一点我跟很多朋友复述过。从应用和研发角度看oracle(虽然我不应该参与评判,但甲骨文裁员的激进做法显然是有悖开源共享原则的,虽然这件事对我没有造成直接损失)不断优化java原动力和划分不同的应用领域便是为了更好地解决针对性问题,即应用的更深的一个层次,java全球管理组织成员便是做这部分修正和完善类库。这也是为什么java虽然内容庞大但特别清晰的地方就在于此。
从Android来深入理解java的运用
说是初学,其实也不然,后来我才明白其实应该先从组织架构开始学习,即自下而上的4层:操作系统层、类库和运行环境、程序框架和应用程序。而我们要做的APP便是顶层应用程序,而其中关键的便是5大核心组件Activity界面、Intent(和Intent Filters)意图、Service服务、Broadcast Receiver广播接收和Content Provider内容提供者,Activity显现说就是用户可见界面和被覆盖暂停但未被销毁的活动界面,其中Intent用于界面活动跳转和触摸操作执行,Service用于后台进程,Broadcast Receiver用于应用等发出的消息的接收,Content Provider用于不同应用间的数据共享。原本到这里就应该结束了,然而将这些集合封装就需要诞生一个工具SDK,为了不将各位引入老式开发Eclipse,介绍我现在用的Android Studio。在此基础上便需要转换开发思路,无论是java web或是php web都是在后台操作数据库或者组件(控件)。而Android和Web开发一样(因为个人是做全栈的,所以会遵循这样的思路)强调的是一个整体,在前台就需要编写组件和布局,相较Eclipse的RelativeLayout等5种基本格式,Android Studio高版本的GridView默认只有一种拖拽格式(低版本依旧默认种基本格式)。布局的同时需要写控件的响应,这时便需要写意图来实例化意图对象进而操作相关活动,其中OnClick监听响应事件比较常用。从全局角度来看,粗浅认为Android是Java的衍生品也并不为过。Android因其面向的是用户,更多的是人机交互,范围停留在顶层应用层,从而有监听器、位图处理、动画、声音处理等类库,更多的是突出通过编程将各部分组件关联在一起。而将组件和布局串联在一起就不得不提到包这个概念了,而java类库便是包的集合这些和web是类似的,核心便是积木思想。
大致重要的内容便是这些,因为Android可以认为是Java的上层建筑,就不得不提到在应用层基础上的一个重要发展方向——物联网开发了,我目前涉足的便有WiFi的HTTP通信、蓝牙透传、语音识别、手势识别、GPS、陀螺仪等等正在做或者将来和项目相关要去做。
后记——凡尘
时间匆忙,未能用篇幅举代码实例帮大家理解和校对错误,更多的是结构和整体压缩的内容,如有错别字和内容不合理的地方欢迎大家批评指正,如有想深入探讨或是项目需求的朋友欢迎加入QQ群(星尘Arduino社区):630581178 说明需求一起探讨学习。