给 iOS 开发者的 Android 开发建议

本人从事iOS应用开发已经5年有余,直到现在还总是刻意回避Andriod应用的开发。但是不管你信不信,安卓开发还是很有意思的,从iOS转向Android应用开发的跨度并没有你想象的那么大。

现在我把在开发7分钟训练这款Android应用中所学到的一些东西与大家分享,希望能对你们有所帮助。需要指出的是,我稍后所比较的每个项目并不是完全匹配的,并且这篇文章并不是一个完整的Android应用开发概述,但是它包涵了我从开发这个简单应用所学到的点点滴滴。

开发环境
开发环境我选择了Android Studio,我打赌当正式版发布以后,它将成为Android应用的标准开发环境。虽然有很多关于Android Studio 不稳定的言论,但是我只遇到了一次程序崩溃,个人认为Android Studio稳定性尚可,也许是已经适应了Xcode的习惯性程序崩溃吧。

Java
说说你对Java了解多少,说白了它只是另外一门编程语言。像其他语言一样,协助你利用计算机实现你的想法,如果你是个经验丰富的程序员,你将会把更多的精力投入到应用的架构,而不是Java语言本身。谢天谢地,我们并不需要学习J2EE。

模拟器
在使用Android 模拟器之前,我习惯性的认为iOS的模拟器糟糕透了,现在看来iOS的模拟器还是很给力的。能不用Android模拟器就尽量别用,直接上真机调试;要不然你就准备好把大把时间花在无谓的等待上吧。

Storyboard / NIBS
对于storybaord的使用,在我之前iOS开发的文章中已经有所阐述,在是否使用Storyboard这个问题上,之后还收到了持不同看法的读者措辞强烈的来信,今天对此我们不予讨论。

Android 使用xml来编写布局。不同布局彼此是完全独立的。Android Studio同时也提供了一个非常好的WYS|WYG编辑器:

你也可以深入原始xml文件进行编辑(我自己经常这么做)。

各种布局容器可以被用来当做自动布局的替代方案,比如 Relative Layout, Framelayout 等等。选中布局后,你可以对布局的宽度,高度,填充,留白,比重等属性进行像素(dp 设备像素)级的设定,或者直接将它们设置为match parent, wrapcontent。

Wrap-content 对于文本来说是个很好的选择,它会自动根据文本来决定视图的尺寸。

虽然我还没有习惯使用fragments,但似乎确实是一个不错的自定义界面的复用的方式。

UIViewController

Android中等同于iOS UiViewController的是一个叫Activity的组件。你所看到的每个视图和窗口都是一个Activity。在Activity中,你做的最多的就是把数据和UI绑定,处理各种事件等等。

Transitioning Controllers / Views

在iOS中我们使用segues、 pushViewController、 presentController 进行不同视图间的切换。在Android中,我们则用一个叫Intent的组件。

你可以轻松地使用intent去创建一个新的Activity,甚至是传递一些数据给新创建的Activity。

public void onItemClick(...) {
       Intent i = new Intent(getBaseContext(), MyActivity.class);
       i.putExtra("row", position);
       startActivity(i);
}

在新创建的Activity(如上所示的MyActivty)中,你可以以这样方式提取之前Activity传递的数据。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_mine);

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        int row = extras.getInt("row");
        ....
     }
     ...
 }

你也可以使用Intent去触发一些东西,例如:分享页面。

Intent sendIntent = new Intent();
 sendIntent.setAction(Intent.ACTION_SEND);
 sendIntent.putExtra(Intent.EXTRA_TEXT, "Share This");
 sendIntent.setType("text/plain");
 startActivity(sendIntent);
IBOutlet

如果你像我一样至少有一半时间会忘记连接IBOutlets,Android将是你的福音。

Android中每一个视图/组件都有一个唯一的ID,例如:

@+id/myButton

Android将会为这些ID自动生成一个叫做R的类(想了解更多R点击这里),你可以通过如下的方式来操作这个Button 对象。

Button button = (Button)findViewById(R.id.myButton);
Tag

为视图设置一个tag来查找信息是iOS开发者们常用的一个小技巧,例如:数组的偏移。而在Android你可以讲这个对象设置成tag,相当的有用。

row.setTag(data);
UITableViewController / UITableViewDataSource / UITableViewCell

在Android中与UITableView相对应的是ListView。

与UITableViewDataSource大体上相对应的是ArrayAdapter:

MyAdapter adapter = new MyAdapter(this, R.layout.listview_item_row);
listView.setAdapter(adapter);

