Task

android中,task的定义是,多个activity协同工作来完成某一项应用的过程。注意,这里的activity并不要求属于同一个application。如下图所示,我们的task所需要的activity可能来自多个application

activity可以看做是独立存在于系统中,并且作为现实具体应用的主体,task将一些activity关联起来以便实现一个更复杂的功能,一个或者多个task又可以组成一个application。这就是三者之间的关系。简单点说,就是一个application包含一个或多个task,而一个task又包含一个或者多个activity

下面说一下activitytask的基本原理:

绝大多数的application都是通过home screen的快捷方式启动的,(另一种启动方式是通过系统的application launcher启动)。启动某个application之后,该application的根activity将会显示在当前窗口,首页activity将会隐藏到后台。

当我们在home页中点击email图标的时候,应用中的list message activity将会显示在当前窗口,而home activity则隐藏到了后台。按back键我们便可以重新返回到home页面。

这里要注意,应用back键和home键退出是有本质上区别的:两者虽然都可以离开当前activity,但是back会销毁当前activity的状态,home则会保存当前activity的状态。

关于back:

将会终止当前的activity,返回到之前的activity(如果当前的activity已经是根activity,那么就直接返回到home screen),在这个过程中,系统会销毁当前activity的状态信息,当我们再次回到这个activity时,展示给我们的将会是一个全新的activity

如图

我们可以看到当我们在list messages这个activity中点击back按钮时,我们的list messages activity将会被销毁掉。

关于home:

我们可以看到,当我们通过home键返回home screen时,list message activity并没有被销毁,而是被调到了后台。这就意味着,当我们再次跳转到该activity时,看到的还是原来的activity

当然,上面说的只是大部分的情况,世界上哪里都存在着特例,android当然也不会例外。

某些ActivityBackground召唤foreground之后依然是相当于重新创建了新实例,其有区别于前边所论述的结果。即便是暂时保存在Background模式下(没有被Destroied),其State数据也将丢失。例如:Contacts Gallery 等。当用户启动了Contact应用程序,并点选某个条目查看详细信息,如果通过Home键返回后,再次重复启动Contact应用程序时,看到的并不是之前所打开的特定条目的详细信息,而是初始的默认界面。这个例子说明不是所有情况下通过Home键返回后都可以保存当前ActivityState信息。

另外一种是与Back键有关的特殊情况。前边提及到大部分的Activity通过Back键返回到Home Activity时,其自身将被彻底销毁,默认情况下Activity响应Back按键的方法被定义了Destroy行为。但对于某些特别情况,开发者可以根据需求将相应Back按键事件的行为重新“override”,撤消默认的Destroy行为。音乐播放器是与其相关的一个典型应用,当用户在播放器的Root Activity中触发Back按键后,转为Background模式下继续播放当前的音乐,同时Home Activity转为Foreground

综上所述,就一句话,对于开发者的我们来说,开发过程中,我们是可以通过某些参数的设置来指定当用户点击back或者home时,到底销毁还是不销毁当前的activity。后边的文章中,我们将会详细的讨论。

Activity的重用:

在多个application中,我们可以都需要用到同一个activity,这时候,就牵扯到了一个有关复用的问题。

举例说明:Contacts(电话簿)应用Gallery(画廊)获取图像资源。

众所周知Contacts是手机中最常用的应用程序,主要用于存储当前用户的联系人信息,其中需要包含联系人的头像信息。在Android平台中的图像信息是由Gallery管理,所以Contacts必然需要复用Gallery Activity来获取相应的图像信息。

针对于Android或者其它平台开发应用程序都需要有良好的复用性意识,这个需要贯穿于项目的整个开发过程。包括如何利用当前系统的现有资源,或者考虑到将来可能会被其它应用程序用于完成特定的需求。当用户正在调用的Intent filter不唯一时(IntentFilter不唯一说明当前activity被多个地方使用了),系统将弹出一个供用户选择的对话框,这的确是一个完美的解决方法。

