如何防止在活动重建时片段触发onCreate和onCreateView方法

3

所以我有A、B、C三个活动。 应用程序流程是A->B->C。

A、B与登录功能相连,只有在登录时启动一次。 整个应用程序位于C活动中。当用户使用C时,A、B仍然存在。一切都运行得很好。

现在...

我杀掉了应用程序的PID。然后从任务管理器中选择它。

A没有启动,B也没有启动,C->onCreate(不为空)触发。

我可以通过检查A或B是否存在来检测这种情况。 既然我意识到发生了这种特定的情况,我想重新启动应用程序->到A活动,这样就可以进行全新的启动。

问题是在onCreate(不为空)中重新启动应用程序。

在C活动的onCreate(不为空)中,我会这样做:

if (A==null or B==null)
finish;
return;

然后在活动B中执行相同的操作。这样做是有效的,C和B都已完成,A弹出。

然而,在此期间...

由于活动C中有许多片段,因此片段的onCreate和onCreateView在调用C onDestroy之前就会启动。这会导致应用程序崩溃。

所以,我的问题是:在活动C onCreate(不为空)中是否有一种方法可以强制应用程序重新启动(甚至在C onCreate之外;在清单中?),以便片段的onCreate和onCreateView不会被调用?

P.S:我尝试在清单中使用clearTaskOnLaunch,但即使我仅暂停/恢复屏幕,它也会强制应用程序重新启动。

任何建议都将很有帮助。

1个回答

0
我有一个非常相似的情况。发送一个null值到基类的OnCreate会防止片段重新加载。这是我的代码片段,用于基本Activity类(它使用C# Xamarin.Android编写,但足够简单易懂):
    protected override void OnCreate(Bundle savedInstanceState)
    {
        if (IsInvalidAppState()) {
            GoToLoginActivity();
            base.OnCreate(null);
        } else {
            base.OnCreate(savedInstanceState);
        }
    }

    private void GoToLoginActivity()
    {
        var intent = new Intent(Application.Context, typeof(LoginActivity));
        intent.SetFlags(ActivityFlags.ClearTop | ActivityFlags.NewTask | ActivityFlags.ClearTask);
        StartActivity(intent);
    }

    private bool IsInvalidAppState()
    {
        // Figure out if everything is initialized correctly
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接