<service>

语法

包含于

<application>

可包含

<intent-filter>

<meta-data>

描述

将一个服务(Service 的子类)声明为某个应用程序的组件。与活动不同,服务没有用户界面。它用于处理长时间的后台操作,或实现可被其他应用程序调用的富交互 API。

属性

android:enabled

该服务是否能被系统实例化。“true”表示可以,“false”表示不可。默认值为“true”。

<application> 元素也具有 enabled 属性。这一属性作用于包括服务在内的该应用程序所包含的所有组件。如果要使用某个服务,<application> 与 <service> 的 enabled 属性必须同时为“true”。如果其中有一方为“false”,该服务就将被禁用,无法被系统实例化。

android:exported

该服务能否被其他应用程序的组件调用或与之交互。“true”表示可以,“false”表示不可。如果为“false”,只有同一应用程序,或具有相同用户 ID 的应用程序的组件才能启动或绑定该服务。

该属性的默认值由服务是否包含意图过滤器决定。如果该服务不含任何意图过滤器,则表示要调用它必须明确指定其类名。这意味着该服务被设计为仅供应用程序内部使用(因为其他应用程序无法知晓服务的类名)。此时,exported 属性的默认值为“false”。另一方面,如果存在一个或更多的意图过滤器,则表示该服务可被外部程序调用,于是默认值为“true”。

要限制一个服务被其他应用程序调用,这只是方法之一。我们也可以利用 permission 来限制外部实体与服务发生交互(参见 permission 属性)。

android:icon

代表该服务的图标。该属性必须是某一drawable资源(包含了图像的定义)的引用。如果不为该属性赋值,该服务将默认使用应用程序的图标(参见 <application> 元素的 icon 属性)。

无论通过该属性设置,还是直接沿用 <application> 元素的图标,服务的图标也是该服务所有意图过滤器的默认图标(参见 <intent-filter> 元素的 icon 属性)。

android:isolatedProcess

如果为“true”,该服务将运行于某个特殊进程,与系统其他进程分隔,且不提供任何访问权限。此时,我们只能通过 Service API 与之通信(绑定与启动)。

android:label

用于向用户显示的服务名称。如果不为该属性赋值,该服务将默认使用应用程序的名称(参见 <application> 元素的 label 属性)。

无论通过该属性设置,还是直接沿用 <application> 元素的名称,服务的名称也是该服务所有意图过滤器的默认名称(参见 <intent-filter> 元素的 label 属性)。

该标签应该是某一 string 资源的引用,以便与其他在用户界面中显示的字符串一样进行本地化。不过,在开发过程中,为了方便,该属性也支持直接使用字符串字面量。

android:name

实现了该服务的 Service 子类的名称。它应当为完整的类名(如”com.example.project.RoomService”)。不过,为便于使用,我们可以仅使用包名之后的部分(如”.RoomService”),<manifest> 元素中指定的包名将被自动补全。

一旦我们发布了应用程序,就不该再去修改它的名称(除非 android:exported 被设为“false”)。

该属性没有默认值,但必须被赋值。

android:permission

未启动或绑定该程序所必需的权限名称。如果 startService()、bindService() 或 stopService() 的调用方不具有该权限,就无法访问该服务,Intent 对象也不会被传送。

如果该属性未赋值,<application> 元素的 permission 属性将作为其默认值。如果 <application> 元素同样为对 permission 属性赋值,该服务将不受权限保护。

如需获得更多信息,参见简介中的权限一节,或参见文档《安全与权限》。

android:process

运行该服务的进程名称。通常,一个应用程序的所有组件都运行于为其创建的默认进程。该进程与应用程序的包名同名。我们可以通过 <application> 元素的 process 属性为所有组件设置一个不同的默认进程名称。同时,组件也可以通过改写其 process 属性的值,使应用以多线程的方式运行。

如果该属性的值以冒号(”:”)起始,则会在必要时创建一个应用程序私有的新进程来运行该服务。如果进程名称以小写字母起始,该服务将运行于一个同名的全局进程。此时,该属性表示服务有权限使用该进程。于是,不同应用程序中的组件可以共享一个进程,节约了资源的使用。

