Android背后的设计思想——功能共享机制

合集下载

Android系统的原理及其应用场景

Android系统的原理及其应用场景

Android系统的原理及其应用场景I. 介绍Android系统Android是一款开源操作系统,最初是由Google公司开发的。

该系统基于Linux内核,可以在手机、平板电脑,智能手表等各种移动设备上运行。

作为全球最受欢迎的移动操作系统之一,Android系统被广泛应用于移动互联网和智能终端领域。

II. Android系统的原理1. 基础架构Android系统基于Linux内核,并采用Apache许可证发布。

在操作系统级别,Android提供了一套基础架构,包括各种库、服务、API以及应用程序环境。

这些组件共同构成了Android系统的基础模块。

2. 虚拟机Android系统中最常用的计算机程序是Java虚拟机(Dalvik或Art),它们用于解释运行Java代码。

这种编程方式可以使开发人员更容易地编写应用程序,同时也能增加程序的安全性,并提高程序的性能和效率。

3. 共享库Android系统在运行时使用了大量的共享库,它们被分配在特定的位置,分别用于控制输入/输出、显示图像、播放音频和视频等操作。

共享库可以被所有的Android应用程序共享,可以提高程序的稳定性和可靠性。

4. 应用程序Android应用程序是基于Java开发的,它们使用Android的底层库和服务来完成各种任务。

Android系统支持多种应用类型,包括游戏、社交媒体、生产力应用等。

通过各种应用程序,可以让Android应用系统成为一个拥有丰富功能和各种类型的生态系统。

III. 应用场景1. 移动互联网Android系统是移动互联网时代最具代表性的操作系统之一,它由于其稳定、开放、免费等特点成为开发者和用户的首选。

2. 智能家居随着物联网技术的蓬勃发展,智能家居正成为人们关注的焦点。

Android系统具备良好的互联性和可扩展性,可以被应用到智能家居的多个领域。

3. 科技教育Android系统的开放性和便捷性,为科技教育领域带来了更多的机会。

android 应用分屏实现原理

android 应用分屏实现原理

android 应用分屏实现原理Android应用分屏的实现原理主要基于Android系统的多窗口支持功能。

从Android 7.0(Nougat)开始,Google引入了多窗口模式,为用户提供了同时运行和操作多个应用的能力。

以下是关于Android应用分屏实现原理的600字解释:Android的分屏功能允许用户在一个屏幕上同时查看和使用两个应用。

这在多任务处理时特别有用,比如一边查看网页资料,一边编写文档。

基本工作原理:1. 系统支持:首先,Android系统必须具备多窗口支持。

从Android 7.0开始,这一功能成为系统的标准配置。

2. 应用兼容性:不是所有的应用都可以或需要支持分屏模式。

开发者可以选择他们的应用是否支持这种模式。

3. 用户启动:用户可以通过特定的手势或按钮组合来启动分屏模式。

例如,在某些设备上,用户可以长按“概览”按钮或使用特定的滑动手势来启动分屏。

4. 屏幕划分:一旦分屏模式被激活,系统会从设备中间以横向或纵向方式划分系统界面,为用户提供两个活动窗格供他们放置应用。

5. 应用放置:用户可以选择哪些应用放置在哪个窗格中。

通常,最近使用的应用会被建议放置在新的窗格中。

6. 交互与通信:两个应用虽然同时显示,但它们之间的交互是有限的。

开发者可以使用特定的API来实现两个应用之间的数据共享或通信。

7. 资源管理:系统需要智能地管理资源,如CPU、GPU 和内存,以确保两个应用都能流畅运行。

8. 退出分屏:用户可以通过与启动分屏相似的手势或按钮组合来退出分屏模式。

开发者角度:为了支持分屏模式,开发者需要确保他们的应用可以适应不同的屏幕尺寸和方向。

此外,他们还需要处理可能的资源竞争问题,确保应用在分屏模式下能够正常运行。

总的来说,Android的分屏功能为用户提供了一种更为高效和灵活的多任务处理方式,而背后的实现原理则涉及了系统、应用和用户之间的复杂交互和资源管理。

android线程间同步 原理

android线程间同步 原理

