本文通过描述在线聊天App的开发过程,对近期学习android开发技术的总结和记录。
1.起因
这几年android应用发展迅速,android平台已经成为和PC端并列的一大应用平台,在这个大的背景下,自己实在很想了解下android开发,也很有必要掌握下android应用开发。终于六月初时下定决心,认真学习下android开发,做一个App出来。
2.初识android
确定学习android之后,开始动手,跟之前做过android的同事,要了开发环境和一本电子书《深入浅出Android--Google手持设备应用程序设计》。书很薄只有一百多页,周六用一天时间在家一边看一边敲例子,一天下来,已经可以写个身高体重BMI计算的了。有了初步的掌握之后,规划下要做个什么App呢,最好涉及多一些内容,例如多线程、定时器、网络访问,最终敲定做个聊天工具,服务器可以在网上找个jsp的服务器,用二级域名,这样最好部署(这个时候我还不了解,当前火热的各种云应用,公网的服务器可以放在云上,貌似也不用花很多钱)。
2.1 在线聊天软件的规划
我这个在线聊天App只实现一些最基本功能,包括:两个用户之间对话,可以广播对话,可以多个人之间对话 ,简便起见对话内容只包括文本。设计上,服务器用jsp的网站,用jsp的内置对象缓存数据来模拟服务器,客户端通过http的get/post和服务器交互。脑海中想了下,大的结构很清晰,但是技术细节一个都不会呢,哈哈,这就是剩下的事情了,可以开始下一步了。
系统原理:
当然了这样的设计有一些问题,但是不影响实现规划的几个基本功能。
2.2 初步掌握的android内容
经过一天的学习,初步掌握了android开发中一些基本的内容,包括:
- 搭建android开发环境;
- android工程目录结构,src源码文件,res资源文件,R.java等;
- Activity,Activity和UI布局文件的绑定,通过R.java引用布局xml的控件;
- 学会了给Button添加响应new onClickListener;
- 对java语言有了初步的使用和适应,初步感觉java比c++写程序要流畅很多;
- 几个最基本android控件及用法,包括textview、editview、button。
3.在线聊天App
3.1 服务端开发
服务器端使用jsp的内置对象application,application在WebApp应用启动后一直存在,所以可以用application保存一个类对象,这个类对象执行所有服务器相关任务,进而达到模拟服务器的效果,经过测试该方式完全可行。jsp端初步的模块设计,各个类。服务器端和客户端接口,定义一个xml格式,提供公共接口类生成xml字符串、逆向解析xml字符串。经过一周的调试,服务器端终于可以在浏览器中验证功能了,剩下就是android搭建一个客户端了,核心的服务终于完成。经过服务器端jsp的开发,编写了几个java类,用了HashMap、ArrayList等数据结构,再次体会到java写程序很流畅。工程目录结构:
3.2 单元测试
服务器测试成功,那么应该写几个类测试服务器,算作是单元测试。编写Java控制台程序,编写IMServer类与服务器通过HttpClient类交互,完成网络访问相关,验证与服务器的交互。单元测试代码结构。
3.3 App开发
客户端开始,功能前面已经确定好,然后脑海中规划一个初步的界面:有几个切换按钮,一个切换当前增在聊天的,一个切换在线的用户,一个是当前用户的基本信息,嗯差不多就这个界面吧。但是呢,我啥都不会呢,先找android的书籍看看,初略的浏览一本书提到了android的控件,什么progress、listView、看起来对我有用,好吧先熟悉下控件使用,用几天休息时间敲了几个控件的例子,初步完成技术预研。
初步规划的App的软件模块
3.4 App各分界面
有了一定的控件使用基础之后,开始编写在线聊天App的各个分界面。
主界面TabActivity切换显示三个Activity,会话Activity,服务器用户Activity,我的信息Activity,对话Activity初步这几个,每个Activity都不熟悉,在网上搜相关控件界面,自己改,把界面相关技术预研完成。界面布局结构:
3.5 界面合并
将前面预研的各个界面整合到一起,加入Activiyt的调用代码,赋值一些模拟数据,之后整个App可以跑起来了。在AVD中执行,有登陆,有在线用户列表,有当前会话列表,有个人信息页,点击会话列表内容弹出对话页,已经是一个在线聊天App。但是呢此时还没有何服务器交互,下一阶段完成服务器访问调用的代码。
3.6 服务器端联调
经过前面阶段App终于要和服务器通信了,这才是一个真是的在线聊天软件。当然和服务器联合调试是比较费时的,界面App有了真实数据后,各种问题都出现了,刷新不正常,数据没显示,类设计不合理等等。经过一周的大量修改调试完成软件功能,最终代码结构:
3.7 界面美化
说是美化其实只作了最简单的调整,修改界面背景,按钮背景等。调整后仍然很难看,但是呢顾不了这么多了,发布到App市场吧。界面截图
3.8 发布
至此整个App终于算是达到预期的目前,实现预期的功能。虽然是个学习目的App,但是发布到App市场,才可以认为这件事情的完成依据。这里选百度开发者中心,注册帐号验证等等上传发布了这个很挫的App。这件事情算是有了个完美的结束。
4 源码
源码下载地址
5 后记
5.1关于Android
Android开发比windows MFC开发方便很多,没有大量的宏定义,纯粹的面向对象,UI布局很容易设计界面。
整理这个月的学习的Android开发内容:
- 搭建Android开发环境,建立Android工程,添加类、布局、自加入字符串,引用jar库;
- 建立AVD模拟手机,配置参数等等;
- 布局方面,线性布局(水平、垂直),线性布局应该是最好用的布局,也最容易设计界面;
- 布局xml,Android的界面设计很象Html,我也在怀疑Android的界面是否在编译时没有生成界面内容,而是在执行时解析界面元素;
- R.java用于引用资源中的各种资源,Android会给每个资源分配一个id,这个Id是自动分配的,刷新下工程就可以;
- Activity可以认为是窗口界面,Activiyt间的交互:startActivity、Bundle、Inent、setResult;
- Activity的可重写基类方法,onActivityResult接收另一个Activity传递过来的值;
- 所有的控件都是View,View类提供的基本的一些方法,如显示方面:设置字体、设置背景等等;
- TextView、EditView、Button、ImageButton;
- ListView用adapter管理ListView的数据,BaseAdapter;
- TabHost,加入Tab页签,Tab页制定一个Activity;
- 为控件添加点击等事件侦听,例如:Button.OnClickListener onClick = new Button.OnClickListener(){......};
- 线程,Handler是Activity中处理Message的类;
- 调试App,包括Log类,Debug。Toast弹出信息也可以作为一种调试手段。
目前还没使用的一些方面:
Android的服务,其他几种布局(表格布局、绝对布局、相对布局),使用样式。
5.2关于Java
Java语言确实很强大,难怪很多人追捧,通过这个月学习到的一些内容:
- Java语言编码风格,例如Java中大括号放在与代码同一行,C++会另起一行;
- 所有类都是的积类都是Object,所有任何对象都可以转为Object。在ArrayList中插入元素取出元素等等;
- 用了两个数据结构ArrayList和Hashmap,也挺好用的;
- Java中所有类实例必须new,也就相当于所有对象都是指针。而C++如果不new那么退出作用域自动析构;
- 在实现App是用到interface,Java中不允许继承多个类,但是可以实现多个interface。Java认为继承多个类是设计不合理,所以从语言层面禁止多继承;
- Java类都有丰富的异常信息,根据异常可以定位到代码问题。并且代码调用了一个会强制抛异常的方法,调用代码里面必须catch该异常。
Java语言还有很多很多内容,现用现学吧。
5.3关于Eclipse
Android能成功的另一个因素,是有一个强大的开发工具Eclipse,各种视图窗口,代码提示。而其没有C++的编译,所有代码语法错误、警告都是实时提示。
5.4尾声
经过近一个月的努力,终于发布了自己的App,写了这篇文章,从android开发一无所知到已经基本入门,自己的初衷目标也已经达成,释然了。与大家分享。