参见

<application>

<activity>

引入版本

API Level 1

Android Studio 开发环境概览

Android 操作系统诞生至今业已8年,不但系统自身逐步完善,开发中的最佳实践也不断推陈出新,连 Google 官方的推荐 IDE 也从 Eclipse 变为了 Android Studio。在相当时间的预览版之后,Android Studio 终于于去年底(2014年12月8日)发布正式版。经过学习与摸索,自己的项目也都迁移至 Android Studio。

Android Studio 基于 JetBrains 开发的 IntelliJ IDEA,它提供了极为强大的上下文提示与代码补全、资源实时预览、丰富便捷的跨项目导航、内置终端界面及可靠的重构工具。Eclipse + ADT 已经成为了过去时。

Gradle 是一种比 Ant 与 Maven 等传统方式更为先进的编译工具,被整合于 Android Studio。唯一的问题是自动解决库依赖等一些特性需要网络支持,在网络环境不好的情况下反而成为了拖累。

JUnit 与 Espresso 是官方推荐的测试工具Genymotion 是性能远超官方的模拟器(及 Intel HAXM)。不过没有对 Google Play 开发者服务提供原生支持。此外,用于代码混淆的 ProGuard 和静态代码优化的 Lint 也都是常用工具。

从 Eclipse 迁移至 Android Studio 已是大势所趋,初学者也应直接从 Android Studio 入门,从最初就避免很多不必要的问题。尽管目前网络上仍以 Eclipse 的教程居多,但谁能保证 Google 不会哪天就决定放弃支持了呢(笑)。

Android 4.1中文简介

本文主要译自Android开发者网站的面向开发者的Android 4.1简介文章,目的在于简述Android 4.1系统的新特性,提供一个概略级的了解。没有使用该文章中的图片。相关图片以及详细的内容请直接点击链接查看。

Android 4.1 将是迄今为止最为快速流畅的 Android 版本,同时增加了大量对开发者和用户来说很便利的功能。要了解最新的 API 具体细节,请参见“Android 4.1 APIs”。

更快,更流畅,更多反馈

Android 4.1 进行了大量优化来降低延迟,提供轻松的操作体验。Android 4.1 采用了垂直同步计时(vsync timing) 来实现稳定的动画帧速。渲染、触摸事件、刷新等都按照相同的频率进行而不会忽快忽慢。