android线程间同步原理Android线程间同步是指通过一定的机制来保证多个线程之间的操作按照一定的顺序进行,避免出现数据竞争和并发问题。

在Android开发中,线程间同步是非常重要的一部分,它能够保证程序的正确性和稳定性。

Android中的线程间同步主要通过以下几种方式实现:1. 使用synchronized关键字:synchronized关键字可以修饰方法或代码块,当一个线程访问被synchronized修饰的代码时,其他线程必须等待该线程执行完毕才能继续执行。

这样可以保证多个线程对共享资源的互斥访问。

2. 使用Lock锁:Lock是Java.util.concurrent包下的一个接口,它提供了比synchronized更加灵活和可扩展的锁机制。

Lock锁可以通过lock()方法获取锁,并通过unlock()方法释放锁。

与synchronized相比,Lock锁具有更强的功能,比如可以实现公平锁、可重入锁等。

3. 使用volatile关键字:volatile关键字用于修饰变量,它可以保证变量的可见性和有序性。

当一个线程修改了被volatile修饰的变量时,其他线程可以立即看到这个变化。

这样可以保证多个线程对变量的读写操作是同步的。

4. 使用wait()和notify()方法:wait()方法可以使当前线程进入等待状态,直到其他线程调用notify()方法唤醒它。

这样可以实现线程间的协作和同步。

5. 使用Condition条件:Condition是Lock锁提供的一个条件类,它可以让线程在满足一定条件时等待或唤醒。

通过Condition条件,可以更加灵活地控制线程的等待和唤醒。

Android线程间同步的原理是通过上述机制来实现多个线程之间的互斥访问和同步操作。

当多个线程同时访问一个共享资源时,通过上述机制可以保证每个线程按照一定的顺序执行,避免出现数据竞争和并发问题。

在Android开发中,线程间同步非常重要,特别是在涉及到多线程访问共享资源的情况下。

Android平台下智能手机多屏互动系统的设计

Android平台下智能手机多屏互动系统的设计

Android平台下智能手机多屏互动系统的设计摘要:本文设计的Android平台下智能手机多屏互动系统,定义了一种支持智能手机对智能电视远程遥控和文件共享的通信协议。

协议安全稳定、扩展性强,适用于多个平台;通过分析Android系统特有的进程模型,实现了运行在智能电视端的服务器应用。

关键词:Android平台;智能手机;多屏互动;通信协议1.引言本文设计的Android平台下的智能手机多屏互动系统,系统设计包括建立客户端和服务器之间的通信两方面。

服务器对客户端命令进行解析和执行以实现手机操作到智能电视的映射—服务器的实现依赖于通信协议的定义。

智能手机的多屏互动技术是指实现智能手机与智能电视、平板电脑、PC等多屏之间的设备关联、内容共享和用户信息的交互技术。

多屏互动技术,能够通过无线互联的方式,整合优化现代家庭、商务、教育、娱乐等应用场景中设备之间的联系,使其互连互动、避短集优,实现资源最大化分享利用。

通信的难点在于其安全性和稳定性,针对这一难点,系统定义了运行在TCP协议层的可靠通信协议,并通过设立账户实现安全控制。

系统实现了运行在智能电视端的服务器应用,并通过分析Android系统特有的进程模型,解决了服务器应用向系统正在运行的前台应用发送按键事件的难题。

2.通信协议的设计系统的设计目标是为有权限的用户提供服务、智能手机对智能电视远程遥控和文件共享。

系统的交互需求分为命令控制和文件共享两大类:命令控制实现智能手机模拟遥控器直接发送按键命令,或将用户手势输入、体感输入和语音输入转换为相应的命令对智能电视进行遥控;命令控制同时包括用户账户控制。

文件共享实现智能手机将图片、视频及文本等数据文件传输到智能电视。

智能手机客户端和智能电视服务器之间稳定、安全的通信建立在设计合理、支持系统交互需求、可扩展性强、可移植性强的通信协议的基础上。

2.1协议模型协议定义在TCP/IP协议的应用层,参考FTP协议制定,由于TCP是可靠通信协议,将协议定义在该层保证了系统通信的稳定性和可靠性。

