Android Activity lifecycle and locking/unlocking device
Asked Answered
M

2

34

I just found that when the device has lock screen enabled, the followings happen. For this activity, android:screenOrientation="landscape" is set in the manifest. Then I perform the followings with my phone in a portrait mode.

  1. The user opens an activity.
  2. onCreated() is called
  3. onStart() is called
  4. onResume() is called
  5. The user LOCKS the device 4.5 onPause is called()
  6. onDestroy() is called
  7. onCreate() is called
  8. onStart() is called
  9. onResume() is called 8.5 onPause is called()
  10. The user UNLOCKS the device
  11. onResume() is called
  12. onDestroy() is called
  13. onCreate() is called
  14. onStart() is called
  15. onResume() is called.

Okay, I don't understand why 6,7,8 are executed after the screen goes off.. Also I don't understand why 11, 12, 13, 14 are executed. Do some weird things happen when I lock and unlock the device? I am suddenly confused with the activity lifecycle.. Can anyone clarify this?

Attache the code and the log 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();
    };
}

Log msgs

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
Mayne answered 6/10, 2013 at 3:16 Comment(1)
Struggling with this since 2 days trying various optionsRizas
S
54

On phones (or tablets with the orientation locked portrait), the lock screen is portrait only. Therefore when the device is locked, the device automatically switches to portrait mode (causing 6, 7, 8, and 9). When the device is unlocked, then onResume() is called as your Activity is becoming visible, but you are again transitioning between portrait and now locked in landscape, so the Activity gets destroyed and recreated in landscape.

Stephanus answered 6/10, 2013 at 4:22 Comment(3)
nice explanation.Assess
Perfectly explained. Activity is Recreated on Lock/Unlock only if it is in Landscape Mode.Sorci
Okay, activity is recreated to meet lock screen requirements (portrait only), but why activity is end up running in onResume state?Penneypenni
G
5

To over come of activity re-creation scenario, you can handle configuration changes at activity level by android manifest file using android:configChanges="orientation" attribute.

Glutinous answered 17/2, 2016 at 7:59 Comment(1)
for me when i removed android:configChanges="orientation" it worked perfectly as desiredCurative

© 2022 - 2024 — McMap. All rights reserved.