Andorid 10分钟了解

1. Android App 想要实现什么

我觉得

Android = 独创设计(50%) + 简单开发(25%) + 强大API(25%)

  • 独创设计: 手机应用已经非常纷繁芜杂复杂了。学习可以是模仿,成功还需要自己独创的设计
  • 强大API: Android OS提供了大量的强大API,比如直接控制网络,电话,短信,GPS等。加上Google地图这类Mashup,可以实现很多强大功能。
  • 简单开发: 开发的要求并不是很高。基本上开发效率和你了解Andorid Reference程度相等。之所以说是了解,意思是你知道Androdi SDK是否有这个功能就足够了,用到的时候参看Sample就可以很容易掌握。

所以,如果你想用小小的手机,解决一个生活中的现实问题,那Android非常适合你。 如果考虑作为一个系统的手机客户端,那么最好以离线+同步的方式来减少不必要的流量计费

2. Android UI设计

以下转自英文资料

2.1. 别做的

  • 别把其他平台的外观直接放到Android
  • 别滥用等待进度条和弹出对话框
  • Layout不要使用绝对位置
  • 像素单位不要使用px,而是要用dp(字体是sp)
  • 不要使用小字体

2.2. 要做的

  • 管理好复杂屏幕的图片等资源文件的版本
  • 把按钮,选择框这些触发对象做得又大又明显
  • 遵循 Android的icon做成规范
  • 选择美观的外边距,内边距
  • 支持轨迹球和其他输入控制
  • 小心管理好各个窗口的迁移堆栈
  • 处理好手持方向的变化(比如竖放,横放)
  • 整理通用的风格,模版,颜色,以减少各个窗口自己管理的冗余

3. Android如何发布

Android的安装包是一种叫*.apk(Android Package)文件。程序最终都会以这种新式发布。

可以用直接提供用户*.apk下载,也可以通过Androdi商城发布,免费或收费的让用户自由下载。

商城发布没有研究过,也许需要Google审批。

4. Android如何运行

因为Android可以直接控制几乎所有的手机功能。所以*.apk必须明确需要哪些数据访问权限。在下载,安装的时候都回明确告知用户,“XXX数据将会被使用,你是否同意”云云,保护用户的手机不受恶意操作。

手机上安装后,只需要点击应用菜单的程序图标,程序就可以启动。

安装展开后的执行文件(*.dex文件)会在一个叫Dalvik的虚拟机上运行。和JVM的最大不同,它是基于寄存器的,设计得相对轻量。

dex文件没有使用java的class字节编码,是用自己特有的方式。

5. Android如何开发

5.1. 开发环境安装

网上有很多资料,因为目前开发平台只有Google提供的一款,所以内容都基本相同。大体上

  • 下载Androdi SDK

可能是被河蟹的缘故。不能访问http://developer.android.com的时候后面加上.nyud.net/如http://developer.android.com.nyud.net/

  • 下载Eclipse(带ADT Plugin)
  • 设置Eclipse 榜定 SDK
  • 使用ADT(直接SDK的也行,eclipse插件也行)在线更新最新的SDK(现在是2.2)
  • 使用ADT建立一个模拟器实例
  • helloWorld就可以几分钟搞定了

建议安装

  • Eclipse如果没有SVN插件的话,事先装好
  • 用到永久存储SQLite概率比较高。为方便编辑,装一个Firefox的 SQLite Manager的插件

因为使用了Java开发平台(转换成dex格式都是自动的,也没有深究,据说使用原始SDK,可以用C++编写直接代码),所以程序语言都很熟悉。

