- 浏览: 55241 次
- 性别:
- 来自: 武汉
最新评论
-
Stark_Summer:
很好 顶顶
android 面试题经典 -
fff32165:
LZ好牛啊!膜拜ing
activity与service的交互
什么是Android Application?
简单来说,一个apk文件就是一个Application。
任何一个Android Application基本上是由一些Activities组成,当用户与应用程序交互时其所包含的部分Activities具有紧密的逻辑关系,或者各自独立处理不同的响应。
这些Activities捆绑在一起成为了一个处理特定需求的Application, 并且以“.apk”作为后缀名存在于文件系统中。
Android平台默认下的应用程序 例如:Email、Calendar、Browser、Maps、Text Message、Contacts、Camera和Dialer等都是一个个独立的Apps。
安装 Application的过程也可以简单理解为将其所包裹的Activities导入到当前的系统中,如果系统中已经存在了相同的Activities, 那么将会自动将其关联,而不会重复安装相同的Activities,避免资源的浪费。
Application卸载的过程也会检查当前所关联的 Activities是否有被其它Application标签所关联,如果仅仅是提供当前的Application使用,那么将会彻底被移除,相反则不做 任何操作。
就像我们已经知道的,Application基本上是由四个模块组成:Activity、Service、Content Provider 和 Broadcast Receiver,其中Activity是实现应用的主体。
什么是 Activity Stack?
操作应用程序时,有时需要调用多个Activities来完成需求,例如:发送邮件程序,首先是进入邮件主界面,然后启动一个新的Activity用于填写新邮件内容,同时可以调出联系人列表用于插入收件人信息等等。在这个操作过程中 Android平台有一个专门用于管理Activities堆栈的机制,其可以方便的线性记录Activities实例,当完成某个操作时,可以通过导航功能返回之前的Activity(通过按操作台的“Back”按钮)。
每次启动新的Activity都将被添加到Activity Stack。用户可以方便的返回上一个Activity直到Home Screen,到达Home Screen后,将无法再继续查看堆栈记录(俗话说:到头了)。如果当前Task被中止(Interrupting the task),返回到系统主界面后启动了其它操作,当希望返回到前一个Task继续执行时,只需要再次通过主界面的Application launcher或者快捷方式启动这个Task的Root Activity便可返回其中止时的状态继续执行。
相对于Views、Windows、Menus和Dialogs而言,Activity是唯一可被记录在History stack中的数据,所以当你所设计的应用程序需要用户由A界面进入到次一级界面B,当完成操作后需要再次返回A,那么必须考虑将A看作为 Activity,否则将无法从历史堆栈中返回。
什么是Task
当我们需要一个Activity可以启动另一个Activity,可能另外一个Activity是定义在不同应用程序中的Activity。
例如,假设你想在你的应用中让用户显示一些地方的街景。而这里已经有一个Activity可以做到这一点,因此,你的Activity所需要做的只是在Intent对象中添加必要的信息,并传递给startActivity()。地图浏览将会显示你的地图。当用户按下BACK键,你的Activity会再次出现在屏幕上。
对于用户来说,看起来好像是地图浏览与你的Activity一样,属于相同的应用程序,即便是它定义在其它的应用程序里,并运行在那个应用程序的进程里。
Android通过将这两个Activity保存在同一个Task里来体现这一用户体验。简单来说,一个Task就是用户体验上的一个“应用”。
它将相关的Activity组合在一起,以stack的方式管理(就是前面提到的Activity Stack),这就是Task。
在Android平台上可以将task简单的理解为幽多个Activity共同协作完成某项应用,而不管Activity具体属于哪个Application,
通过下图可以更清晰的理解Application、task、Activity三者之间的关系:
Task 有啥用?
我们用过Android的手机就会知道有下面的场景:
假设我们首先在用IReader在看书,从选书到具体书的阅读界面,这是有好几个Activity。我们每一个点击的Activity都被放在阅读这个Task对应的Activity Stack中了,这可以放我们通过回退键返回每一个前面的Activity。
我们在阅读到一半时,想看看Sina微博,按Home键离开了IReader。
在Sina微博界面也是有多个Activity,我们一步到阅读界面。这时候我们每一个点击的Activity都被放在Sina微博这个Task对应的Activity Stack中了,这可以放我们通过回退键返回每一个前面的Activity。
我们这时候再回到IReader读书界面,原先的状态还是保留的。
显然每一个Task有自己的 Activity Stack。
Task就是这样为了方便人们使用手机而设置的,就像前面提到的场景Task可以跨Application。
下面这个图从另外一个角度描述了Application Task Activities的关系
Task通过Application launcher、Home screen的快捷方式或者 由 “Recent Tasks”(长时间按住Home键)最近使用过的Task记录中启动。
当从一个Activity中启动另外一个Activity时,Back键将作用于返回前一个Activity,与此同时 新开启的Activity将被添加到Activity Stack中。
有关更详细的可以参看这篇文章:
[译]关于Activity和Task的设计思路和方法
http://blogold.chinaunix.net/u2/85193/showart_1966109.html
转载自:http://www.cnblogs.com/ghj1976/archive/2011/04/29/2032412.html
发表评论
-
hydra框架中js与java互调原理
2019-06-10 17:18 0本文档主要阐述hydra框架中js与java是如何实现相互 ... -
自定义gradle插件
2019-09-02 11:25 4021.Gradle插件 Gradle可以认为是一个框 ... -
Rxjava2使用
2019-04-24 17:46 0Rxjava是一个基于观察者模式,通过可观察对象发送数据流 ... -
android NDK cmake
2019-04-19 16:00 0CMake是一个跨平台的安 ... -
504 Unsatisfiable Request 问题解决
2019-04-15 11:09 0问题出现背景及描述:在业务中使用Retrofit2网络工具库进 ... -
adb 命令操作
2019-04-11 16:46 0解决ANR还得需要trace.txt ... -
Android Framework之常用类介绍
2012-05-17 09:10 0WindowManagerService 窗口调度服务 ... -
application私有文件访问
2012-05-16 23:13 0首先内部存储路径为/data/data/youPackageN ... -
BroadcastReceiver的使用
2011-12-15 09:47 836使用广播接收器有两种方法,一种是建立一个BroadcastRe ... -
android:gravity 与 layout_gravity的区别
2011-10-27 16:04 700android:gravity 本view内部信息的排列方式对 ... -
activity与service的交互
2011-07-31 13:16 1575Activity访问service有两种方式,第一种是通过Ib ... -
android用于打开各种文件的intent
2011-07-29 23:33 1034android用于打开各种文件的intent 2011-03 ... -
Android源码学习之六——ActivityManager框架解析
2011-07-06 22:46 954ActivityManager在操作系统中有重要的作用,本文利 ... -
Android的PackageManager和ActivityManager的功能简介
2011-07-05 21:56 957Android系统为应用管理功能提供了大量的API。根据功能的 ... -
Android 对话框(Dialog)大全
2011-06-30 20:38 772Android 对话框(Dialog)大全 建立你自己的对 ... -
android 开发环境搭建
2011-06-19 15:15 7221.jdk安装及环境变量配置 以jdk1.4 ... -
[Android]正确地访问网络资源----Proxy的使用
2011-05-27 15:15 2485天朝有很多独特的东西,今天要涉及到的是CMWAP与CMNET。 ... -
指定浏览器访问指定页面(支持UC、Opera、QQ、Dolphin、Skyfire、Steel、Google)
2011-05-27 14:32 1309/*先看一下系统浏览器com.android.browser ... -
android:webView总结
2011-05-27 10:02 1132在Android手机中内置了一款高性能webkit内核浏览器, ... -
android 发送短信
2011-05-25 17:56 776要使用手机短信服务,在AndroidManifest.xml中 ...
相关推荐
深入理解Android应用框架 在移动应用开发领域,Android操作系统凭借其开放性和灵活性赢得了广大开发者和用户的青睐。Android不仅仅是一个简单的框架,它实际上是一套完整的操作系统,由Google开发并维护,旨在为...
<activity android:name=".activities.SignInActivity"> <action android:name="com.google.android.gms.auth.api.signin.REVERSE_CLIENT_ID" /> <category android:name="android.intent.category.DEFAULT" />...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
Android开发指南中文版是一份面向Android爱好者的经典资料,它涵盖了Android应用开发的主要概念。这份指南由iefreer@hotmail.com于2009年9月10日翻译,主要基于Android SDK 1.5版本的英文开发文档。以下是其中的一些...
Android开发指南中文版是一份针对SDK1.5版本的官方文档的中文翻译,主要涵盖了Android应用开发的核心概念和技术。这篇指南详细介绍了Android应用程序的框架,包括关键类、应用程序组件、Intent机制、Manifest文件、...
2. **基本概念**:学习笔记会解释Android应用的基本结构,如Activities、Services、Broadcast Receivers和Content Providers,以及如何在C#中实现这些概念。 3. **UI设计**:笔记将介绍使用XML布局文件和代码动态...
A Sample Task And Now, the Caveats ■Chapter 16: Handling Activity Life Cycle Events Schroedinger’s Activity Life, Death, and Your Activity onCreate() and onDestroy() onStart(), onRestart(), and ...
《Android开发指南中文版》是针对Android SDK 1.5版本的应用程序框架部分的翻译,旨在为开发者提供全面的Android应用开发基础知识。本指南涵盖了从应用程序基础到组件管理、进程和线程等核心概念。 **应用程序基础 ...
在Android系统中,Activity是以栈的形式管理的,称为任务栈(Task Stack)。当用户通过点击按钮或者系统返回键操作时,Activity会按照后进先出(LIFO)的原则依次销毁,直到整个应用程序的所有Activity都被关闭,...
#### Activity和任务——Activities and Tasks - **Task**:一系列相关的Activity组成的一个任务,用户可以在任务中导航。 - **Affinity**:指定了Activity与哪个Task关联。 - **加载模式**:决定了Activity如何...
2.6 ANR(Application Not Responding)(Stop responding for 20 seconds)——(应用无响应)(停止反应20s) 2.7 ANR starting an Activity(运行一个活动,但是应用无相应) 2.8 ANR recriving a broadcast Intent...
然后,我们可以通过设置应用程序的`android:theme`属性来指定默认的主题,这可以在`AndroidManifest.xml`的`<application>`标签中完成: ```xml <application android:allowBackup="true" android:icon="@mipmap/...
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); } } ``` 此外,为了实现更复杂的换肤效果,如改变自定义控件的图片、颜色等,我们可以...
在Android应用开发中,Activity是用户界面的基本单元,它代表了用户可以看到并与其交互的屏幕。当用户在应用中操作时,系统会创建并管理多个Activity实例,形成一个Activity栈。有时,开发者可能需要实现一个功能,...
- **Activity 和任务 (Activities and Tasks)**: Activity 是 Android 应用程序的一个基本组成部分,它提供了一个窗口来与用户进行交互。任务是由一系列 Activity 组成的历史记录,用户可以通过返回按钮在 Activity ...
intent.setDataAndType(Uri.parse("file://" + apkPath), "application/vnd.android.package-archive"); mContext.startActivity(intent); } ``` 七、打开APK 在 Android 中,我们可以使用PackageManager来打开...
在Android应用开发中,强制下线功能通常用于处理账号安全问题,例如防止用户在多设备同时登录或检测到异常登录时,确保当前设备上的会话失效。本文将深入探讨如何在Android应用程序中实现这一功能,主要涉及Activity...