android后台服务概述

android后台服务概述

android后台服务概述Android作为一个移动操作系统,除了提供良好的用户界面和丰富的应用程序开发框架外,还提供了强大且灵活的后台服务机制。

Android后台服务是一种在后台持续执行操作的组件,它可以为应用程序提供持久化的运行环境和处理长时间运行任务的能力。

本文将对Android后台服务进行概述,并介绍它的特点、使用场景和使用方法。

一、Android后台服务的特点1. 持久化运行:Android后台服务可以持续运行,不受用户界面的限制。

即使用户切换到其他应用程序或锁屏,后台服务仍然可以继续运行,并在有需要时执行特定的任务。

2. 无需用户交互:与前台活动不同,后台服务不需要与用户进行交互,它在后台默默地执行任务。

这使得开发者可以利用后台服务来执行一些耗时的操作,如下载文件、发送网络请求等,而无需用户等待。

3. 多线程支持:Android后台服务在执行任务时通常是在单独的线程中工作,这样可以避免阻塞主线程,保持应用程序的响应性。

4. 生命周期管理:Android后台服务有自己独立的生命周期,并且可以通过启动、停止、销毁等方式进行管理。

开发者可以根据需要控制后台服务的运行状态。

二、Android后台服务的使用场景1. 多媒体播放:后台服务可以用于播放音乐、视频等媒体资源。

用户可以切换到其他应用程序,同时后台服务可以继续播放音乐,并提供相关的控制接口。

2. 网络操作:后台服务可以执行网络请求、数据下载等操作,用户可以在后台进行其他任务,而不受网络操作的影响。

3. 数据处理:后台服务可以用于处理复杂或耗时的数据操作,如数据库访问、图片处理等。

用户可以在后台执行其他任务,而不必等待数据处理完成。

4. 定时任务:后台服务可以用于执行周期性的任务,如定时通知、数据同步等。

用户可以设置定时任务,并在后台无感知地进行。

三、Android后台服务的实现方法1. 继承Service类:Android提供了Service类供我们继承,通过重写其中的方法实现自定义的后台服务。

android开发平台的框架原理

android开发平台的框架原理

android开发平台的框架原理在Android开发平台中,框架原理是指Android系统提供的一组基础框架,用于支持开发者创建Android应用程序。

这些框架包括了各种功能模块,用于处理用户界面、数据存储、网络通信、多媒体处理等多个方面。

其中最核心的框架是应用程序框架(Application Framework),它包含了四个重要的组件:Activity、Service、Broadcast Receiver和Content Provider。

这些组件共同构成了Android应用程序的基本架构。

Activity是用户界面的核心,负责与用户交互。

每个Activity都对应一个屏幕,并通过视图层次结构(View Hierarchy)来展示用户界面。

Service是后台运行的组件,用于执行长时间运行的任务,而不需要与用户界面进行交互。

例如,可以使用Service来播放音乐或下载文件。

Broadcast Receiver用于接收和响应系统或其他应用程序发送的广播消息。

例如,可以使用Broadcast Receiver来接收来电或短信的通知。

Content Provider用于管理应用程序的数据。

它提供了一种标准的接口,允许应用程序之间共享数据。

通过Content Provider,应用程序可以访问其他应用程序的数据,或者共享自己的数据。

除了这些核心组件,Android开发平台还提供了许多其他框架,用于实现各种功能。

例如,用于网络通信的框架包括HttpURLConnection和HttpClient,用于数据存储的框架包括SQLite数据库和SharedPreferences,用于多媒体处理的框架包括MediaPlayer和Camera等。

这些框架的原理是基于Android系统的底层架构。

Android系统基于Linux内核,提供了许多基础服务和库,包括进程管理、内存管理、文件系统管理等。

应用程序通过使用这些服务和库,可以实现各种功能。

安卓多开原理

安卓多开原理
安卓多开原理是通过虚拟化技术来实现的。

虚拟化技术是指在一台物理计算机上创建多个虚拟的运行环境,每个虚拟环境都可以独立运行应用程序,互相之间相互隔离,就像是在一台计算机上运行了多台独立的计算机。

