3

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

A,B 与登录功能相关联,仅启动一次即可登录。整个应用程序位于 C Activity 中。当用户使用 C 时,A、B 还活着。一切正常。

现在..

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

A 未启动,B 未启动,C->onCreate(not null) 触发。

我可以通过检查是否存在 A 或 B 的实例来检测这种情况。所以现在我知道这种特殊情况已经发生,我想重新启动应用程序 -> 到活动 A,所以它是一个全新的启动。

问题是在 onCraete(not null) 中重新启动应用程序

在活动 CI 中的 onCreate(not null) 中执行以下操作:

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

然后在活动 B 中也是如此。这有效,C 和 B 完成,A 弹出..但与此同时......

在调用 C onDestroy 之前触发片段 onCreate && onCreateView。因为我在活动 C 中有很多片段,所以这会导致应用程序崩溃。

所以,我的问题是。在这种情况下,有没有办法在活动 C onCreate (非空)(甚至在 C onCreate; 清单之外?)中强制应用程序重新启动,以便不调用片段 onCreate 和 onCreateView?

PS:我已经在清单中尝试了 clearTaskonLaunch ,但是即使我只是暂停/恢复屏幕,这也会强制应用程序重新启动。

任何的意见都将会有帮助

4

1 回答 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
    }
于 2017-05-12T20:31:11.360 回答