如上的例子中,listviewitemrow是布局中的一行,大体上相当于一个UITableViewCell。

Adapter通过getView来创建或复用不同的列。

你还可以设置表头:

View header = getLayoutInflater().inflate(R.layout.listview_header_row, null);
listView.addHeaderView(header);

网上有大把相关的好教程,例如这个。

Images / Resources

自从Asset Catalogues在iOS出现后,对于图片的处理就轻松了很多,而且只需要应付retina和非retina屏幕即可(除非你还有专门为iPad使用的图片)。

为了适应不同Android设备的分辨率,你需要提供四套不同尺寸的图片。

它们分别是:mdpi (中等质量)、hdpi (高质量)、 xhdpi (超高质量), xxhdpi (宇宙无敌高质量)。个人很期待xxhdpi画质的出现。

当你在Android Studio里创建工程的时候,它会为你所提供的应用图标自动生成四种不同尺寸的图标。这可把设计师们吓的心肝儿发颤了吧,别担心,稍后它们还是可以被完美的图标所替换的。

所以,基本的理念就是对应不同的屏幕分辨率创建不同的图片,并用与之相对应的屏幕分辨率的名字命名后,放入正确的文件夹中,之后的事情就交给Android去处理吧。

自定义字体

自定义字体在Android中也相当容易实现:拷贝字体到main/assets文件夹,之后你可以像这样调用他们:

Typeface font = Typeface.createFromAsset(getAssets(), "Lato-Regular.ttf");
 textView.setTypeface(font);

这种方法并不是在所有设备上都可行,最好还是加上try/catch方法来处理异常,即是在我的两台Android设备上从来没有出现过异常。

NSLog

看来Log 似乎是Android给我们提供的解决方案,你指定log的类型:debug ,verbose等等。当然,Java最基本的打印语句System.out.println(..) 也是行得通的。

向下兼容性

我们常听说Android碎片化。对于这个问题在Android中的解决技巧,跟我们在使用iOS新特性又要兼顾老版本时所采用的技巧基本上差不多。 你也许需要更频繁,更长久的使用这些技巧。

Android中有一个非常有用的常量供你查询当前的Android的API版本号。

if (Build.VERSION.SDK_INT >= 11.0)  {
...
}

你可以这样来屏蔽警告:

@SuppressLint({"NewApi", "LocalSuppress"})
private void myFunction() {
...
}

令人诧异的东西

计时器

我对Android内建了计时器这样的功能感到非常兴奋,它正是我开发7分钟训练所需要的。可是它不发送在计时结束前的最后一次信号,就是这样一个令人诧异的bug,仍旧没有得到修复。恼火,太恼火了!

屏幕方向

当用户旋转屏幕的时候,activity被完全重置,这意味着你需要保存所有activity重置前的状态,并在activity继续后重新还原这些状态。这可能会让你感到有点诧异,因为在iOS中旋转屏幕,你不需要做任何处理,一切照旧。

Kindle Fire / Amazon Store
在亚马逊商店发布应用相当简单,我只想说两点:

  • YouTube的SDK将会停止工作,因为需要Youtube 应用的支持,而YouTube应用在此是不可用的,但似乎它们是支持Flash的。
  • 为了亚马逊商店,你需要清除源代码里的内购代码。

你可以通过使用android.os.Build.MANUFACTURER 和 android.os.Build.MODEL. 来查询设备的制造商和型号。

在此列出一份kindle fire型号详细资料清单。

下一步?
希望未来我能给7分钟训练这个应用添加更多的功能,并且开发更多的Android应用。我相信我只看到了Android的冰山一角。谁知道呢,说不定接下来还有初探应用商店的精彩教程等着你呢。

时间: 2024-11-10 00:08:57

给 iOS 开发者的 Android 开发建议的相关文章

适用于iOS开发者的Android开发技巧

  我曾经从事过五年的iOS应用开发工作,那段时间我一直在尽量避免同Android打交道--不过现在情况不同了.不管大家是否相信,Android开发其实乐趣满满.而且与iOS开发相比也不像大家想象的那样差异巨大. 我在Android平台上开发出这款"七分钟锻炼"应用,并借此学到了很多宝贵的知识.我希望这篇文章分享的一些小技巧也能帮助大家解决实际问题.请注意,我接下来进行比较的内容并不一定完全匹配,而且本文的重点也不在于完整地叙述Android开发;当然,我一定会提到自己在开发这款简单应