在安卓多开中,通过虚拟化技术创建多个虚拟的安卓运行环境,每个虚拟环境都具有独立的系统和应用程序。

这些虚拟环境被称为虚拟机,每个虚拟机都有自己的独立存储空间、内存和其他资源。

每个虚拟机可以安装和运行不同的安卓应用程序,就像是在一台设备上同时运行多个安卓系统一样。

实现安卓多开的常用工具包括虚拟化软件和虚拟机引擎。

虚拟化软件用于创建和管理虚拟环境,常见的虚拟化软件有Parallel Space、VirtualXposed等。

虚拟机引擎负责模拟安卓系
统的运行环境,常见的虚拟机引擎有VirtualBox、VMware等。

在安卓多开的过程中,虚拟化软件会创建一个或多个虚拟环境,并将安卓系统安装到虚拟环境中。

每个虚拟环境都有一个独立的应用程序列表和数据存储空间。

用户可以在每个虚拟环境中安装不同的应用程序,并且这些应用程序之间相互独立,彼此不会产生冲突。

虚拟化技术通过将物理资源虚拟化为多个独立的逻辑资源,并提供隔离机制,实现了安卓多开的功能。

每个虚拟环境都是相互隔离的,不会相互影响,用户可以在不同的虚拟环境中同时使用不同的安卓应用程序,提高了使用效率和便利性。

android实验报告05-ContentProvider数据共享

实验五 ContentProvider数据共享一、实验目的与要求目的:了解ContentProvider,能够使用ContentProvider访问其他程序的数据、创建自己的ContentProvider、使用ContentProvider实现数据的共享。

要求:1、使用ContentResolver操作ContentProvider暴露出来的数据2、新建一个自定义的ContentProvider的子类,实现insert(),query(),delete(),以及update()方法。

3、在Logcat日志中显示相关方法的调用。

二、实验内容自定义一个继承自ContentProvider的类,并初始化数据库。

使用Context 提供的的getContentResolver()方法创建getContentResolver对象,调用其包含的方法操作数据。

三、实验环境操作系统:Windows●Java开发包:JDK8●开发工具:Android Studio 3.2四、实验过程记录1、了解ContentProvider和ContentResolver内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能ontentProvider用来管理数据的访问规则。

它允许你的应用程序向外界暴露需要被访问的数据。

是Android的四大组件之一。

ContentProviders支持四种基本的操作,即我们平时所见到的CRUD操作(增删改查)。

Android系统本身已经提供了一些内容提供者,它们允许我们查询联系人,媒体库,和短息消息等。

对于每一个应用程序来说,如果想要访问ContentProvider中共享的数据,就一定要借助ContentResolver类,可以通过Content中的getContentResolver()方法获取到改类的实例。

ContentResolver提供了一系列的方法用于对数据进行CRUD操作。

Android开发中的数据同步和云存储技术(二)

Android开发中的数据同步和云存储技术近年来,随着移动互联网的快速发展,Android系统成为了最受欢迎的移动操作系统之一。

在Android应用程序的开发过程中,数据同步和云存储技术变得越来越重要。

本文将深入探讨Android开发中的数据同步和云存储技术。

一、数据同步的重要性在Android应用程序中,数据同步是使应用程序在不同设备之间保持数据的一致性的重要手段。

通过数据同步,用户可以在不同设备上获得相同的数据,无论是在手机、平板电脑还是电脑上。

这对于用户体验和工作效率都非常重要。

数据同步技术可以让用户在不同设备上修改或更新数据,并确保这些改动在所有设备上都能得到及时更新。

这对于需要多人协作的应用程序尤为重要,比如团队合作软件、笔记应用和日历应用等。

通过数据同步,用户可以随时随地访问和修改自己的数据,极大地方便了用户的使用。

二、实现数据同步的技术1. 后台服务Android开发中,可以使用后台服务来实现数据同步。

后台服务是一种在后台运行的组件,可以在没有用户交互的情况下执行任务。

通过将数据同步的逻辑代码放在后台服务中,可以定时或触发性地执行数据同步操作。

后台服务可以利用系统提供的SyncAdapter框架来实现数据同步。

