「Efficient Android Threading 笔记」- C1 Android Components and the Need for Multiprocessing Android RecyclerView Android Socket Programming Supporting Multiple Screens Make a Reusable UI in Android App Development 如何在 Android Studio 中包含 *.so library,并使用库中定义的方法? 使用 SpannableString 格式化字符串,实现前景色、下划线、超链接、图文混排等 如何使用 bound service 完成进程间通信? 创建自定义视图 Creating custom views 通过 Android Theme & Style 定制应用的样式 「译」Android ViewPropertyAnimator 介绍 Android Animation Interpolator - Android 动画插值器源码笔记 「译」Android Animation in Honeycomb by Chet Haase(Android 3.0系统中的动画机制) 从 Android Sample ApiDemos 中学习 android.animation API 的用法 如何学习 Android Animation? 如何实现 Android ListView「上拉加载更多」? 「译」向Big Nerd Ranch提问:为什么Fragment在Android App开发中非常重要? 分类整理我在 SegmentFault 上针对某些问题作的回答 Android Servcie 后台服务总结笔记 如何在Android设备旋转时暂存数据以保护当前的交互状态? Android Message Handler 消息处理机制总结笔记 如何获取FragmentTabHost中指定标签页的Fragment? Fragment子类必须包含一个public无参构造器 如何更新及替换ViewPager中的Fragment? 如何使用Android UI Fragment开发“列表-详情”界面? 一个Android音频文本同步的英文有声读物App的开发过程 「Android编程权威指南笔记」Android应用本地化 通过jfeinstein10/SlidingMenu实现Android侧滑菜单 为Ubuntu14.04部署Android App的Eclipse开发环境 「Android编程权威指南笔记」使用ListFragment显示列表 「Android编程权威指南笔记」SDK版本与兼容 「Android编程权威指南笔记」Android布局和组件 「Android编程权威指南笔记」UI Fragment 「Android编程权威指南笔记」Activity 第一次开发iOS App和Android的对比总结笔记 「App Training笔记」创建第一个应用 「App Training笔记」开发入门训练大纲 Android APP - 从远程FTP服务器下载文件到本地

第一次开发iOS App和Android的对比总结笔记

2014年12月17日

下述iOS内容,从2014-10-25开始,至2014-12-13,是整个项目中我负责的编码模块,实际的编程时间只有5周,也就是25天的工作日。第一次参与iOS app开发。iOS相关知识储备为0,边写代码边学习,以问题和实现为导向,学的就是快(我觉着快)!

  1. 实现网格视图,类似于照片预览,iOS可以通过CollectionView实现,android可以通过gird view实现(todo);

  2. 实现多页视图,类似于微信的4个页面,左右滑动和底部的按钮栏都可以切换页面,iOS仍然可以通过CollecView实现,android可以通过View Pager实现;
    CollectionView的最小单位是CollectionViewCell,需要向cell填充具体的内容,以完成具体视图的绘制。它的delegate和datasource方法,可以定义cell的个数,可以向当前选中的cell传递数据。
    对应到android,
    View Pager/Grid View扮演着collection view的功能;
    pager adapter扮演着delegate的功能,
    fragment扮演着collection view cell的功能;

  3. iOS中,把所有涉及UI更新的变量都设置为一个类的property,然后在ViewController和UIView之间传递该类的instance,而且是通过函数参数的方式(目前是这样实现的,应该不是最好的实现方式,todo);
    android中,同样定义了这样一个类,用于存储所有涉及UI更新的变量,在adapter中定义一个public函数,activity调用该函数把数据传递给adapter,然后通过bundle在adaper和fragment之间传递。这又涉及到serialization和parcel两种方法。
    (之所以不传递object,有人提到resume后object就消失了,不理解,todo)。

  4. 实现列表,类似于聊天app里对话列表,iOS通过picker或table view,android通过listview;
    假如想实现点击列表项时,跳转到另一个界面(以展示更详细的内容),
    picker有手势gesture(不理解todo),
    table view的实现方法,在storyboard中直接建立和destination VC之间的segue指向,然后实现prepare segue method;
    android实现方法未知,todo

  5. 和列表类似,但不是table似的顺序排列,是多个image或者button在view中分散排布,点击后也需要跳转到另一个界面,
    iOS中,绘制这些button的工作,在MVC的架构下,需要在view内完成(不建议在controller内),而当前view又不知道destination controller的内容,所以需要把执行跳转的工作委托给该videw的controller,在source controller中实现delegate方法。source controller通过button的tag属性区分哪一个被按下。
    android实现方法未知,todo

  6. Third party graph library. iOS中有非常棒的开源的Jawbone chart,android中也有开源的holo graph library。

  7. 如何获取view? iOS可以直接从storyboard拖向code,建立IBOutlet(原理还需要了解 todo);android通过在layout.xml中为每个元素定义ID,然后通过findviewById获取。

  8. 如何添加、布置view? iOS通过storyboard完成,ios定义了各种constraints(leading、trailing、top、bottom、centerX、centerY),还可以定死高宽(pin heigh、width),通过这些来定义和superview、childview、brother view之间的位置关系。刚开始配置约束条件时,会非常困难,但掌握了技巧,比如等分、比例、把握好参照系,会非常快地绘制界面,极大优势是所见即所得。
    android通过layout xml文件,目前掌握的并不好,todo。
    对于自定义的view,只需要设置storyboard的属性,在layout中声明该自定义view类的整个package name;

  9. 但有些情况下,必须完全用代码programmatically绘制界面,iOS中,比之storyboard,编程方式实现的难点在于定义view自己的位置关系,以谁为参照,因为有些情况下需要remove view。
    android实现未知。
    两者都可以add veiw to supuer view.


