Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Activity lifecycle and locking/unlocking device

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 
like image 459
user2062024 Avatar asked Oct 06 '13 03:10

user2062024


People also ask

What is Android activity lifecycle?

Android Activity Lifecycle is controlled by 7 methods of android.app.Activity class. The android Activity is the subclass of ContextThemeWrapper class. An activity is the single screen in android.

How to start an activity in lock task mode in Android?

In Android versions before 9.0, an app starts its own activities in lock task mode by calling Activity.startLockTask (). To call this method, the activity must be running in the foreground (see Activity-lifecycle concepts) so we suggest calling in the onResume () method of an Activity or Fragment.

What apps can run when the system is in lock mode?

Only apps that have been allowlisted by a device policy controller (DPC) can run when the system is in lock task mode. Apps are allowlisted because the person using the device can't always leave lock task mode. How you combine the app allowlisted for lock task mode and the allowlisting DPC will depend on the problem you want to solve.

What happens when a device exits lock task mode?

When a device exits lock task mode, the user interface returns to the state mandated by existing device policies. When an app runs in lock task mode, other apps and background services can create new windows that Android displays in front of the app in lock task mode.


2 Answers

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.

like image 85
ianhanniballake Avatar answered Oct 04 '22 10:10

ianhanniballake


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.

like image 33
mohit anand Avatar answered Oct 04 '22 11:10

mohit anand