SyncAdapter可以与系统的账户和同步服务集成,提供高效的数据同步机制。

通过与SyncAdapter框架结合使用,我们可以轻松地实现数据同步功能。

2. Google Cloud MessagingGoogle Cloud Messaging(GCM)是一种用于在Android设备之间传递消息的云服务。

除了实时消息推送外,GCM还可以用于异步数据同步。

通过GCM,我们可以在后台向设备发送同步请求,当设备收到请求时,可以触发数据同步操作。

GCM使用了轻量级的消息传递协议,可以在不消耗大量电量和网络流量的情况下实现数据同步。

通过在应用程序中实现GCM相关的逻辑,我们可以利用GCM来实现高效的数据同步功能。

Android实用教程 第6章 Android数据存储与共享

创建Android Studio工程SharedReg。注册页面输入注册信息,单击“提交”,将注册的用户信息以特 定存储方式保存起来,效果如图6.1和图6.2所示。
SharedPreferences举例
(1)设计页面 用第3章学过的表格布局设计注册页面register.xml,代码。 其中: (a)android:inputType="numberPassword" android:hint="必须全部为数字":文本编辑框输入 内容均显示“.”,初始提示信息为“必须全部为数字”。 (b)<ToggleButton...android:checked="true" />:开关按钮控件属性checked="true"(默认), 显示“男”;属性checked="false",显示“女”。 (c)android:inputType="date":文本显示内容为日期。 (d)<SpinnerSpinner android:id="@+id/mySpinnerDegree"/>:控件选择输入内容,选择项目 “博士、硕士、学士”在findViews()中添加。 (e)android:text="已阅读并接受\n网站服务条款" android:layout_gravity="center|right" androi d:onClick="onCheckBoxClick":提示信息包含“\n”表示换行;上下对中水平右对齐;单击按钮,执行on CheckBoxClick()方法。 (f)style="?android:attr/buttonStyleSmall" android:enabled="false":命令按钮采用buttonStyle Small风格,初始状态不可用。在myCheckBoxAccept控件的单击事件中判断若两次密码相同,使该命令 按钮可用。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android背后的设计思想——功能共享机制 Android的系统设计,与别的智能手机操作系统有很大区别,甚至在以往的任何操作系统里,很难找到像Android这样进行全面地系统级创新的操作系统。从创新层面上来说,Android编程上的思想和支持这种应用程序运行环境的系统,这种理念本身就是一种大胆的创新。

整个Android系统,实际主要目的,就是打造一个功能共享的世界。 功能共享最重要的交互,于是Android创造出一种Intent和IntentFilter配合的低耦合的交互模型,Intent只是一种描述要完成什么工作跨进程的结构体,而最终如何解析这些Intent并完成其响应,是由IntentFilter来进行换算,最终是由用户来决定如何完成。

而在Intent这种超级交互消息之上,Android进一步把应用程序的实现逻辑拆分成多种特殊的实现:

Þ Activity:带显示与交互能力的部分 Þ Service:不带显示与交互能力的部分 Þ Content Provider:在功能交互之外,提供数据交互能力的部分 Þ Broadcast Receiver:用来处理广播交互的部分 这四种功能上的拆分,也体现了Android设计者在设计上抽象思绪能力,即便是随着Android迅猛发展,目前已经到了4.1这么功能丰富、用户体验良好的状态,我们编程也还是与这四种功能组件打交道,可以满足我们任何的编程时所需要的任何行为。

而这四种基本组件组成部分,使Android应用程序反倒成了一个―空壳子‖。静态上看,应用程序只是一种包装这些功能的容器;从运行态来看,所谓的应用程序,也只是承载某些功能的进程。

Android世界里的共享

作为一个智能手机操作系统,其用户可能在功能上有各种各样的功能组合。比如最简单的打电话,则后续动作会有保存联系人,同时需要给联系人拍照做来电大头贴。又比如需要来了个短信通信用户到某个地方干什么事情,这时,用户需要打开地图,搜索一下地址,然后还有可能需要定位到那个位置。

