做Android+ j2EE 系统集成一点心得_某笨緢_Jun的博客-程序员秘密

技术标签: 程序员人生  Jee Java Web  

摘要:文本将讲述作者在Android+J2EE系统集成开发的一点心得,希望有所启发。
  前言: 很早以前,就听人说过android以后会火起来,作为一个前瞻性,对它有所了解会是一个转型的好机会。javaweb太成熟饱和了,现在市面上各种android手机层出不穷,网上各种android视频连续剧一样跟进, 安卓一下子成为了热门话题,刚开始也是出于个人兴趣学的很hi感觉挺容易上手的样子,后来工作中才发现问题很多也很棘手,慢慢的在纠结和痛苦中琢磨出了一些经验和规律!

  1. android作为view层,要实现和服务层低耦合,必须使用webservice接口。目前还没有十分完善的插件,曾经试过axis的android包(也是一个兴趣者自己做的),用了之后感觉非常麻烦,特别是复杂数据类型的传递,而且bug也很多,还要改别人源码,无疑增加团队的学习成本和开发难度,无奈之下自己做了。 android端使用Apache的httpclient发送交互请求,定义好xml接口传输数据,接收也是用dom4j解析(JSON解析),经测试在2.2中dom4j支持性很好,2.1少些解析用法不支持,但大部分能用,说到这大家也许懂了。没错,后端用的是servlet机制,再利用java反射根据xml文件描述动态调用指定的spring服务和方法,这些已经足够,而且可以完全按自己的方式做更多灵活的扩展.

  2. httpclient确实是个好东西,但作为无状态访问协议,http无法保存用户会话信息。于是翻开了axis的源码发现它原来是把用户的首次访问信息保存至特定文件,而后根据心跳机制,定时做校验,茅塞顿开,于是我把用户首次访问信息保存在数据库会话表中,并且写了一个存储过程,定时把会话中登录时间距离当前时间超过30分钟的记录做删除操作,用户每次登录都与会话表进行匹配,没有记录即刻超时强退。这么一来,方便简单多了,那么用户每次访问系统都得在xml文件里带着系统给它的串号,也就是sessionid,才叫一次完整的会话.

3. android系统画图是个麻烦的活,初期我们小组找遍了所有画图的插件,都是忧喜过半,没有办法找到特别满意的,要么是使用太麻烦,要么是找不到我们要的效果,研究的很累也没头绪。问了一些原先做过j2me老程序员,他们建议如果不是专业做游戏的话,统计图表这些还是借助服务端来做更合适一点,于是我们抛弃了所有的android端画图插件,采用jfreechart在服务端画好,图片http流到手机端显示,当然因为2.1系统不支持flash,也就没考虑在做得更漂亮,图表很直观很清晰。

        4. UI是个难点,而且为了适应不同分辨率,之前用px单位很有问题,后来改了dip定位,好了许多,之后大面积使用选项卡样式,统一风格,难点很多,比如给tabhost加样式动态改变效果,按钮透明,listview去横线加箭标加动态发亮加下拉翻页,还有手势滑动,各种各样的widget特效和动画切屏。为了省去弯路,我们反编译了QQ,飞信,58,赶集,飞机票,墨迹天气等所有主流的android布局和美化的用法,吸取不少有用的经验,但是依然感觉布局很难做,美工无法直接介入而且模拟器测试很不给力,没办法只能用真机测ui,速度能快上许多。

