2013-10-06 4 views
23

Я только что обнаружил, что когда на устройстве включен экран блокировки, происходит следующее. Для этого действия, андроид: screenOrientation = "landscape" установлен в манифесте. Затем я выполняю следующие действия с моим телефоном в портретном режиме.Жизненный цикл Android и устройство блокировки/разблокировки

  1. Пользователь открывает мероприятие.
  2. onCreated() называется
  3. OnStart() называется
  4. onResume() называется
  5. пользователь блокирует устройство 4.5 OnPause называется()
  6. OnDestroy() называется
  7. OnCreate() называется
  8. OnStart() называется
  9. onResume() называется 8,5 OnPause называется()
  10. Пользователь разблокирует устройству
  11. onResume() называется
  12. OnDestroy() называется
  13. OnCreate() называется
  14. OnStart() называется
  15. onResume() называется.

Хорошо, я не понимаю, почему 6,7,8 выполняются после того, как экран погаснет .. Кроме того, я не понимаю, почему 11, 12, 13, 14 выполнены. Что-то странное происходит, когда я блокирую и разблокирую устройство? Меня внезапно путают с жизненным циклом деятельности. Может ли кто-нибудь прояснить это?

Attache код и журнал MSG

package com.example.wf; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Log.d("log", "oncreate"); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     Log.d("log", "onresume"); 
    }; 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     Log.d("log", "onstart"); 
    }; 

    @Override 
    protected void onPause() { 
     super.onStart(); 
     Log.d("log", "onpause"); 
    }; 

    @Override 
    protected void onDestroy() { 
     Log.d("log", "ondestroy");  
     super.onDestroy(); 
    }; 
} 

Вход сообщ

10-05 23:11:07.994: D/log(23810): oncreate 
10-05 23:11:07.994: D/log(23810): onstart 
10-05 23:11:07.994: D/log(23810): onresume 
// LOCK DEVICE 
10-05 23:11:19.957: D/log(23810): ondestroy 
10-05 23:11:20.007: D/log(23810): oncreate 
10-05 23:11:20.007: D/log(23810): onstart 
10-05 23:11:20.007: D/log(23810): onresume 
// UNLOCK DEVICE 
10-05 23:11:57.407: D/log(23810): onresume 
10-05 23:11:57.537: D/log(23810): ondestroy 
10-05 23:11:57.587: D/log(23810): oncreate 
10-05 23:11:57.587: D/log(23810): onstart 
10-05 23:11:57.587: D/log(23810): onresume 
+0

Борясь с этим с 2 дней, пытаясь различными вариантами – suku

ответ

35

На телефонах (или таблетки с ориентацией запертой портрет), экран блокировки только портрет. Поэтому, когда устройство заблокировано, устройство автоматически переключается в портретный режим (вызывая 6, 7, 8 и 9). Когда устройство разблокировано, то onResume() вызывается как ваш Activity становится видимым, но вы снова переходите между портретом и теперь заблокированы в ландшафте, поэтому активность уничтожается и воссоздается в ландшафте.

+0

приятное объяснение. – Vicky

+0

Отлично объяснено. Активность воссоздается при блокировке/разблокировке, только если она находится в ландшафтном режиме. – AnujDeo

2

Чтобы перейти к сценарию повторного создания активности, вы можете обрабатывать изменения конфигурации на уровне активности файлом манифеста android с помощью андроида: configChanges = "orientation".

+0

Это не сработало для меня – portfoliobuilder

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