web-dev-qa-db-ja.com

Androidアクティビティのライフサイクルとデバイスのロック/ロック解除

デバイスでロック画面が有効になっていると、次のことが発生することがわかりました。このアクティビティでは、Android:screenOrientation = "landscape"がマニフェストに設定されています。次に、ポートレートモードで携帯電話を使用して以下を実行します。

  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が実行される理由もわかりません。デバイスをロックおよびロック解除すると、奇妙なことが起こりますか?突然、アクティビティのライフサイクルと混同されます。これを明確にできる人はいますか?

コードとログメッセージを添付する

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
30
user2062024

携帯電話(または向きがロックされた縦向きのタブレット)では、ロック画面は縦向きのみです。したがって、デバイスがロックされると、デバイスは自動的にポートレートモードに切り替わります(6、7、8、9の原因になります)。デバイスがロック解除されると、Activityが表示されるようになるとonResume()が呼び出されますが、再び縦向きから横向きにロックされるため、アクティビティは破棄され、横向きに再作成されます。

43
ianhanniballake

アクティビティの再作成シナリオを実現するには、Android:configChanges = "orientation"属性を使用して、Androidマニフェストファイルによってアクティビティレベルで構成の変更を処理できます。

2
mohit anand