kol*_*vra 56 android android-intent
从Android文档:
FLAG_ACTIVITY_CLEAR_TASK
如果在传递给Context.startActivity()的Intent中设置,则此标志将导致在活动开始之前清除与活动关联的任何现有任务.也就是说,活动成为否则为空任务的新根,并且任何旧活动都已完成.这只能与FLAG_ACTIVITY_NEW_TASK一起使用.
和
FLAG_ACTIVITY_TASK_ON_HOME
如果在传递给Context.startActivity()的Intent中设置,则此标志将使新启动的任务置于当前主活动任务(如果有)之上.也就是说,从任务中退回将始终将用户返回到主页,即使这不是他们看到的最后一个活动.这只能与FLAG_ACTIVITY_NEW_TASK一起使用.
考虑这两个片段:
Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
和
Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
我理解的方式,在任何代码片段,我们创造它只有在活动是一项新的任务,而当你按下回你到主屏幕.假设我可能弄错了,两者之间有什么区别?另外,如果我有另一个片段,Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME | Intent.FLAG_ACTIVITY_CLEAR_TASK
它会如何表现?
Dav*_*ser 117
两个片段之间存在差异.以下是一些重要的背景信息:
任务包含一堆活动.任务可以在前台或后台.
任务也是"堆叠"的.如果您处于任务中A
并且启动了新任务B
,则任务B
将叠加在任务之上A
.如果用户在任务中按下BACK键足够多次B
,他最终将返回任务"A".这是标准的Android行为.
你的片段......
Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
......将做以下事情中的一件,具体取决于......
Activity
具有与当前任务相同的任务关联(即:执行此代码的任务),它将清除当前任务(完成任务中的所有活动)并启动Activity
当前任务的新实例.如果用户按下BACK键,这将完成Activity
并完成当前任务(因为任务中只有1个活动)并将用户返回到HOME屏幕或启动此任务的任务(下面的任务)任务堆栈中的此任务).Activity
具有与当前任务不同的任务关联,并且已存在具有该任务关联的现有任务(即:Activity
将属于的现有任务),则将该现有任务带到前台,清除(所有活动在任务完成),Activity
在任务的根目录创建一个新实例,并将此任务置于当前任务之上(这样一旦Activity
完成,用户将被退回到当前任务中).Activity
具有与当前任务不同的任务关联,并且没有具有该任务关联的现有任务,则创建新Activity
任务并在任务的根处创建新实例,并将此任务置于当前任务之上任务(这样一旦Activity
完成,用户将被放回当前任务).这段代码片段......
Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
......将根据以下事项做以下事情之一......
Activity
具有与当前任务相同的任务关联(即:执行此代码的任务)并且Activity
是当前任务的根活动,则这将不执行任何操作.它不会启动新任务,它不会清除任何活动,也不会创建新的实例Activity
,也不会改变当前任务完成时发生的行为(即:如果当前任务是由当前任务启动的话)另一项任务是,当前任务中的所有活动都完成后,它会将用户放回任务堆栈中的上一个任务中.Activity
有相同的任务亲和力当前的任务(即:从该代码执行的任务),并Activity
是不是当前任务的根系活力,这将只需创建一个新的实例Activity
,并把它放在当前活动的顶部在当前的任务中.它不会启动新任务,也不会清除任何活动,也不会改变当前任务完成时发生的行为(即:当前任务是由另一个任务启动的,当前任务是当前任务任务完成后,它会将用户放回任务堆栈中的上一个任务中).Activity
具有与当前任务不同的任务关联,并且已存在具有该任务关联的现有任务(即:Activity
将属于的现有任务)并且Activity
是该现有任务的根活动,则该现有任务将被带到前台和该任务与任务堆栈分离(即:当该任务中的所有活动完成时,它将使用户返回到HOME屏幕而不是启动该任务的任务).Activity
有比当前任务不同的任务亲和力,且已经存在与该任务亲和力(即:现有的任务,现有的任务Activity
将属于),并Activity
是不是现有任务的根系活力,那么,现有的任务带来了到前台并且该任务与任务堆栈分离(即:当该任务中的所有活动都完成时,它将使用户返回到HOME屏幕而不是启动该任务的任务)并Activity
创建一个新实例并放在该任务的任何现有活动之上.Activity
具有与当前任务不同的任务关联,并且没有具有该任务关联的现有任务,则创建新Activity
任务并在任务的根处创建新实例,并且新任务与任务堆栈分离(这样一旦Activity
完成,用户将返回到HOME屏幕,而不是返回到启动它的任务).最后,这个片段......
Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
......将做以下事情中的一件,具体取决于......
Activity
具有与当前任务相同的任务关联(即:执行此代码的任务),它将清除当前任务(完成任务中的所有活动)并启动Activity
当前任务的新实例.如果用户按下BACK键,这将完成Activity
并完成当前任务(因为任务中只有1个活动)并将用户返回到HOME屏幕.Activity
具有与当前任务不同的任务关联,并且已存在具有该任务关联的现有任务(即:Activity
将属于的现有任务),则将该现有任务带到前台,清除(所有活动在任务完成),Activity
在任务的根目录下创建一个新实例,并将此任务与任务堆栈分离(这样,当Activity
完成时,用户将返回到HOME屏幕).Activity
具有与当前任务不同的任务关联,并且没有具有该任务关联的现有任务,则创建新Activity
任务并在任务的根处创建新实例,并且此任务与任务堆栈分离(这样当Activity
完成时,用户返回到HOME屏幕).我意识到这个答案是漫长而复杂的,但是有很多不同的情况.我可能甚至没有涵盖所有可能的情况(例如,如果Activity
有特殊的启动模式)......
归档时间: |
|
查看次数: |
38195 次 |
最近记录: |