Немедленно завершить текущую деятельность

Прямо сейчас у меня есть действие с методом PrepareData(), используемое для подготовки всех данных, необходимых для текущего действия, которое вызывается в OnCreate, прежде чем я все настрою. Я вызываю этот метод, и когда нахожу какую-то проблему, я хочу завершить текущую деятельность.

Итак, это фрагмент моего кода:

private void PrepareData()
{
   try
   {
     //some code to prepare data here
   }
   catch(Exception ex)
   {
      Intent _startNewActivity = new Intent(this, ActivityB);
      this.StartActivity(_startNewActivity);
      this.Finish();
   }
}

и OnCreate вот так

protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your application here
        SetContentView(Resource.Layout.ActivityA);

        PrepareData()

        toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
        if (toolbar != null)
        {
            SetSupportActionBar(toolbar);
            SupportActionBar.Title = "Activity A";
            SupportActionBar.SetDisplayHomeAsUpEnabled(true);
        }

    }

Прямо сейчас, когда приложение находит ошибку в PrepareData, вызывается намерение, а также вызывается this.Finish(), но почему-то приложение не завершает действие A немедленно, оно по-прежнему устанавливает панель инструментов, а также вызывает onResume.

Я знаю, что есть жизненный цикл активности, который onStop всегда вызывается после onResume, но я хочу знать, есть ли способ немедленно завершить текущую активность, без вызова следующего кода?


person mas_bejo    schedule 26.11.2019    source источник


Ответы (1)


Действие всегда вызывает первый жизненный цикл, даже если вы вызываете завершение, например. onCreate --> onStart --> onResume. Завершить вызов планируется только после onResume. Если ваша единственная проблема заключается в том, чтобы предотвратить выполнение какого-либо кода в onResume, определите флаг, где вы вызываете this.Finish(), например bool finishCalled = true;, а затем, чтобы запретить панели инструментов устанавливать заголовок, просто оберните код внутри этого логического значения с помощью if !(finishCalled).

Это должно сработать.

person Furkan Yurdakul    schedule 26.11.2019