- 浏览: 33270 次
- 性别:
- 来自: 南京
最新评论
-
chunjuan0126:
你说打电话是OutgoingCallBroadcaster.j ...
android打电话实现分析 -
fancyup:
学习了!!!
android打电话实现分析
转自: http://dev.10086.cn/cmdn/wiki/index.php?doc-view-6202.html
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。 这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。 Activity有四种加载模式: 设置的位置在AndroidManifest.xml文件中activity元素的Android:launchMode属性:
区分Activity的加载模式,通过示例一目了然。这里编写了一个Activity A(ActA)和Activity B(ActB)循环跳转的例子。对加载模式修改和代码做稍微改动,就可以说明四种模式的区别。 首先说standard模式,也就是默认模式,不需要配置launchMode。先只写一个名为ActA的Activity: 例子中都没有用layout,免得看着罗嗦。可见是ActA –> ActA的例子。在界面中打印出对象的toString值可以根据hash code识别是否创建新ActA实例。 第一个界面:
点击按钮后:
可以多点几次。发现每次都创建了该Activity的新实例。standard的加载模式就是这样的,intent将发送给新的实例。 现在点Android设备的回退键,可以看到是按照刚才创建Activity实例的倒序依次出现,类似退栈的操作,而刚才操作跳转按钮的过程是压栈的操作。如下图:
singleTop和standard模式,都会将intent发送新的实例(后两种模式不发送到新的实例,如果已经有了的话)。不过,singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例。 还是用刚才的示例,只需将launchMode改为singleTop,就能看到区别。 运行的时候会发现,按多少遍按钮,都是相同的ActiA实例,因为该实例在栈顶,因此不会创建新的实例。如果回退,将退出应用。
singleTop模式,可用来解决栈顶多个重复相同的Activity的问题。 如果是A Activity跳转到B Activity,再跳转到A Activity,行为就和standard一样了,会在B Activity跳转到A Activity的时候创建A Activity的新实例,因为当时的栈顶不是A Activity实例。 ActA类稍作改动:
ActB类:
ActB类使用默认(standard)加载,ActA使用singleTop加载。结果类似下图:
如果把ActA的加载模式改为standard,情况一样。 singleTask模式和后面的singleInstance模式都是只创建一个实例的。 当intent到来,需要创建singleTask模式Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。 把上面singleTop的实例中的ActA的launchMode改为singleTask,ActB的改为standard。那么会发现在ActA界面中按一次按钮: 然后在ActB1界面中按按钮,因为ActA是singleTask,会使用原来的ActA1实例。这时候栈内的情况:
如果多次按按钮跳转,会发现始终只有ActA1这一个ActA类的实例。 解释singleInstance模式比较麻烦。 首先要说一下Task(任务)的概念。 如果是Swing或者Windows程序,可能有多个窗口可以切换,但是你无法在自己程序中复用人家的窗口。注意是直接复用人家的二进制代码,不是你拿到人家api后的源代码级调用。 Android可以做到,让别人的程序直接复用你的Activity(类似桌面程序的窗口)。 Android为提供这种机制,就引入了Task的概念。Task可以认为是一个栈,可放入多个Activity。比如启动一个应用,那么 Android就创建了一个Task,然后启动这个应用的入口Activity,就是intent-filter中配置为main和launch的那个。这个Activity是根(Root)Activity,可能会在它的界面调用其他Activity,这些Activity如果按照上面那三个模式,也会在这个栈(Task)中,只是实例化的策略不同而已。 验证的办法是调用和打印Activity的taskId:
会发现,无论切换Activity,taskId是相同的。 当然也可以在这个单一的Task栈中,放入别人的Activity,比如google地图,这样用户看过地图按回退键的时候,会退栈回到调用地图的Activity。对用户来说,并不觉得在操作多个应用。这就是Task的作用。 但是,有这样的需求,多个Task共享一个Activity(singleTask是在一个task中共享一个Activity)。 现成的例子是google地图。比如我有一个应用是导游方面的,其中调用的google地图Activity。那么现在我比如按home键,然后到应用列表中打开google地图,你会发现显示的就是刚才的地图,实际上是同一个Activity。 如果使用上面三种模式,是无法实现这个需求的。google地图应用中有多个上下文Activity,比如路线查询等的,导游应用也有一些上下文Activity。在各自应用中回退要回退到各自的上下文Activity中。 singleInstance模式解决了这个问题(绕了这么半天才说到正题)。让这个模式下的Activity单独在一个task栈中。这个栈只有一个Activity。导游应用和google地图应用发送的intent都由这个Activity接收和展示。 这里又有两个问题: 如果还是拿刚才的ActA和ActB的示例,可以把ActB的模式改为singleInstance,ActA为standard,如果按一次按钮切换到ActB,看到现象用示意图类似这样: 如果是第一次按钮切换到ActB,在ActB在按按钮切换到ActA,然后再回退,示意图是:
另外,可以看到两个Activity的taskId是不同的。加载模式分类及在哪里配置
standard
singleTop
singleTask
singleInstance
发表评论
-
获取Android SDK 源代码并在Eclipse中关联查看的方法--转
2012-04-16 08:57 1223在Google搜索“Android Eclipse 源代码”得 ... -
android 禁用屏蔽系统状态栏(statusbar) 转
2012-03-29 11:03 4511Object service = getSystemServi ... -
如何使Android应用程序获取系统权限(转)
2012-03-29 11:03 1273在 android 的API中有提供 ... -
LockScreen
2012-03-22 11:28 14001. 创建Service,注册Broadcast ... -
配置android jni开发环境
2012-03-22 11:27 1971以下是配置android jni开发环境的步骤。供参考。相关软 ... -
Android.mk写法
2012-03-22 11:26 918android编译系统的makefile文件Android.m ... -
windows 下 Android NDK开发配置(window + cygwin + NDK )转
2012-03-18 13:01 1268时间: 2011年6月11日 00:01 (星期六) ... -
Android中JNI编程的那些事儿
2011-10-12 17:19 852Android系统不允许一个纯粹使用C/C++的程序出现,它要 ... -
MMI Code Messages on Android
2011-08-30 11:12 1142MMI Code Messages on Android ... -
Android widget 之RemoteView
2011-08-25 17:23 9931.RemoteView概述 到目前为止,我发现Remote ... -
startManagingCursor
2011-08-25 16:10 1625总结一下Activity.startManagingCur ... -
[Android 数据库]一种典型的Content Provider 代码架构
2011-08-24 16:13 1922我们平时在做android开发的时候,一定经常会接触到数据库操 ... -
Android上dip、dp、px、sp等单位说明
2011-08-24 16:11 630[ dip: device independent pixel ... -
MMS 源码目录结构
2011-08-17 15:55 757转自:http://gnibre.iteye.co ... -
Intents和Intent Filters(理论部分)
2011-08-17 15:51 752<转>http://www.cnblogs.com ... -
android打电话实现分析
2011-08-17 15:48 66481 OutgoingCallBroadcaster.java ... -
Android UI 界面绘制原理分析
2011-08-17 14:43 2797View类包含Surface(变量 ...
相关推荐
首先,我们需要理解Activity的四种LaunchMode: 1. **standard**(默认模式):每个启动请求都会创建一个新的Activity实例。如果栈中已有该Activity,也会创建新的实例并压入栈顶。 2. **singleTop**:如果新启动...
2. **四种LaunchMode** - **standard**(默认模式):每次启动Activity都会创建一个新的实例,无论是否已有相同实例存在于栈中。 - **singleTop**:如果启动的Activity位于栈顶,那么不会创建新实例,而是重用栈顶...
以下是四种launchMode的详细解释: 1. **standard(标准模式)** 这是Activity的默认启动模式。每次启动Activity时,系统都会创建一个新的实例,无论当前栈中是否存在该Activity的实例。如果启动Activity时栈中已...
Android提供了四种LaunchMode:standard、singleTop、singleTask和singleInstance,它们分别对应不同的启动策略。 2. standard(默认模式) 在standard模式下,每次启动Activity都会创建一个新的实例,无论当前栈中...
Activity的启动模式主要分为四种: 1. standard(标准模式):每次启动都会创建一个新的Activity实例,不论栈中是否存在该Activity。 2. singleTop(栈顶复用模式):如果新启动的Activity已经在栈顶,那么就不再...
现在让我们深入理解每种launchMode的工作原理。 1. standard(标准模式) 这是Activity的默认启动模式。每当通过Intent启动一个Activity,系统都会创建一个新的实例,无论这个Activity是否已经在任务栈中存在。这...
`launchMode`有四种主要模式:`standard`、`singleTop`、`singleTask`和`singleInstance`。 1. **standard(默认模式)** 这是最常见的`launchMode`,每次启动`Activity`时都会创建一个新的实例。如果当前任务栈中...
`Activity`的`LaunchMode`有四种基本模式: 1. **standard(默认模式)**:每次启动`Activity`都会创建一个新的实例。如果栈中已有该`Activity`的实例,那么新的实例会被压入栈顶。这种模式下,多个`Activity`实例...
我们今天要讲的是Activity的四种launchMode。 launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里...
Android Activity 的四种启动模式 管理Activity的生命周期 Android入门:Activity四种启动模式 Android Intent Android中Intent传递对象的两种方法(Serializable,Parcelable) 评论 29,85,96 序列化: ...
首先,我们来详细解析四种主要的`launchMode`: 1. **standard(默认模式)** - 在这种模式下,每次启动`Activity`时都会创建一个新的实例。如果栈中已有该`Activity`的实例,系统会创建新的实例并将其压入任务栈...
本篇将深入探讨Android `launchMode`的四种模式:标准模式(standard)、单实例模式(singleInstance)、单任务模式(singleTask)以及单栈顶模式(singleTop),并结合代码实例进行讲解。 1. **标准模式(standard...
本篇主要介绍Android中的四种启动模式:standard、singleTop、singleTask和singleInstance,并通过具体示例进行解析。 1. **standard模式**:这是Activity的默认启动模式。在这种模式下,每当有新的Intent启动...
它有四种模式:标准模式(standard)、单实例模式(singleInstance)、单任务模式(singleTask)和单栈顶模式(singleTop)。标准模式是最常见的,每个启动请求都会创建一个新的Activity实例。单实例模式下,只有一...
在Android应用开发中,`LaunchMode`是一个至关重要的概念,它决定了Activity如何启动以及与任务栈(Task Stack)之间的交互。本篇文章将深入探讨`LaunchMode`的不同模式及其实际应用场景,通过实例`LaunchModeDemo`...
### Android Activity 的四种启动模式与 Intent.setFlags()详解 #### 一、Android Activity 四种启动模式 在 Android 应用开发中,Activity 是构成应用的基本单元之一,它负责显示用户界面并处理用户交互。为了更...
android-sample-launchking 了解Activity的四种launchMode。 标准,singleTop,singleTask和singleInstance。 通过玩应用程序直接学习并体验launchMode的差异有关原始文档,请参阅A代表标准B代表singleTop C代表...