通过关闭上面的所有活动(包括特定活动)再次从堆栈中间重新启动特定 activity
Relaunch specific activity from middle of the stack again by closing all activities above (including specific one)
我有 activity 个堆栈
A>B>C>D>E>F
从 Αctivity
F 我想重新开始 Αctivity
C 并关闭所有 C、D、E、F 活动,因此新的 Αctivity
堆栈将是:
A>B>C
(C作为新鲜activity)
我尝试使用 singleTask
到 Activity
C,但它没有重新启动 Activity
C。它正在恢复 Activity
C
使用startActivityForResult
启动C、D、E、FActivity
public static void start(@NonNull Context context, @NonNull Intent intent) {
context.startActivityForResult(intent, REQUEST_CODE);
}
当你完成FActivity(你要重新启动C的地方Activity)时调用这个方法
public static void finishAct(@NonNull Context context) {
Intent data = new Intent();
data.putExtra("recreateC", true);
context.setResult(RESULT_OK, data);
context.finish();
}
在 E 和 D 活动中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// handle result
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
finishAct(this)
}
}
在 C 中 Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// handle result
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
finishAct(this)
// todo start C Activity again
}
}
最后,我来回答我自己的问题。如果有人面临同样的问题,你可以参考答案。
由于我对我想要实现的目标进行了很多研究,我发现重新启动 Activity C 是不可能的。所以我通过将 launchmode singleTask 添加到 Activity 来解决它C. 从 Activity F 我再次启动 activity C 并执行我想在 onNewIntent() 中执行的任务 activity C.
上的重写方法
我有 activity 个堆栈
A>B>C>D>E>F
从 Αctivity
F 我想重新开始 Αctivity
C 并关闭所有 C、D、E、F 活动,因此新的 Αctivity
堆栈将是:
A>B>C
(C作为新鲜activity)
我尝试使用 singleTask
到 Activity
C,但它没有重新启动 Activity
C。它正在恢复 Activity
C
使用startActivityForResult
启动C、D、E、FActivity
public static void start(@NonNull Context context, @NonNull Intent intent) {
context.startActivityForResult(intent, REQUEST_CODE);
}
当你完成FActivity(你要重新启动C的地方Activity)时调用这个方法
public static void finishAct(@NonNull Context context) {
Intent data = new Intent();
data.putExtra("recreateC", true);
context.setResult(RESULT_OK, data);
context.finish();
}
在 E 和 D 活动中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// handle result
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
finishAct(this)
}
}
在 C 中 Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// handle result
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
finishAct(this)
// todo start C Activity again
}
}
最后,我来回答我自己的问题。如果有人面临同样的问题,你可以参考答案。
由于我对我想要实现的目标进行了很多研究,我发现重新启动 Activity C 是不可能的。所以我通过将 launchmode singleTask 添加到 Activity 来解决它C. 从 Activity F 我再次启动 activity C 并执行我想在 onNewIntent() 中执行的任务 activity C.
上的重写方法