5.2. 基本术语

  • Activity
    • 通常就是一个屏幕
  • Intent
    • 一个对于操作动作的概念抽象。大到应用间的移动,广播,小到应用内的窗口 移动都需要Intent.不准确,但目前可以这样理解:一个操作需要当前activity以外的外部响应的时候,需要为这个外部响应创造一个泛 Intent的实例,之后把必要消息,参数传给这个外部实例,指派它去完成这个动作。
  • Intent Filter
    • 外部响应的过程,并不是由当前的Acitvity直接去指派某某去做。而是间接的告诉系统,我的这个任务是什么,请帮我指派符合要求响应。而系统正是通过各个响应的Inter Filter来确认,谁是最适合的。如果多个合适,就出一个选择让用户定夺。
  • Service
    • 顾名思义,就是后台服务。比如杀毒软件。通常他们也有Activity来做设置,启动操作什么的。一旦启动后,会长时间呆在后台运行。
  • ContentProvider
    • 可以通过ContentProvider把资源或者服务共享。与SQLite数据库存储方式不同,用ContentsProvider保存的data,通过统一的URI命名方式,可以让手机上其他的所有应用程序访问到。而数据操作的方式,非常类似SQLite的数据库操作。

5.3. 一个应用的资源包括

  • 对应Android版本设置(default.properties)
    • 不用自己写。
  • 应用的配置描述文件(AndroidManifest.xml
    • 整体描述,管理整个应用。例如入口窗口是什么,都有哪些窗口,每个窗口的Java Class是什么。类似Struts的config。
  • UI描述文件(res/layout/*.xml)
    • 用来设置各个界面的Layout。基本类似一个HTML文件。如同Ajax操纵HTML的各个tag一样,需要为那些需要操作的项目编号(如:@+id/setitem_textview01)
  • 一些CodeBook,Message类似的配置文件(res/values/*.xml)。
    • 这些文件可以分类型定义。UI文件和Java程序都可以直接读取这些定义。
  • 根据以上设置文件,会自动生成一个R.java(gen/package/)的文件。
    • 简单的说,就是为每一种配置类型(例如刚才的ID编号,全局的 message定义等)建立一个inner Class。每个Class里面就是各个设置项目的Const定义。因为整个App就一个R.java,所以相同类型的项目就不要取一样的名字。同时既然 是自动生成,千万别手改的。
  • 其他图片,flash等资源文件(res)
  • 剩下的就是Java文件。
    • Android应用的单位就是各个窗口,这个被称为activity(等同于其他语言的form)。所以有多少个不同的窗口,就有多少个activity。而每个窗口是事件驱动的。所以里面也就是些 OnCreate(),onActivityResult()等方法。其他的,例如共通程序,工具类,数据库操作等等,和普通的Java Class没有什么区别。

5.4. Activity的典型设计流程

  • 窗口活动组成我们的应用。所以最开始必须确定哪一个是入口窗口(menu),哪些是主窗口,那些是附属窗口(类似popup窗口)。以及他们的迁移。
  • 建立一个继承Activity的窗口类 FooActivity
  • 建立一个相关的UI界面 Foo.xml (这个时候系统会自动更新R.java)
  • 在应用中注册这个窗口 AndroidManifest.xml。

[sourcecode language=’xml’]


[/sourcecode]
如果是入口窗口,需要注明
[sourcecode language=’xml’]


[/sourcecode]

  • 在FooAcitvity里面绑定view

[sourcecode language=’java’]
setContentView(R.layout.xxx);
[/sourcecode]

  • OK,直接Run,在应用程序里面就有你的程序了。
  • 接着是编写事件触发。首先通过R.java找到那个按钮对象

[sourcecode language=’java’]
Button addPayoutBtn = (Button) findViewById(R.id.setitem_add_btn);
[/sourcecode]

  • 然后为这个按钮绑定监听

[sourcecode language=’java’]
Button addPayoutBtn = (Button) findViewById(R.id.setitem_add_btn);
addPayoutBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// event处理
}
});
[/sourcecode]

  • 如果是迁移(启动下一个窗口)

[sourcecode language=’java’]
startActivity(new Intent(MainActivity.this, BookSearchActivity.class));
[/sourcecode]