【新手学习Android开发建议】

问题描述 最近很想学习Android开发,大家看看有什么新手学习的意见,或者学习的资源可以下载,谢谢!

开发者 请优先开发 Android 应用而非 iOS

在移动设备百花齐放的今天用户有多个系统平台可供选择,除了iOS和Android还有Windows和黑莓等等.可能对于一些规模比较大的公司他 们拥有更多的资源针对不同平台开发应用是一件很自然的事情,但是对于那些小团队或者是个人开发者来说,他们的资源精力有限,他们必须要考虑优先为哪个平台 开发应用,这可能是关系到整个团队或者是个人项目的成败,必须慎重考虑. 下面我们就来探讨一下为什么开发人员更应该优先为Android平台开发应用而不是为iOS.Windows以及黑莓等平台开发应用. 可移植性 原生的

分享40条Android开发的优化建议_Android

以下是开始Android编程的好方法:         1.找一些与你想开发的功能类似的代码:         2.调整它,尝试让它变成你想要的:         3.回顾开发中遇到的问题         4.使用StackOverflow来解决遇到的问题 对每个你想实现的东西重复上述过程.采用这种方法能够激励你,因为你在保持不断迭代更新,在这个过程里面你会学到很多.当然,当你发布应用的时候你还要去做一些更深入的东西. 从一些能够正常编译的代码到成为一个应用程序,这是一个质的飞跃,比起iOS,A

给Android应用开发者的10个建议

开发者的10个建议-微信开发者 10个应用"> 随着移动平台的发展和其应用的不断改善,质量成为决定成败的关键.用户要求他们选择安装的应用响应快.性能好,如果某个应用不能提供卓越的功能和稳定的用户体验,那这样的应用注定会被很快卸载. 尽管现在Android智能手机和平板电脑的运行速率越来越快,但开发者仍需牢记,应用的运行环境仍受到电池和处理器等诸多资源的限制.以下是如何为应用"瘦身"的十条建议,以便能在当前和以后的所有Android设备都能运行出最佳效果. 1)首先要有良

Flash开发如何使用iOS开发者授权以及如何申请证书

  在缴费成功后会收到一份来自Apple Developer Suport的确认邮件,如下图. 开发如何使用iOS开发者授权以及如何申请证书-微信第三方授权开发者"> 在邮件里有一个Login按钮,点击后可以进入Apple Developer会员中心.点击图中的iOS Provisioning Portal,进入开发者授权设置系统. 在设置界面中,可以选择点击页面下方的助手来运行向导. 或者直接从左边的导航来设置,我在这篇文章会主要介绍如何通过导航设置开发者授权以及证书.不过在此之前,我要

Android开发者生态:开发难度高 用户不愿付费

Android平台终于创造出它的第一个百万财富故事,遗憾的是主角仍是让人审美疲劳的<愤怒的小鸟>(Angry Birds).2010年10月底,开发此游戏的芬兰公司Rovio从取得极大成功的苹果iOS平台(包括iPhone.iPod Touch.iPad)扩张至Android,首月广告收入100万美元.此时据首款Android手机发布已过去整整两年.iOS上第一款月收入过百万美元的应用已不可考,但一夜暴富的故事至今屡见不鲜.最新上位者是2010年12月9日才开始发售的Infinity Blad

iOS开发者每赚1美元,Android开发者可赚90美分

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; 近日,来自外国媒体的一份调查显示,Android开发者与iOS开发者的收益鸿沟已经渐渐弥合.不久,开发者就可以在Android平台上得到与iOS相等甚至是超过它的收益. 以下是这份报告的其它主要内容: ·在广告营收.开发者收益等方面,Android的变现能力已经不亚于iOS.据悉,iOS开发者赚取1美元的同时,Android开发者在全球也可以赚到90美分.(100美

八一八android开发规范(一种建议)

开发规范重不重要了,不言而喻.这里就给大家说一故事把--据<圣经·旧约·创世记>第11章记载,是当时人类联合起来兴建,希望能通往天堂的高塔.为了阻止人类的计划,上帝让人类说不同的语言,使人类相互之间不能沟通,计划因此失败,人类自此各散东西.此故事试图为世上出现不同语言和种族提供解释.好的开发团队应该是同样的语言,同样的理念,同样的规范去做同一个事情.因此,这里说的开发规范不仅仅在android开发界重要,而且在所有的程序界的重要性也是不言而喻的. 这里说的开发规范分成目录规范,项目和报名的命名