如图所示,当我们在home screen中点击电话簿时,会进入list contacts activity,然后我们选择查看某个人的电话信息,这时候我们会跳转到view Contact activity,然后我们点击编辑信息,又跳转到了edit Contact activity。当我们在编辑页面中选择添加图片的时候,便会调用Gallery应用中的list pictures activity,将手机中存储的图片展示给用户,用户选定一张图片,然后跳转到crop picture activity对图片的大小进行剪辑……。

Activity可以共享的依据是,具有相同IntentFilteractivity是可以相互替换的。往往系统在遇见多个这种情况时,会给用户弹出一个选择列表,让用户进行选择,用户选择的activity将会被载入当前线程替代原有的默认activity

多个任务同时运行举例:

如图所示:

我们可以看到,在statue1时,用户通过在home screen点击map应用的快捷方式启动了view map activity;然后用户点击home键,跳转到state2,在state2中我们可以看到view map activity被调到了后台,当前窗口显示的是home screen;这时用户在home screen点击mcalendar应用的快捷方式启动了day view activity进入state3;然后我们再次返回home screen,通过点击map应用的图标重新进入view map activity,我们可以看到当前的map和我们刚才通过home键离开时的map一摸一样。这就是一个典型的多个任务同时运行的例子,当我们运行一个应用的时候,另一个应用并没有被destroyed,而是被转移到了后台,等待再次接受调用,显示到当前窗口。

启动application的两种不同方式:

每个App都需要提供至少一个Entry point(入口点)供用户或者系统调用其所关联的ActivitiesApplication launcher中的小图标就是每个单独AppEntry Point。另外App也可以相互间通过Activity作为Entry Point来启动,可以将App所包含的每个Activity看作为潜在的Entry point

例如上图中的打电话应用,我们一种方法可以通过打电话的程序直接拨号;另一种是先去电话簿中找到一个电话号码,然后通过电话簿的activity进行关联,调用拨号程序。

Intent解析

Intent代表意图,这个意图的解释有很多,我这里说一下我个人的理解。

记得上高中的时候,一节课要上好长时间的,时不时的就会口渴,结果非常悲剧的是我没有带水,于是便想问朋友借瓶水喝。可是两个人离得比较远,又是上课时间,我又不能弄成很大的动静,于是我就写了纸条扔给了我朋友,然后我很满足的喝上了水。

在这个例子中,我想喝水是我的一个想法,而我朋友则能给我提供水。但是光有想法和水也不行啊,我得让我朋友知道我想喝水啊。这时候,纸条便起到了一个关键的作用,它记载着我想做的事情,记载着我的意图。所以说,这里记载着我的想法的纸条就是一个意图。

(我们都知道意图在我们平时的理解中代表着想法,是一种虚无缥缈的东西,怎么就和纸条这种实体的东西等价了呢。这里可以这么认为,Intent可以认为是意图的载体。)

Intent对象包含两个元素:

1Action :例如 查看、编辑、拨打电话、查看图像资源等等(纸上写的“我想喝水”)。

2Data:提供给某种行为的具体数据(纸上写的信息来源等信息,比如chenzheng_java)。

更多相关文章

  1. android自动更新程序,安装完以后就什么都没有了,没有出现安装成功
  2. 非android的平台获取apk信息
  3. android:打开系统联系人界面并获取数据
  4. Android(安卓)中的DisplayMetrics类的用法
  5. Android开发之旅:应用程序基础及组件
  6. Android单元测试—UI测试(Espresso)
  7. 从MediaStore获取制定文件夹下的视频信息
  8. 最新的智能移动终端ios,android等市场占有率情况
  9. 了解android应用开发的更多方面有更好的认识

随机推荐

  1. Android(安卓)情景模式提示音默认修改
  2. android实现应用程序无图标(快捷方式)问
  3. Android发短信程序
  4. Android(安卓)获取电池基本信息代码
  5. Android(安卓)捕捉HOME键
  6. Android关于OnTouch 和OnClick同时调用冲
  7. android 上传文件到服务器
  8. Android(安卓)4.0 Graphics and Animatio
  9. Android_build.gradle配置
  10. Android之Bean属性通知类