用户在主界面里点击相应功能的应用程序之后,就可能有非常多的功能性的组合,因为用户的想法是不可预估的。我们当然也可以限制用户当前菜单下可以干什么事情,但这样就失去了智能系统的意义。

我们也可以假设用户都会按一个―Home‖键回到主界面,这时原来的执行的程序就会被锁定当前状态,用户重新打开另外一个应用程序,操作完再按―Home‖键可以退回到原来的应用程序。通过这种―应用程序‖到―Home‖到―应用程序‖的循环,我们也可以达到我们想要达到的目的。但这时,出于交互性的考虑,我们也还是需要有限地提供一些交互手段,比如―短信‖应用程序里包含地址信息,一点击可以直接打开―地图‖进行后续操作,但这些有限交互是可以在系统设计阶段被固化。这时,我们是不是就得到了我们想要的能够应付用户任何操作组合的系统?是的,恭喜您,您得到了iPhone的设计思路。但此时的用户交互流程则被改变成这个样子:

这种解决问题的办法也不是不可以,但需要很固化的设计,应用程序的行为比较受限。虽然通过横扫全世界的iPhone证明了这样的设计可能是比较合乎用户体验之道的(不容易出错),但这样的解决思路从系统设计角度来看,并不是很灵活。另外一个麻烦是必须要有苹果级设计功底的―Home‖键,山寨货则用不了多久就会因为键盘失灵而失效。当然即使苹果级设计,iPhone里

的―Home‖键还是会失效,于是又不得不在屏幕上加上触摸的Home手势。

作为开源系统的Android,当然不可能基于iOS的交互思路来解决问题,这种交互时多了一步不停要回到主界面这一步。在Android的设计里,最重要的是能够解决一个应用程序之间进行交互的问题,然后可以实现我们想要在Android系统里完成某种操作时,可以享受从一路顺畅完成的快感。

Android的解决之道,则是将传统意义上的应用程序,细化成一个个完成某项功能的部分,这种功能部分,在Android世界里被称为Activity。Activity都应该被设计成可以独立地被执行以解决某个问题,当它完成或是用户选择退出执行时,又会自动跳回到调用这一Activity的界面,当然这时跳回的位置肯定是另外一个Activity。当然,在一个Android系统里有可能存在无限多的Activity,在他们进行跳转切换时,我们就需要一种很灵活的消息传输机制(因为我们必须兼容系统里所有可能的互相调用的情况)。而且这种传输机制还必须能够跨进程,不然,我们所有的涉及Activity互相调用部分都必须在同一进程里完成。于是,Android系统里又有了Intent,用于解决交互通信。

这样的编程模型也需要有一定前提,那就是我们Application概念必须被弱化,我们不能有main函数入口(如果系统执行依赖main作入口,则不能实现Activity之间互相调用了,所有的Activity执行之前,必须先通过main入口来初始化环境)。出于这样的设计,所以Application

必须只是一个容器,将各种不同的Activity实现包装起来加载到系统里。

当然,将功能拆分成一个个的单一功能界面之后,我们需要有种机制可以将用户一路点击过去历史记录下来,当用户处理完时,可以退回到他们之前操作过的界面,这次就可以由多个应用程序组合出像是在用同一个应用程序的效果。有了Activity,有了Activity之间起到调用作用的Intent,这时所有界面间操作变得有点像是函数调用一样,于是我们可以找函数调用时的基本数据结构—栈来帮忙,发生调用时,需要退出的Activity及其状态压栈,当从调用退出时则进行栈的弹出操作,这时我们的Activity管理就演变成如下图所示的简单栈管理。

有了这样的概念,于是我们响应用户点击操作的问题便迎刃而解,我们在设计应用程序时,不再是设计一个复杂的功能实现,而是实现一组完成单项功能的实现,也就是Activity。然后这些Activity,只会通过用户点击来驱动它们之间是如何进行交互的。比如,我们前面看到的地图、

搜索、定位三个功能,虽然它都会被包装到同一个地图的应用程序里,但在实现上会是地图、搜索、定位三个不同的Activity。