5. android的客户端更新功能,相信只有做过的才知道其中的辛酸,一要做好断点续传,二要做好数据库的初始化工作,三要做好签名,四要做好版本校验的算法并且能显示动态进度条和百分比。断点续传好做,但是数据库初始化麻烦点,

         我们的做法是把sqlite库文件直接从raw下拷贝至sd卡中,并设置了sqlite的读取库路径指向它,感觉这样好一点。签名一开始不知道,每次覆盖都提示安装未完成,后来才明白为了保证应用的唯一性,它就像是身份证一样,其他没什么作用,和塞班的签名不是一回事,封装apk必须保证在同一签名文件下才可相互覆盖安装

       6. webview中可以调用后端的java代码,类似dwr功能,不过这个功能一直用的很少,很不稳定,兼容性要考量,android既然提供了那么多的ui控件,就说明webview是无法替代它的,毕竟还需要调用底层服务,webview还是慎用的好

       7. android也应该遵循mvc的编程规范activity只负责处理跳转,UI,和简单数据校验工作业务逻辑放置在service类中,sqlite操作稍加封装下,做个类似jdbcUtil的那种模板类,提供增删改查,分页等方法这样dao操作就完善许多。我想作为java程序员转做Android开发,最大的障碍不在框架也不在谷歌sdk中的那些api,而是java基础。通过写程序发现,做手机开发的程序员,基本素质要过硬,尤其在集合,线程,异常,io,http这些要非常透彻,不然一个看似很简单的功能,可能就会写的bug百出,甚至效率很低,可读性差,基本上自己回过头都看不懂自己写的是什么,对接口和抽象类,包括匿名内部类的写法也要炉火纯青
     熟悉类包的基本结构,及时对自己完成的功能做代码上的优化和重构,让自己和别人读起来像读诗歌一样,清晰优美,它不像web框架那么成熟,大家都用ssh,都很有规范可循,照着画一般也看不出个人功底来!我想说的是想做android开发的程序员,要特别留意java基础

       8. 另外地图导航也是一个亮点,现在不管做什么功能都会用到地图导航,吃喝玩乐,用户都想知道在什么地方,目前百度谷歌都推出了android的地图接口,我们用的是arcgis,好在api不多应用也很简单,官方都有现成例子,让我这个arcgis是两把刷子的人都能糊上交差。

       9. 写android代码最大的纠结是测试找bug,模拟器很慢,不管修改什么地方,都要重编译部署,ADT插件经常发生debug失效的情况,想加速开发,首先要将eclipse自动编译关掉,把模拟器中没用的进程杀掉,再把一些没用的手机特效关掉,模块化开发,这样便于将整个方法体切出来放进junit里测试。有一款叫Youwave_Android模拟器,使用速度非常快,如果实在没有真机的情况下可以用它来过渡下,没事还可以多下载些android软件,学习下别人的系统是怎么做的,至少能提高下UI审美。有人提议在linux平台上开发,如果从未使用过最好先别给自己加难度,实在想试推荐使用ubuntu10中文桌面版,虽然速度上是没感觉到快多少,但是确是个逐步锻炼提升自己的好机会,技多不压身

    10. 有些小技巧是挺实用的,一些adb命令肯定要比用adt插件要快,新版的sdk升级包把它放在了platform-tools目录下;模拟器横竖切屏有快捷键ctrl+F11或者小键盘home;如果你debug失灵了尝试在DDMS里把进程杀掉部署重试,如果还不行就只有重启模拟器了;如果突然发现gen目录下怎么也不生成R.java文件了,那就show problems看看工程是不是有error,一般不是包路径有问题就是程序内部布局文件有错误,如果仍然无效,关闭eclipse重新打开就好了,有时候adt就会出现这样的bug。

 adt插件和sdk升级包是有版本依赖的,如果使用的是8.0以上的adt插件,记住的sdk升级包一定用最新的,否则会报找不到adb命令的错误。不要茫然就升级插件,最新10的插件只能在3.5以上的eclipse上运行,而且它并没有带来多大惊喜,只是支持更高sdk版本罢了;android程序本身也有缺陷,千万不要钻太深和它较劲,走不过去的地方就想其他路绕,只要简约朴实不俗套,程序功能健壮就可以;另外多加几个android开发者论坛社区下源码发帖求助,技术这东西,无他,唯手熟尔

 最后这里附上真机配置安装说明,我用的是魅9,其他品牌手机也应该都有,好处不多说,自己看!

安卓虽然目前很热,但听说linux社区管理员将谷歌android源码删除,并说它并非完全真开源,有欺骗利用开源社区的嫌疑,如果真的是这样,那么安卓将失去了很多开发者的信任和支持,总之不是很好的结果,真心希望下次谷歌百度的时候看到的不是一大堆copy粘贴来的hello world例子,而是实实在在的开发者之间共享和传递的经验,所以开源才是硬道理!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/moubenmao/article/details/8798279

智能推荐

Android面试题_lovelixue的博客-程序员秘密

“  Android基础    1、什么是ANR 如何避免它? 如果耗时操作需要让用户等待,那么可以在界面上显示进度条。 2、View的绘制流程;自定义View如何考虑机型适配;自定义View的事件 3、分发机制;View和ViewGroup分别有哪些事件分发相关的回调方法;自定义View如何提供获取View属性的接口; 4、Art和...

如何逼疯一个程序员?_「已注销」的博客-程序员秘密

自盘古开天地以来(其实也没有那么久),产品经理和程序员乃至设计之间的“你来我往”“斗智斗勇”就频频出现…...所以行业里好像就有了一些共性问题,比如,程序员对于产品经理频繁更改项目需求这件...

Python 列表常用操作_一连有梦咿的博客-程序员秘密

列表由一系列有特定顺序排列哦元素组成,用[ ]表示,列表是有顺序的list = [“abc”, “def”, “opq”, “rst”]位于列表list中的第一个元素的索引为0,访问列表list[0] 访问列表第一个元素list[-1] 访问列表最后一个元素list[-2] 访问列表倒数第二个元素修改列表元素list[0] = “wya”, 表示把列表中第一个元素的值修改为wya...

第二章 二维基础-程序员秘密