Android 4.1 还在图形流水线中增加了三倍缓冲(triple buffering来进一步提升各种操作的流畅性。

除了将触摸与垂直同步计时相同步(synchronizing touch外,Android 4.1 还会预测(anticipating触摸位置来进行提前刷新以提高流畅度。在必要时还会使用CPU输入增强(CPU input boost来确保没有延迟。

Android 4.1 使用了新的 systrace 来直接从内核收集数据,进一步提升流畅度。这些数据被表示为一组垂直堆叠的时序图,用来分离渲染中断和其他事件。该工具在最新的 SDK 已经可用。

增强的使用性

新增了一些帮助使用设备的功能。

更好的国际化支持

在 TextView 和 EditText 中支持双向文字显示(从左至右与从右至左)。

新增一些语言支持。新版的表情文字支持。更好的日语字形支持。WebView 中的垂直文本支持。等。

支持自定义键盘布局。并可开发相应的应用供用户使用。

更漂亮的UI

可扩展通知能够提供更多的信息以及新类型的数据。支持更多的通知风格并能给通知增加更多的可操作功能。

可缩放桌面插件能自动变更为适合的尺寸以显示在桌面上。

得益于简化的任务导航,返回上一级菜单变得更为简单而易于理解。这可以通过 XML 属性的方式在 manifest 文件中实现。

而新的 TaskStackBuilder 类则提供了快速启动任务栈中的任务的可能。

新的 ActivityOptions 辅助类使得 Activity 的动画效果更易于控制。此外还有新的淡入淡出等过渡动画效果。

GridLayout 和 ViewStub 也可作为可遥控视图用于桌面插件等场合。

动态桌面背景支持预览功能使得用户能更容易地识别它们。

联系人照片则支持高达720×720的分辨率。

新的输入类型

应用程序可以得知设备的连接情况,在比如连接 USB 或蓝牙时得到通知。

应用程序还能获取当前连接的外部输入设备的情况甚至控制设备的震动

动画和图形

应用程序可以通过系统级的垂直同步计时来获得更好的图形动画性能。同时还能使用种类更为丰富的动画效果。

新的连接功能

通过基于 NFC 的 Android Beam 实现更轻松的分享功能。

更强的 WiFi 网络支持使得设备可以和其他 WiFi 设备连接并互换数据。

支持网络带宽管理以更好地管理数据流量

新的多媒体功能

新增包括低级解码支持、USB 音频、音频录制触发功能、支持 5.1 声道 ACC 解码的多声道音频、音频预处理和链化等在内的音频高级功能。

支持媒体路由器以选择媒体播放方式。

Renderscript运算

Android 4.1 扩展了 Renderscript 运算使得支持更强的灵活性,能在更多的硬件上更好地运行。

浏览器和 WebView

Android 4.1 中有更好的 HTML5/CSS动画/Javascript 等性能。

Google API 和服务

支持 Google Cloud Messaging for Android,用于发送简短消息。

支持应用加密以更好地防止盗版。

支持应用程序的智能升级,只需下载所需升级部分的 apk 文件即可,减少了数据流量的使用。

以及将来更多的 Google Play 服务。

这次的 Android 4.1 虽然和 4.0 相比没有提升大版本号,但是改进之处也相当多。能很明显的感受到 Android 系统正在一步步走向成熟与完善。虽然过往机型不一定都能得到最新系统的升级,不过随着时间的推移,Android 系统设备的体验必然会越来越好。

手势操作

手势操作允许用户通过摆弄所提供的屏幕对象来与应用程序交互。下面展示了 Android 所支持的核心手势操作集。

触摸(Touch)

触发所选对象的默认功能。

动作:按下(Press)、放开(Lift)

长按(Long press)

进入数据选择模式。允许你选择一个视图中的若干个项目并通过上下文相关操作栏(contextual action bar)对数据进行操作。尽可能避免通过长按来显示上下文菜单(contextual menu)。

动作:按下、等待(保持,Wait)、放开

滑动(Swipe)

滚动那些无法在一个视图中完整显示的内容,或是在相同层级的视图之间切换。

动作:按下、移动(Move)、放开

拖动(Drag)

重新排列一个视图中的数据,或是将数据移入某一容器(例如文件夹或 Home 界面)中。

动作:长按、移动、放开

双击(Double touch)

缩放内容。也被用于文本选择的备用手势操作。

动作:快速连续双击屏幕

两点远离(Pinch Open)

放大局部内容。

动作:两指按下、反向移动、放开

两点靠近(Pinch close)

缩小当前内容并增加整体显示范围。

动作:两指按下、相向移动、放开

 

上一节

下一节

本页部分内容根据Android Open Source Project创作并共享的内容修改,并在知识共享 署名2.5许可协议中所述条款的限制下使用。

Android 4.0 中的新要素

导航栏

Android 4.0 通过使用包含了返回键(Back)、Home键和最近项目键(Recents)的虚拟导航栏来替代手机上传统的实体按键。请阅读“兼容性范式(英文/中译)”一文以了解有实体按键的手机和依赖菜单键的早期应用是如何被新版本的操作系统所支持的。

操作栏(Action bar)

操作栏是一个 Android 应用的最重要的结构性元素(structural element)。它提供了贯穿整个平台的导航功能并支持在你的应用中显示操作快捷方式。

多板块布局(Multi-pane layouts)

创建在不同条件和屏幕尺寸下都能自如缩放的应用对于 Android 开发来说是很重要的一点。多板块布局使你能够将不同的活动一起显示在平板设备的同一个视图上,而在小型设备上,这些活动则将被分开在不同视图中单独显示。

选择(Selection)

过去手势操作“长按”的作用是用于显示对象的上下文有关操作,而现在这一操作被用于数据选择。在选择数据时,将出现上下文有关的操作栏以供快捷操作。

上一节

下一节

本页部分内容根据Android Open Source Project创作并共享的内容修改,并在知识共享 署名2.5许可协议中所述条款的限制下使用。

语言风格

在为你的应用撰写文本内容时需要注意的几点:

  1. 保持简洁。要简明——简单并且准确。标题保持在30个字母之内(包括空格)【译注,这里是英文的情况,中文的话,十五个汉字以内为宜】,如非必要不要使用更多的字母。
  2. 保持简短。请假设你现在正在对一个聪明机灵但不明白那些专业术语甚至英语水平也不是特别好的用户说话。你需要使用简短的词语,主动形式的动词和常见名词。
  3. 用户友好。使用缩写。使用第二人称(“你”)直接和用户交谈。按照你平时的日常交谈中所使用的遣词措句来书写语句。不要使用粗鲁或惹人厌烦的语言,要让用户感觉安心、愉快且被鼓励。
  4. 在文首说明最重要的内容。最初的两个单词(包括空格约11个字母)【译注,同样是英文的情况。中文也须相应注意】应该至少包含了语句中最重要的信息的一部分。如果不是,请改写。
  5. 只写需要写的内容,不要写多余内容。不要对细微的差异作解释,大多数用户不关心这些问题。
  6. 避免重复。如果一个词在屏幕中或一段文本里明显重复出现,请想办法修改使其只出现一次。

范例

【译注,范例中的英文都比较简单,且需要注意的地方能与中文相通,就不做翻译了】

1.保持简洁。在启动向导中:

【过于正式的文字】

Consult the documentation that came with your phone for further instructions.

【改进版本】

Read the instructions that came with your phone.

2.保持简短。在地理位置设置中:

【容易使人困惑的文字】

Use GPS satellites
When locating, accurate to street level.

【改进版本】

GPS
Let apps use satellites to pinpoint your location.

3.用户友好。当程序崩溃时弹出的窗口:

【容易令人懊恼的版本——说“Sorry”只是伤口撒盐】

Sorry!
Activity MyAppActivity (in application MyApp) is not responding.
Force close Wait Report

【改进版本——简短而直接,不含缺乏诚意的道歉】

MyApp isn’t responding.
Do you want to close it?
Wait Report Close

4.首先说明重要信息

【把新情报置于了最后】

77 other people +1’d this, including Larry Page.

【改进版本】

Larry Page and 77 others +1’d this.

【把要做的任务写在了最后】

Touch Next to complete setup using a Wi-Fi connection.

【改进版本】

To finish setup using Wi-Fi, touch Next.

5.只描述需要的内容,不说多余的内容

【某个启动向导中的文字】

Signing in…
Your phone needs to communicate with
Google servers to sign in to your account.
This may take up to five minutes.

【改进版本】

Signing in…
Your phone is contacting Google.
This can take up to 5 minutes.

 

上一节

下一节

本页部分内容根据Android Open Source Project创作并共享的内容修改,并在知识共享 署名2.5许可协议中所述条款的限制下使用。


图标设计(Icongraphy)

图标(icon)是占据一小块屏幕空间的图形,它提供了某一操作、状态或是一个应用程序的快速直观的表达。

应用程序启动器(launcher)

启动图标是你的应用程序在“主屏幕(Home)”或是“所有程序界面(All Apps)”中的视觉显示。因为用户可以改变主屏幕的壁纸,所以需要确保你的启动图标在任何类型的背景下都能被看清。

尺寸和缩放

移动设备上的启动图标尺寸必须为48×48 dp

显示在Google Play上的启动图标必须为512×512像素

比例

图标的完整尺寸为48dp

风格

使用容易区分的轮廓。三维、正视方向、如果是自上向下的话则添加一些透视效果,以使用户看得出深度。

操作栏(Action Bar)

操作栏图标是你的应用程序中最重要操作的图形按钮。每一个图标都应该使用简单的类比以让用户一下子就能理解其含义。

预定义的图标应当被用于例如“刷新”和“共享”等特定的常用操作。下面的下载链接提供了适合于不同屏幕密度以及Holo Light和Holo Dark主题的图标。该解压包中还包括了可以方便地修改以适应自定义主题的原型图标,以及可供深度自定义的Adobe® Illustrator®资源文件。

下载操作栏图标包

尺寸和缩放

手机上的操作栏图标应为32×32dp

中心区域与比例

完整尺寸为32×32dp

中心区域为24×24dp

风格

象形的、平面的、较少的细节,光滑弧线或是尖锐图形。如果图形很细,则左转或右转45度以填充整个中心区域。线条的粗细和线条间隔至少要为2dp。

色彩

色彩: #333333
启用: 60% 不透明度
禁用: 30% 不透明度

色彩: #FFFFFF
可用: 80% 不透明度
禁用: 30% 不透明度

小型图标/语境图标(contextual icon,即根据当前操作而变化的图标)

在你的程序里,对于表层操作(surface action)要使用小型图标且/或为条目提供状态图标。例如,在Gmail中,每一条消息都有一个星标用于将其标记为重要。

尺寸和缩放

小型图标应为16×16dp

中心区域和比例

完整尺寸为16×16dp。

中心区域为12×12dp。

风格

朴素、平面而简洁。实心图形比细框图形更容易看清。使用简单的视觉类比让用户可以简单地识别并理解其用途。

色彩

尽可能仅在需要时才使用艳丽的色彩。例如,Gmail用黄色的星形来表示被标记的消息。如果该图标是可以操作的话则采用和背景色对比强烈的色彩。

通知图标

如果你的应用程序会产生通知,则要在有新通知时提供一个系统可以用于显示在状态栏的图标。

尺寸和缩放

通知栏图标应为24×24dp

中心区域与比例

完整尺寸为24×24dp

中心区域为22×22dp

风格

使用平面而简洁的风格,并采用和启动图标相同的简单视觉类比。

色彩

通知图标必须是白色的。同时,系统可能会缩小且/或使图标变暗。

上一节

下一节

本页部分内容根据Android Open Source Project创作并共享的内容修改,并在知识共享 署名2.5许可协议中所述条款的限制下使用。

色彩

色彩主要用于强调。选择适合于你的界面的色彩以在不同的视觉元素间形成良好的对比效果。注意红色和绿色对于色盲用户来说可能是无法分辨的。

调色盘

蓝色是Android色彩盘中的标准色彩。每一种色彩都有对应的深色调版本,可以在需要时作为一种补充。

下载样板

上一节

下一节

本页部分内容根据Android Open Source Project创作并共享的内容修改,并在知识共享 署名2.5许可协议中所述条款的限制下使用。

活版印刷(Typography)

Android设计语言依靠例如缩放(scale)、间距(space)、变化(rhythm)和下网格对齐(alignment with an underlying grid)等传统的印刷排版工具。要让用户快速了解屏幕上的信息,对于这些工具的有效使用是很有必要的。为了支持印刷排版的这些功能,ICS引入了一种名为Roboto的新的字体族,它专为UI以及高分辨率屏幕设计。现有的TextView框架默认支持常规、粗体、斜体、和粗斜体等。

下载Roboto

样本手册

 

 

 

 

 

 

默认字体色彩
Android UI使用以下的默认色彩样式:textColorPrimarytextColorSecondary。亮色主题使用textColorPrimaryInversetextColorSecondaryInverse。当框架文本色彩样式在UI元素内部被使用时也支持用于触摸回馈状态的变体:

印刷缩放
文本尺寸的对比对设计出有条理而易于理解的布局很有帮助。不过,在同一UI中过多的不同尺寸也会造成混乱。Android框架使用以下尺寸集。

用户可以在设置中选择文本的系统级缩放因子。为了支持这一可读性功能,文本应该尽可能地使用sp这一缩放无关单位。要使用这些设定来测试所有支持缩放文本的布局。

上一节

下一节

本页部分内容根据Android Open Source Project创作并共享的内容修改,并在知识共享 署名2.5许可协议中所述条款的限制下使用。