概述
本篇算是心得、随笔主要记录几条与第三方对接时候的心得体会。
必须明确需求
这算是一个很有道理的废话!!!不明白需求怎么开发呢?确实如此,目前手头的项目就是当初我们以为知道了需求(其实是犯了经验主义错误)然后直接进入开发,功能完成的也很快,三个星期左右出差进行项目对接。结果我们把打包好的apk提供给第三方,人家懵逼了,我也懵逼了。人家要sdk,而不是apk!!!
然后跟第三方进行会议沟通,最终确定我们把源码做成library提供给对方进行集成!
然而故事到这里就完了吗?
等做成lib正式进行项目集成的时候问题又出现了,第三方要求的是用类似悬浮界面的方式进行页面的交互(这个其实不怪我们,他们自己定交互方式的时候完全没有给我们进行通知),而我这边所有页面都是activity的方式,真是
对方要求换成他们要求的形式,但是这对我们来说代码改动有太大,项目又急着上线,于是经过敌我双方的“谈判,虽然最终还是以Activity的方式进行交货,但是就此项目而言从中也可以发现学点经验和教训。
1)给第三方开发东西,特别是要调用第三方的资源(比如播放器),必须明确知道是敌我双方哪个是主应用,哪个是辅应用。也就是说谁集成谁。目前是第三方集成我们的应用(UI)来使用。
2)既然是集成我们的页面,当然是由我们进行UI的开发,这个UI是Activity方式展现,还是以独立的View或者Fragmet等嵌入到对方的应用中,这个问题必须明确。
总之一定要明确需求,UI页面开发虽然相对简单,但是需求不明白,开发出来的东西没法用,那不是做无用功么?
Bundle存储集合问题
在项目中用Bundle存储数据的时候,用了Vector来存储数据集合;但是经过测试发现从Bundle里面取这个Vector的时候会报类型转换错误:
ArrayList can’t cast Vector!(也没有详细追查具体原因,当然本文也不会分析Vector和ArrayList的异同),所以把bundle保存的vector改成了ArrayList,一切ok!
ArrayList<Program> arrayList =
new ArrayList<Program>(Arrays.asList(new Program[soureList.size()]));
Collections.copy(arrayList, soureList);
outState.putSerializable("programList",arrayList);
在这里需要有一个注意的地方,在Collections.copy的时候,不能采用如下方式:
ArrayList<Program> arrayList =
new ArrayList<Program>();
Collections.copy(arrayList, soureList);
outState.putSerializable("programList",arrayList);
这样会报数组越界异常:因为arrayList是个空集合,size=0.而soureList.size()>0;从源码中也能看出报空指针异常的原因:
public static <T> void copy(List<? super T> destination, List<? extends T> source) {
//报数组越界的原因
if (destination.size() < source.size()) {
throw new IndexOutOfBoundsException("destination.size() < source.size(): " +
destination.size() + " < " + source.size());
}
。。。。次处有省略代码。。。
}
所以我在声明目标数组的时候用了如下代码来初始化一个非空的ArrayList集合:
ArrayList<Program> arrayList =
new ArrayList<Program>(Arrays.asList(new Program[soureList.size()]));
只是简单的把空数组放入到arraylist里面而已。
本篇心得到此结束,不积跬步无以至千里,多做点总结总是好的。
最后
以上就是落后电源为你收集整理的Android 项目中丁点经验总结的全部内容,希望文章能够帮你解决Android 项目中丁点经验总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复