文章目录第二章 二维基础笔记习题B.Winding NumberC. Mr. Main and WindmillsD. Airport ConstructionE. Operation LoveF. 三角碰撞(Triangle Collision)G. Magic Rabbit第二章 二维基础笔记点:using Point = pair<db, db>:自带排序,自由度不高推荐\color{White}\colorbox{Red}{推荐}推荐​ struct Point{db x

主成分分析(PCA)是目前应用很广泛的一种代数特征提取方法_pca方法属于特征提取方法吗_tshaun007的博客-程序员秘密

主成分分析(Principal Component Analysis,简称PCA)方法是目前应用很广泛的一种代数特征提取方法,可以说是常用的一种基于变量协方差矩阵对样本中的信息进行处理、压缩和抽提的有效方法,主要通过K-L(Karhunen-Loeve)变换展开式从人脸数据库中提取人脸的主要特征[i],构成特征脸空间,在识别时将待测试的人脸图像投影到特征脸空间,得到一组投影系数,与数据库中各个人脸

Docker 搭建 Vulnhub 靶场环境_vulnhub靶场搭建_白帽渗透笔记的博客-程序员秘密

Vulnhub 是一个漏洞靶场平台,里面含有大量的靶场镜像,只需要下载虚拟机镜像,导入 VMWare 或者 VirtualBox 即可启动靶场,同时它还提供了 Docker 镜像,可以使用 Docker 直接启动靶场,大大简化了渗透测试人员在搭建各种漏洞靶场时的步骤。今天我们来讲一下如何使用 Docker 来启动 Vulnhub 上的靶场。首先需要准备一台虚拟机,我用的是 CentOS7 的虚拟机,1 核 4 G 内存 60G 硬盘,为了靶场运行流畅一点,就多给了一点内存,直接给了 4 G。首先需要安

随便推点

PHPstorm配置svn及问题解决_穿素白衫的中少年的博客-程序员秘密

1.应用场景项目使用svn进行版本管理的,开发IDE是phpstorm,所以就要phpstorm配置svn 2.问题 报错信息: 1.Can't use Subversion command line client: C:\Program Files\TortoiseSVN\bin\svn.exe The path to the Subversion executable...

highway_fkyyly的博客-程序员秘密

(1)y是input,g(wy+b)是输出t = sigmoid(Wy + b)z = t * g(Wy + b) + (1 - t) * ywhere g is nonlinearity, t is transform gate, and (1 - t) is carry gate.(2)文章 http://arxiv.org/abs/1505.00387参考代码https://git...

原根(详解+代码实现+例题+快速求解一个数的原根)_原根编码_成长的小牛233的博客-程序员秘密

1.原根定义假设一个数g对于P来说是原根,那么g^i mod P的结果两两不同,且有 1简单来说,g^i mod p ≠ g^j mod p (p为素数)其中i≠j且i, j介於1至(p-1)之间则g为p的原根。 简单的来说,如果g是P的原根,那么g的(1...P-1)次幂mod P的结果一定互不相同。 那么简化一下:首先看一下欧拉定理:欧拉定理(也

Epic 官方视频教程《 Battery Collector》源码+超详细注释【C++】【UE4】_优酷epic官方_ccccce的博客-程序员秘密

视频教程链接:优酷链接油管链接 【需要梯子】首先来看效果图:1. 电池随机从天空掉落,玩家按C键收集电池的能量(闪电粒子效果)来补充血条(每秒都会自动衰减)2.玩家的颜色随着血条的减少,逐渐变黑3.当血条为空时,玩家(黑色的那一坨)死亡,游戏结束;如果玩家提前集满血条则获胜。

Discuz!X高危SSRF漏洞及修复方案_东方联盟郭盛华的博客-程序员秘密

漏洞描述:Discuz!X系列远程下载图片功能的文件后缀过滤和文章操作随机密钥算法被绕过导致SSRF漏洞。影响版本:< X3.2R20160601漏洞等级:高危修复建议:1、下载官方补丁升级到最新版本,补丁地址:http://www.discuz.net/forum.php?mod=redirect&goto=findpost&ptid=3570835&amp...

[计网:原理与实践] 第七章:网络安全(课后习题整理)_weixin_46952991的博客-程序员秘密

第七章 网络安全7-1 举例说明计算机网络可能面临的安全威胁。网络需要哪些安全服务?  预攻击探测:在进行网络攻击前,入侵者想方设法了解该网络中计算机的IP地址、所用操作系统、所运行的程序以及存在的漏洞。使攻击具有针对性。  分组嗅探:利用分组嗅探器接收流经该设备的分组,获取信息。  IP哄骗:若用户对端系统的操作系统拥有绝对控制权,就能将任意IP地址放入数据的源地址字段,伪造源地址的数据包。  TCP劫持:入侵者设法劫持某主机和某服务器之间的TCP连接,从而获取对服务器的全部控制权。  拒绝服

推荐文章

热门文章

相关标签