【问题标题】:how to prevent Fragments firing onCreate&onCreateView on activity recreation如何防止片段在活动重新创建时触发 onCreate onCreateView
【发布时间】:2013-03-09 16:27:12
【问题描述】:

所以我有活动 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) 中重启应用

在活动 C 中的 onCreate(not null) 中我做了这样的事情:

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

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

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

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

P.S:我已经在 manifest 中尝试了 clearTaskonLaunch,但这会强制应用重启,即使我只是暂停/恢复屏幕。

任何建议都会有所帮助

【问题讨论】:

    标签: android android-fragments android-activity android-lifecycle activity-lifecycle


    【解决方案1】:

    我有一个非常相似的场景。似乎将null 值发送到基类的OnCreate 可以防止重新加载片段。这是我的基本 Activity 类代码的 sn-p(它在 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
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多