一:准备工作
1.创建工程的时候注意版本兼容 一般最低版本兼容到2.3.3
2.导入两个jar包 commons-codec.jar 这个是MD5加密用的 ,比如DigestUtils ; commons-lang3-3.0-beta.jar 是用来操作字符串的,比如判断非空的操作StringUtils.
3.引入测试框架 在application标签中加上<uses-library android:name="android.test.runner" />;在manifest标签中添加
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="cn.ithm.lotteryhm24" >
</instrumentation>
二:应用架构:
①网络通信
《手机客户端接入接口文档1.2》协议封装(xml)
通过HttpClient实现与服务器通信
②业务操作
公共信息
用户信息
业务层调用(如何降低耦合)
高内聚,低耦合的系统有什么好处呢?事实上,短期来看,并没有很明显的好处,甚至短期内会影响系统的开发进度,因为高内聚,低耦合的系统对开发设计人 员提出了更高的要求。高内聚,低耦合的好处体现在系统持续发展的过程中,高内聚,低耦合的系统具有更好的重用性,维护性,扩展性,可以更高效的完成系统的维 护开发,持续的支持业务的发展,而不会成为业务发展的障碍。
③ 界面显示
统一界面管理
通信方式有三种:
①使用HttpURLConnection 这是一个工具类,优点:使用方便。缺点:稳定性差
②使用HttpClient是一个开源框架,稳定性好
③使用Socket通信(豌豆荚(USB、WIFI)、聊天工具)
通讯渠道
① WLAN(wifi)
②手机APN接入点 这个又分为两种:第一种 是Net方式 这个是直接访问服务器;第二种是 Wap方式(地域性、增值业务——IP是10.0.0.172 端口是80 ) 这个会通过一个代理服务器,如果发现不是增值业务就放行,如果是增值业务就转发给运营商,所以在用代码实现这种方式的时候要加上代理服务器的ip和端口。
内容部分管理:
①界面显示的统一管理 。通过观察发现界面每次改变的时候大部分都是中间的模块在变化,最上边和最下面基本不太变化,所以可以用三个manager来分别管理上中下三个模块的内容,通过分析最上边的有三种状态,把这三种布局同时存在于一个xml文件中,然后全部隐藏,根据当前状态来动态的改变某种状态的显示,同时给所有的支持点击的空间添加事件监听,在其回调函数中调用其他两个模块的manager来控制响应的状态,因为manager会在很多场合用到实例所以做成单例模式的可以减少占用内存,再调用中间模块的manager的changeView方法的时候不应该再实例化BaseView的子类对象而应该利用内省(反射)机制,因为中间模块有个集合专门用于存放已经实例化过的BaseView的子类对象,这样不仅速度快而且会防止创建多个同样的对象造成OOM异常。
在中间模块的manager中有这个字段: private Map<String, BaseView> VIEWCACHE = new HashMap<String, BaseView>();// 利用内存的空间换应用的执行时间这个就是用来存放实例化过的界面,
② 防止重复点击造成的界面重复切换问题。可以在中间模块的manager里创建一个用来存放当前切面的类的字节码然后每次点击的时候都和传入的参数进行一下判断如果相等就直接return;
③ 返回键的处理。返回键默认的是杀死当前Activity, 而本应用只有一个Activity,所以就得模拟一个任务栈,复写public boolean onKeyDown(int keyCode, KeyEvent event)方法进行处理
* 解决当前UI模式存在的额问题
思路:一旦中间容器变动,通知其它容器,中间容器变动,其它容器如何处理控件权移交其它容器自身管理
// ①发送广播——不同的应用之间用这种方法
// ②观察者——应用内部用这种方法
// 操作步骤
// ①中间容器变成被观察的对象(继承于java.util.Observable)
// ②标题和底部导航变成观察者( 实现接口 java.util.Observer )
// ③将标题和底部导航观察者添加到集合中( 调用被观察者对象的 addObserver( Observer o)
// ④当中间容器变动了,修改changed=true( setChanged() 把 changed的值该为true;)
// ⑤通知,判断changed ,循环所有的观察者,做更新操作( notifyObservers(currentView.getId());//通知更新并传递数据 )
// 将标题和地步导航添加到中间容器的观察者集合中是在Activity中执行
UIManager.getInstance().addObserver(TitleManager.getInstance());
UIManager.getInstance().addObserver(BottomManager.getInstrance());