Introduction

In this article, you will learn about How to Runtime changes in Android.
You have seen that every android device has a functionality to change the orientation of the screen at runtime. So when the device changes its orientation the activity will be restarted by calling all its methods again. On orientation changes first, the activity will be destroyed and again created.
When the Activity is destroyed system calls onPause(), onStop(), and onDestroy() method simultaneously. And now to create activity system calls onCreate(), onStop(), and onResume() simultaneously.
First, let's see how you handle the runtime changes in Android
In this I am using a count down timer to show you, The timer will not be affected when the screen orientation changes. I have already explained that the activity restarted when the device changes its orientation. So to overcome this we write the element Android Manifest.xml file
android:configChanges="orientation|screenSize|keyboardHidden". In java class file we will override the onConfigurationChanged().
onConfiguration change() - This method is called by the system when the device configuration changes while your activity is running
Now when configuration changes the activity will not be restart. So when the device changes its orientation the onConfigurationChanged() method will be called.
Step 1
Create a project like this
Step 2
Create an Xml file and write this
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="#ff998765"
  6. android:orientation="vertical" >
  7. <TextView
  8. android:id="@+id/textView"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:layout_centerHorizontal="true"
  12. android:layout_centerVertical="true"
  13. android:paddingRight="10dip"
  14. android:textSize="50dp" />
  15. <Button
  16. android:id="@+id/button"
  17. android:layout_width="fill_parent"
  18. android:layout_height="wrap_content"
  19. android:layout_alignParentBottom="true"
  20. android:layout_alignParentLeft="true"
  21. android:text="Start" />
  22. </RelativeLayout>
Step 3
In this, I have created a timer inside activity that is started on button click. So when you start the timer in portrait mode the timer start counting. When you change the device orientation the timer will start from that count.
Create a java class file and write this
  1. package com.example.screenorientation;
  2. import android.os.Bundle;
  3. import android.os.CountDownTimer;
  4. import android.app.Activity;
  5. import android.content.res.Configuration;
  6. import android.util.Log;
  7. import android.view.Menu;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.Button;
  11. import android.widget.LinearLayout;
  12. import android.widget.RadioButton;
  13. import android.widget.TextView;
  14. import android.widget.Toast;
  15. public class MainActivity extends Activity
  16. {
  17. private CountDownTimer countDownTimer;
  18. private boolean timerStarted = false;
  19. private Button buttonStart;
  20. public TextView textView;
  21. private final long startTime = 100 * 100;
  22. private final long interval = 1 * 100;
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState)
  25. {
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.activity_main);
  28. Log.d("cycle", "onCreate wiil be invoke");
  29. buttonStart = (Button) this.findViewById(R.id.button);
  30. textView = (TextView) this.findViewById(R.id.textView);
  31. countDownTimer = new CountDownTimerActivity(startTime, interval);
  32. textView.setText(textView.getText() + String.valueOf(startTime / 1000));
  33. buttonStart.setOnClickListener(new OnClickListener()
  34. {
  35. @Override
  36. public void onClick(View arg0)
  37. {
  38. if (!timerStarted)
  39. {
  40. countDownTimer.start();
  41. timerStarted = true;
  42. buttonStart.setText("STOP");
  43. }
  44. else
  45. {
  46. countDownTimer.cancel();
  47. timerStarted = false;
  48. buttonStart.setText("RESTART");
  49. }
  50. }
  51. });
  52. }
  53. public class CountDownTimerActivity extends CountDownTimer
  54. {
  55. public CountDownTimerActivity(long startTime, long interval)
  56. {
  57. super(startTime, interval);
  58. }
  59. @Override
  60. public void onFinish()
  61. {
  62. textView.setText("Time's up!");
  63. }
  64. @Override
  65. public void onTick(long millisUntilFinished)
  66. {
  67. textView.setText("" + millisUntilFinished / 1000);
  68. }
  69. }
  70. @Override
  71. protected void onStart()
  72. {
  73. super.onStart();
  74. Log.d("cycle", "onStart wiil be invoked");
  75. }
  76. @Override
  77. protected void onResume()
  78. {
  79. super.onResume();
  80. Log.d("cycle", "onResume wiil be invoked");
  81. }
  82. @Override
  83. protected void onPause()
  84. {
  85. super.onPause();
  86. Log.d("cycle", "onPause wiil be invoked");
  87. }
  88. @Override
  89. protected void onStop()
  90. {
  91. super.onStop();
  92. Log.d("cycle", "onStop wiil be invoked");
  93. }
  94. @Override
  95. protected void onRestart()
  96. {
  97. super.onRestart();
  98. Log.d("cycle", "onRestart wiil be invoked");
  99. }
  100. @Override
  101. protected void onDestroy()
  102. {
  103. super.onDestroy();
  104. Log.d("cycle", "onDestroy wiil be invoked");
  105. }
  106. @Override
  107. public void onConfigurationChanged(Configuration newConfig)
  108. {
  109. super.onConfigurationChanged(newConfig);
  110. if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {}
  111. }
  112. @Override
  113. public boolean onCreateOptionsMenu(Menu menu)
  114. {
  115. getMenuInflater().inflate(R.menu.main, menu);
  116. return true;
  117. }
  118. }
Step 4
Android Manifest.xml file
In Android Manifest .xml file you will write the configuration element in <activity>
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.example.screenorientation"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <uses-sdk
  7. android:minSdkVersion="8"
  8. android:targetSdkVersion="18"/>
  9. <application
  10. android:allowBackup="true"
  11. android:icon="@drawable/ic_launcher"
  12. android:label="@string/app_name"
  13. android:theme="@style/AppTheme">
  14. <activity
  15. android:name="com.example.screenorientation.MainActivity"
  16. android:configChanges="orientation|screenSize|keyboardHidden"
  17. android:label="@string/app_name">
  18. <intent-filter>
  19. <action android:name="android.intent.action.MAIN" />
  20. <category android:name="android.intent.category.LAUNCHER" />
  21. </intent-filter>
  22. </activity>
  23. </application>
  24. </manifest>
Step 5
After running of activity onCreate(), onStart, onResume() called simultaneuosly
han1
When the Device orientation changes no methods called which means the activity not restarted
han2