最近做了一个android的小项目,服务器端已经搭建好了,使用了spring MVC作为后端技术,发布了一系列web接口来接受客户端提交的数据和返回客户端请求的数据,web端使用了ext js来作为前端技术。同时还需要一个android客户端和ios客户端,临时先开发了一个android客户端,因为服务器端接口已经写好了,安卓端这边只需要访问这些接口就可以获取需要展示的数据和提交数据即可,开发难度不大。因为时间比较紧迫,所以没有做详细的设计,导致后来有很多其实比较冗余的代码,其实可以通过良好的设计来减少代码量,做好继承就可以了,这一点是一个教训,以后在进行面向对象的开发时需要注意。另外也没有做缓存机制的设计,也就是说应用所需的所有数据都是在用户请求时去服务器端获取的,本地不会保存数据,这样做减少了逻辑的复杂度,有利于开发速度。但是以后需要缓冲机制的话改动可能比较大。
下面简单描述一下这个应用的逻辑流程,首先用户必须要进行登录验证才可以进入应用,这样做的目的是减少业务逻辑的复杂性。当用户验证成功进入应用后,会展现给用户三个tab,分别是新闻通知tab,mytab,message tab,其中新闻通知是用来展示学校发布的各种新闻和通知,my tab是用来提供用户查询各种信息的地方,message是用来查看和发送站内信给老师的地方。下面对这里面用到的各个组件或者机制进行一下描述。
Thread与Handler:当用户进行登录验证或者其它需要连接网络的操作时,都需要使用thread,在thread中使用httpclient来进行网络连接,当获取到服务器传输来的数据并进行处理后,网络线程通过handler机制来与开启网络线程的线程进行数据同步的工作,handler一般是作为主线程中的对象传递给thread的,因此在handler中可以对主线程中的ui进行处理等工作。在java中,一切都是对象,thread也是,thread中有一个run函数是线程开始后所执行的函数,当在主线程中new出一个thread后,需要调用start这个函数后线程才会执行。
fragment:现在的应用,ui越来越复杂,原来单纯的在activity中构建ui变得不太灵活,现在安卓中引入了fragment机制,一个activity中可以使用多个fragment来构建ui界面,这样在一个activity的生命周期中就可以方便的构建复杂的ui界面而不需要切换activity。类似于activity中的oncreate方法,fragment中的oncreateview负责fragment初始化时的主要工作,此方法返回一个此fragment的view给activity,fragment也使用布局文件来初始化界面,使用inflater的inflate方法来初始化界面。
listview:本应用中主要使用listview控件来展示数据信息,多个listitem来构造一个listview,listitem界面可以使用布局文件来定义,同时listview有一个addheader方法,可以在listview头部添加一个view来显示在listview的头部。同时,listview可以实现onscrolllistener接口,来实现listview拖动的效果。
adapter:适配器,类似于listview这样的控件,需要适配器来填充数据,适配器一般会和一个list数据结构绑定,安卓系统会根据list的大小来构建listitem的数目和内容。
这里描述的四个控件都是安卓应用中比较重要的四个控件,这里只是简单描述,具体的内容比这里描述的更复杂,有时间的话再仔细描述一下这四个控件的具体用法。