因为现在我们的界面上的互相调用,已经变成了一种函数式的调用,这样,整个手机上的功能都被切分成各个单一的小功能,而真正要在Android系统上完整地实现某复杂个操作,则会提交由用户的点击来组合生成。这样的复杂功能,则已经不是一个编程上的概念了,在Android系统里,这种需要完成什么事情的操作被抽象成一个虚拟的概念Task。比如我们前面提到的打电话加拍大头贴的操作组合,就构成一个Task,这一Task需要由Launcher.apk,Contacts.apk,Gallery.apk来协同完成。

如果我们有两个能够提供同样功能的Activity,这种执行模式的灵活性表现得会更加明显。比如中间打电话的功能,我们系统里有三个Activit(CallScreen, SipPhone, Dialer)都可以完成电话呼叫的功能,这时执行上的路径则会有三种可能性,会在进行跳转时弹出圣对话框由用户来选择:

通过Activity的这种可以动态被用户选择的特点,当用户对某一功能不满意时,完全就有可能通过下载另一个能实现这种功能的应用程序进行替换,甚至可以自己写一个。事实上,Android系统里除了系统状态条与锁屏界面之后,没有任何的不可被替换的功能,这也是Android设备总是会长得千奇百怪的原因之一。

到这时,我们就可以看到Activity之所以会不被称为Window的原因,它也是单个界面或是MVC里的Controller实现部分那么简单,Activity这个名字代表的是某种单一交互功能上的实

现。这种功能的实现将在系统里通过Intent串接起来,构成了一个在功能上具备极大可拓展性的系统。基于这样的特点,Android也就被称作是―无边界‖系统,因为它在功能上延展不再受限于系统的能力,而只受限于智商与创意。

这就是Android世界里的功能共享。 在这种功能共享模型之下,可能还是会有一些微调的需求: 1. 我们有一些情况下不宜使用这种栈式Activity管理,比如我们写一个需要注册的应用程序,注册完开始使用,然后再按退出,我们又会一步步退回到注册填个人信息的界面,而不合理地完全退出。这样可能不合适。这时,我们可以使用Intent的Flag参数, 加上Activity的Affinity属性进行组合控制。

2. 如果不停地跳出对话框让用户选,用户会崩溃掉。当然,用户可以在选择时点选一个―始终‖的默认选择,这时下次就会使用默认的Activity处理某种操作。但还是有可能会不合理地使用跨.apk文件里使用Activity,造成性能上的开销,这时,我们也可以在执行下次Activity执行操作时进行强制性地指定。

当然,我们通过Activity这种概念还需要另外一个前提,这就是Android会有别于传统操作系统的前提,那就是单窗口。想像一下,在多窗口环境下,我们的栈式管理Activity在进行跳转和返回时将会构成多大的灾难啊。好在使用电容屏的设备,单窗口是天生的需求。由于手指触摸的精度非常低,无法点准过小的按钮,比如窗口上的关闭按钮,如果将这些按钮放大,又造成了屏幕显示空间上的浪费。iPhone带来的―后PC时代‖革命,最重要的一点就是使用―返祖‖式的单窗口显示。

这种怪异的操作方式,实际上在我们生活中也有类似的例子,就比如说我们的动态网页。动态网页,特别是HTML5构建的网络应用程序,其操作模式,就是可以在不同的链接里不断地点击下去,如果不是弹出新窗口,我们始终还可以退回到发起这一连串点击的起始页面。Android应用程序,XML构成的UI语言的作用跟Html页面类似,而Java构建的Activity就相当与网页交互中使用的JavaScript,有了这样的相似性,Android编程环境可以说是最接近HTML5的一种编程环境了,但可惜不能像HTML5那样可以跨平台。

我们解析了能完成单一功能的Activty,这时还需要了解Intent,就像是我们了解过了函数实现原理,我们还需要掌握函数之间的参数传递。当然,一般在介绍编程的思路里,会结合起来说明,或是先说明参数传递。但Android环境里有点特殊性,一是Intent是一种能够实现跨进程调用的信息传递机制,二是Intent在消息传递上又很灵活,有一定的动态性。Intent不光服务于Activity之间的调用,还会用于一些不直接与界面打交道的逻辑实现部分,比如我们后面将提到的Service,Broadcast Receiver,以及 Notification。

相关文档
最新文档