New Intent()用Android启动新实例:launchMode ="singleTop"

znq*_*znq 57 android android-intent android-activity

我的活动Aandroid:launchMode="singleTop"在清单.

如果我去的活动B,CD在那里我有菜单快捷方式回到我的应用程序根系活力(A).

代码如下所示:

Intent myIntent = new Intent(getBaseContext(), MainActivity.class);
startActivity(myIntent);
Run Code Online (Sandbox Code Playgroud)

但是,不是返回到A我已经存在的实例,MainActivity.class而是创建一个新实例 - >它onCreate()转而不是onNewIntent().

这不是预期的行为,对吗?

Vid*_*nes 68

这应该可以解决问题.

<activity ... android:launchMode="singleTop" />
Run Code Online (Sandbox Code Playgroud)

当您创建启动应用程序的意图时:

Intent intent= new Intent(context, YourActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
Run Code Online (Sandbox Code Playgroud)

这是应该需要的.

  • 这对我不起作用.:(下面的代码行工作正常.<activity ... android:launchMode ="singleTop"/> Intent myIntent = new Intent(getBaseContext(),MainActivity.class); myIntent.setFlags(Intent .FLAG_ACTIVITY_CLEAR_TOP); startActivity(myIntent); (2认同)

znq*_*znq 29

最终对我有用的是:

Intent myIntent = new Intent(getBaseContext(), MainActivity.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(myIntent);
Run Code Online (Sandbox Code Playgroud)


Mar*_*k B 14

文档中引用:

"standard"和"singleTop"模式仅在一个方面彼此不同:每次出现"标准"活动的新意图时,都会创建一个新的类实例来响应该意图.每个实例处理一个intent.类似地,也可以创建"singleTop"活动的新实例来处理新意图.但是,如果目标任务已经在其堆栈顶部具有活动的现有实例,则该实例将接收新意图(在onNewIntent()调用中); 未创建新实例.

我不是100%确定"已经有一个现有的活动实例位于其堆栈顶部"意味着,但也许你的活动不符合这个条件.

singleTasksingleInstance为你工作?或者也许您可以尝试设置FLAG_ACTIVITY_SINGLE_TOP您正在创建的意图,看看是否会产生影响,尽管我认为不会.


小智 6

您可以返回相同的现有Activity实例 android:launchMode="singleInstance"

在清单中.当您返回到AB,可能需要finish()摧毁B.