2013-11-26 1 views
0

У меня есть этот кодприложений вызывает OnPause(), когда я звоню super.finish()

@Override 
protected void onResume() { 
    super.onResume(); 
    if (Config.SPLASH_ENABLED) 
    { 
     mHandler = new Handler(); 
     mHandler.postDelayed(mRunnable, SPLASH_DISPLAY_LENGTH); 
    } 
    else 
    { 
     doLogin(); 
    } 
} 

Так что, когда я нажимаю кнопку назад он закрыл первое действие, а затем начинается второй, так что я могу начать этот приложение более 1 в одно и то же время. Затем я решил переопределить метод onBackPressed().

@Override 
    public void onBackPressed() { 
     mHandler.removeCallbacks(mRunnable); 
     super.finish(); 
    } 

Это не помогло. После Переопределения onPause() метода как этого

@Override 
    protected void onPause() { 
     mHandler.removeCallbacks(mRunnable); 
     super.onPause(); 
    } 

он работал, но я действительно не могу понять. Почему это работает после переопределения метода onPause()?

ответ

0

Является activity lifecycle.

Когда вы звоните, чтобы завершить внутренний вызов onPause, onStop и onDestroy; проще, чем определять вызовы для каждой комбинации состояний.

+0

Но если я вызову removeCallbacks() для обработчика в onBackPressed(), то почему он начинает вторую активность? –

+0

сколько стоит SPLASH_DISPLAY_LENGTH? возможно, это маленький, а иногда вы можете нажать клавишу до того, как будет выполнено действие потока. – Narkha

+0

Это равно 1500 миллисекундам. Это нормально? –

 Смежные вопросы

  • Нет связанных вопросов^_^