Android启动模式示例

我发现很难理解在Android中使用各种启动模式的具体情况。 任何人都可以提供一些例子来帮助理解各种模式是否合适?

浏览器和闹钟应用程序之间,涵盖了所有四种启动模式:

  1. BrowserActivity使用singleTask 。 一次只有一个浏览器活动,它不会成为发送意向打开网页的部分任务。 虽然它可能会返回到最近启动的时候,但是当它回击时,它实际上是固定在它自己的任务活动堆栈的底部。 它将通过像书签一样的活动来分享它的任务。

  2. BrowserBookmarksPage使用singleTop 。 虽然可以有多个此活动的实例,但是如果任务的活动堆栈顶部已经有一个实例,它将被重用,并且onNewIntent()将被调用。 这样,如果书签活动多次启动,您只需要返回一次返回到浏览器。

  3. AlarmClock使用标准 。 用户可以启动该活动的多个实例,这些实例可以是活动堆栈中任何任务的一部分。 作为一个相当简单的应用程序,并不需要严格控制其活动。

  4. AlarmAlert使用singleInstance 。 一次只有一个警报活动,它始终是它自己的任务。 它启动的任何东西(如果有的话)都成为其新任务的一部分。

官方文件有点混乱,所以这里有一张桌子可以帮忙。

http://androidisland.blogspot.com/2010/12/activity-launch-modes-simple.html

“启动模式”是将活动的新实例与当前任务相关联的方式。

启动模式可以使用以下两种机制之一来定义:

清单文件:在清单文件中声明活动时,可以指定活动在启动时应如何与任务相关联。 支持的值包括:

standard (默认):这是大多数活动的共同模式。活动类的多个实例可以被实例化,多个实例可以被添加到相同的任务或不同的任务。

singleTop :与标准的不同之处在于,如果活动的一个实例已经存在于当前任务的顶部,并且系统将该意图发送给该活动,则不会创build新的实例,因为它会引发onNewIntent()方法创build一个新的对象。

singleTask :总是会创build一个新的任务,并将一个新的实例作为根压入任务。 但是,如果任何任务中存在任何活动实例,系统将通过onNewIntent()方法调用将意图路由到该活动实例。 在这种模式下,活动实例可以被推送到相同的任务。 此模式对于充当入口点的活动很有用。

singleInstance :与singleTask相同,只是可以将no活动实例推送到singleInstance的同一个任务中。 因此,具有启动模式的活动始终在单个活动实例任务中。 这是一个非常专业化的模式,只能在完全作为一个活动实现的应用程序中使用。

意图标志:调用startActivity()可以在Intent中包含一个标志,该标志声明新活动是否以及如何与当前任务相关联。 支持的值包括:

singleTask :与Manifest文件中的singleTask值相同(请参阅上文)。 singleTop :与Manifest文件中的singleTop值相同(见上文)。 FLAG_ACTIVITY_CLEAR_TOP :如果正在启动的活动已经在当前任务中运行,则不是启动该活动的新实例,而是在其上面的所有其他活动被销毁,并且这个意图被传递给活动的恢复实例现在在上面),通过onNewIntent() 。 Manifest文件中没有产生此行为的对应值。

你可以检查这个链接