记录以上主题,是为以后整理详细笔记的大纲。

一份设计,需要在各自在iOS和android平台上实现,iOS完成了,马上转入android app开发,我只有10天的时间。同样也会遇到很多拦路虎,破之。
虽然此前有写过一个驱动测试的android app,参与过一个android app的正式开发项目,但我还是没有系统的学习java语言、android平台知识。很匮乏。2014-12-16第一次提交android app代码。

以下是未涉及到的


  1. UI架构,我上面实现的模块,只是向这个框架里面添加具体的内容而已。
  2. 数据模型建立(这是最复杂的部分,需要抽象出涉及到的所有数据为class)。
  3. 数据库实现。iOS上通过core manager实现,android上通过sqllite实现。空闲时研究同事实现的代码。
  4. 蓝牙连接和数据文件解析(这个涉及东西就多了,而且文件解析也特别繁琐,需要把目标格式转成前面定义的data model。。。)
  5. 参数设置(也属于界面)。

TODO

  • iOS公开课
  • iOS入门指南(买的那本很厚的很浅的书)、object-c的书
  • 设计模式
  • java的书(to buy)
  • android开发相关书籍(to buy or download)

后记

  1. 虽然项目时间紧,不仅要实现功能,还得做详尽的测试,我都戴着测试设备睡了好几天;
  2. 功能细节上,我擅自实现了目标达成时数字zoom out的动画效果,挺好看的;
  3. 我还擅自实现了点击数据图表时,会秀出被点击的bar的具体数值;
  4. 我重写了4遍代码,12月份的8个工作日,几乎重写了11月份的所有代码,部分代码重写了4遍,
    重写很大程度上是因为使用了错误的编程方法,比如使用c风格的pointer to pointer,这就是基础不牢,到处重写。
  5. App开发比驱动维护累,请注意,我说的是维护驱动,而不是开发驱动。但是挺开心的,说不清楚加班,在某种程度上,
    是期望得到大牛同事的肯定,从而获得“这小伙不错,多教他我也乐意”的效果;
    还是期望得到boss的首肯以提高加薪的可能性;
    还是对知识的渴望、对自己的负责。
    我自己都不确定各自比例占多少。但惟一肯定的是,我很认真!

知识共享许可协议
li2的博客WeiYi.Li 创作,采用 知识共享 署名-非商业性使用 4.0 国际 许可协议进行许可。
© 2011-2022. All rights reserved by WeiYi.Li. Powerd by Jekyll & LinAnYa's Theme