Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 设置启动模式=";“单一任务”;vs设置活动启动模式=";单顶;_Android_Android Activity_Android Manifest_Android Navigation - Fatal编程技术网

Android 设置启动模式=";“单一任务”;vs设置活动启动模式=";单顶;

Android 设置启动模式=";“单一任务”;vs设置活动启动模式=";单顶;,android,android-activity,android-manifest,android-navigation,Android,Android Activity,Android Manifest,Android Navigation,我有一个非常有层次性的应用程序(活动类似于联盟>团队>位置>球员),因此我将每个活动singleTop,以保持导航的合理性并防止重复实例 现在我正在制作第二个应用程序,我看到有人建议将我的应用程序声明为singleTask,以防止重复实例。有人能解释一下每种方法的优点吗 我的新应用程序只是一个包含3个片段的活动,然后我可能会添加一个设置活动和一个常见问题解答 编辑:我刚刚意识到,singleTask并没有像我想的那样阻止我的应用程序的重复实例。现在正在寻找处理此问题的正确方法…我认为您对sing

我有一个非常有层次性的应用程序(活动类似于联盟>团队>位置>球员),因此我将每个活动
singleTop
,以保持导航的合理性并防止重复实例

现在我正在制作第二个应用程序,我看到有人建议将我的应用程序声明为
singleTask
,以防止重复实例。有人能解释一下每种方法的优点吗

我的新应用程序只是一个包含3个片段的活动,然后我可能会添加一个设置活动和一个常见问题解答


编辑:我刚刚意识到,
singleTask
并没有像我想的那样阻止我的应用程序的重复实例。现在正在寻找处理此问题的正确方法…

我认为您对singleTop和singleTask的定义有点不正确。SingleTop可能会生成一个重复的实例。让我们用你的例子,联盟>球队>位置>球员。如果玩家屏幕中有一个按钮将带您进入联盟屏幕,它将变成联盟>球队>位置>玩家>联盟

而singleTask保证活动只能存在一个实例。

我在这里找到了答案:

“单顶”:

与“标准”的区别在于,如果活动实例已存在于当前任务的顶部,并且系统将意向路由到此活动,则不会创建新实例,因为它将触发onNewIntent()方法,而不是创建新对象。让我们以Twitter oauth集成为例

“单一任务”:


将始终创建一个新任务,并将一个新实例作为根实例推送到该任务。但是,如果任何任务中存在任何活动实例,系统将通过onNewIntent()方法调用将意图路由到该活动实例。在此模式下,可以将活动实例推送到同一任务。如果用户单击singleTask活动中的BACK键,系统会将用户返回到上一个活动。

Android活动启动模式

4种模式

  • “标准”
  • “单顶”
  • “单一任务”
  • “单实例”
  • 默认模式为“标准模式”

    模式分为两组标准单实例在一边,而单任务单实例在另一边

    standard和singleTop之间的主要区别在于standard,每当标准活动有了新的意图时,就会创建一个新的实例。如果singleTop也是这样,则会创建一个新实例,但该活动的一个实例已经位于堆栈顶部,它不会创建新实例

    事实上,当我们从服务器下载应用程序并启动它并从那里打开它时,问题就来了。启动应用程序后,按home(主页)按钮。然后单击所有程序并从主屏幕选择应用程序图标。然后,在standard中会创建另一个活动,但在singleTop中不会创建新实例

    单任务”和“单实例”模式也仅在一个方面不同:

    单个任务”“活动允许其他活动成为其任务的一部分。它位于活动堆栈的根,但其他活动(必须是“标准”和“单顶”活动)可以启动到同一任务中

    另一方面,“singleInstance”活动不允许其他活动成为其任务的一部分。这是任务中唯一的活动。如果它启动了另一个活动,则该活动将被分配给另一个任务-就好像FLAG_activity_NEW_task在意图中一样

    来自:

    标准(默认值):-可以创建活动类的多个实例 可以将实例化实例和多个实例添加到同一任务或 不同的任务。这是大多数活动的通用模式

    单顶:-与标准的区别是,如果 活动已存在于当前任务和系统的顶部 将意图路由到此活动,不会创建新实例 因为它将触发onNewIntent()方法,而不是创建 新对象

    singleTask:-将始终创建一个新任务,并将创建一个新实例 作为根目录被推送到任务。但是,如果有任何活动实例 存在于任何任务中,系统将意图路由到该活动 通过onNewIntent()方法调用。在此模式下,活动 实例可以推送到同一个任务。此模式适用于以下情况: 作为入口点的活动

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


    我怀疑我没有完全理解他们的定义。谢谢你的澄清。我的主要目标是处理当我的用户进入联赛>球队>位置,然后最小化并重新进入应用程序,这是加载联赛而不是位置。通过声明SingleTop,我的应用程序现在总是在我停止的地方加载。不知道为什么singleTask不这样做。@NSouth您有没有发现singleTask不这样做的原因?谢谢您提供了这个简单而准确的答案。