Activity各种条件下生命周期小结

Activity生命周期#

应用层管理Activity生命周期的方式#

方法1:

  1. Application中存储一个全局数据集list,子元素是Activity
  2. BaseActivity#onCreate调用Application的#add方法添加Activity
  3. 在退出App时,遍历数据集的所有Activity,调用finsh方法

方法2:

  1. Application中调用registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
  2. 编写ActivityLifecycleCallbacks子类实现,复写接口中生命周期监听方法
  3. 在每个监听方法里,对一个全局数据集list进行增删改查,list中的子元素是Activity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
package com.shaunsheep.activity.lifecycle;

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

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;


public class ManagerActivityApplication extends Application {
private static final String TAG = "ManagerActivityApplication";
/**
* baseActivity存储数据集
*/
private List<Activity> baseActivityList = new LinkedList<Activity>();
private static ManagerActivityApplication instance;

/**
* 维护Activity 的list
*/
private static List<Activity> mActivitys = Collections.synchronizedList(new LinkedList<Activity>());


public ManagerActivityApplication() {
}

public synchronized static ManagerActivityApplication getInstance() {
if (null == instance) {
if (null == instance) {
instance = new ManagerActivityApplication();
}
}
return instance;
}

/**
* 添加Activity到容器中
*/
public void addActivity(Activity activity) {
baseActivityList.add(activity);
}

/**
* 遍历所有Activity并finish
*/
public void exit() {
for (Activity activity : baseActivityList) {
activity.finish();
}
baseActivityList.clear();
}


@Override
public void onCreate() {
super.onCreate();
registerActivityListener();
}


/**
* @param activity 作用说明 :添加一个activity到管理里
*/
public void pushActivity(Activity activity) {
mActivitys.add(activity);
}

/**
* @param activity 作用说明 :删除一个activity在管理里
*/
public void popActivity(Activity activity) {
mActivitys.remove(activity);
}

/**
* get current Activity 获取当前Activity(栈中最后一个压入的)
*/
public static Activity currentActivity() {
if (mActivitys == null || mActivitys.isEmpty()) {
return null;
}
Activity activity = mActivitys.get(mActivitys.size() - 1);
return activity;
}

/**
* 结束当前Activity(栈中最后一个压入的)
*/
public static void finishCurrentActivity() {
if (mActivitys == null || mActivitys.isEmpty()) {
return;
}
Activity activity = mActivitys.get(mActivitys.size() - 1);
finishActivity(activity);
}

/**
* 结束指定的Activity
*/
public static void finishActivity(Activity activity) {
if (mActivitys == null || mActivitys.isEmpty()) {
return;
}
if (activity != null) {
mActivitys.remove(activity);
activity.finish();
activity = null;
}
}

/**
* 结束指定类名的Activity
*/
public static void finishActivity(Class<?> cls) {
if (mActivitys == null || mActivitys.isEmpty()) {
return;
}
for (Activity activity : mActivitys) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}

/**
* 按照指定类名找到activity
*
* @param cls
* @return
*/
public static Activity findActivity(Class<?> cls) {
Activity targetActivity = null;
if (mActivitys != null) {
for (Activity activity : mActivitys) {
if (activity.getClass().equals(cls)) {
targetActivity = activity;
break;
}
}
}
return targetActivity;
}

/**
* @return 作用说明 :获取当前最顶部activity的实例
*/
public Activity getTopActivity() {
Activity mBaseActivity = null;
synchronized (mActivitys) {
final int size = mActivitys.size() - 1;
if (size < 0) {
return null;
}
mBaseActivity = mActivitys.get(size);
}
return mBaseActivity;

}

/**
* @return 作用说明 :获取当前最顶部的acitivity 名字
*/
public String getTopActivityName() {
Activity mBaseActivity = null;
synchronized (mActivitys) {
final int size = mActivitys.size() - 1;
if (size < 0) {
return null;
}
mBaseActivity = mActivitys.get(size);
}
return mBaseActivity.getClass().getName();
}

/**
* 结束所有Activity
*/
public static void finishAllActivity() {
if (mActivitys == null) {
return;
}
for (Activity activity : mActivitys) {
activity.finish();
}
mActivitys.clear();
}

/**
* 退出应用程序
*/
public static void appExit() {
try {
finishAllActivity();
} catch (Exception e) {
}
}

/**
* Application中监听Activity的生命周期
*/
ActivityLifecycleCallbacks activityLifecycleCallbacks = new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
Log.e(TAG, "onActivityCreated: " + activity.getComponentName());
/**
* 监听到 Activity创建事件 将该 Activity 加入list
*/
pushActivity(activity);
}

@Override
public void onActivityStarted(Activity activity) {
Log.e(TAG, "onActivityStarted: " + activity.getComponentName());

}

@Override
public void onActivityResumed(Activity activity) {
Log.e(TAG, "onActivityResumed: " + activity.getComponentName());
}

@Override
public void onActivityPaused(Activity activity) {
Log.e(TAG, "onActivityPaused: " + activity.getComponentName() );
}

@Override
public void onActivityStopped(Activity activity) {
Log.e(TAG, "onActivityStopped: " + activity.getComponentName() );
}

@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
Log.e(TAG, "onActivitySaveInstanceState: " + activity.getComponentName() );
}

@Override
public void onActivityDestroyed(Activity activity) {
Log.e(TAG, "onActivityDestroyed: " + activity.getComponentName() );
if (null == mActivitys || mActivitys.isEmpty()) {
return;
}
if (mActivitys.contains(activity)) {
/**
* 监听到 Activity销毁事件 将该Activity 从list中移除
*/
popActivity(activity);
}
}
};

private void registerActivityListener() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
}
}
}

影响生命周期的因素#

任务栈和返回栈#

任务栈和返回栈的属性对Activity生命周期的影响可以参考我的另一篇文章《ActivityConfig》

启动模式#

启动模式对Activity生命周期的影响可以参考我的另一篇文章《启动模式探索》

灭屏#

实验步骤:

  1. 启动
  2. adb灭屏

观察Android 27 log:

1
2
3
4
5
6
com.shaunsheep.activity D/ScreenOffActivity: onCreate: 
com.shaunsheep.activity D/ScreenOffActivity: onStart:
com.shaunsheep.activity D/ScreenOffActivity: onResume:
com.shaunsheep.activity D/ScreenOffActivity: onPause:
com.shaunsheep.activity D/ScreenOffActivity: onSaveInstanceState:
com.shaunsheep.activity D/ScreenOffActivity: onStop:

发现Activity的生命周期如下:onCreate-onStart-onResume-onPause-onSaveInstanceState-onStop

观察Android30 log:

1
2
3
4
5
6
7
2021-11-17 10:31:45.105 15163-15163/com.shaunsheep.activity E/ScreenOffActivity: onCreate: 
2021-11-17 10:31:45.145 15163-15163/com.shaunsheep.activity E/ScreenOffActivity: onStart:
2021-11-17 10:31:45.148 15163-15163/com.shaunsheep.activity E/ScreenOffActivity: onResume:
2021-11-17 10:31:45.181 15163-15163/com.shaunsheep.activity E/ScreenOffActivity: onLayoutChange:
2021-11-17 10:31:47.816 15163-15163/com.shaunsheep.activity E/ScreenOffActivity: onPause:
2021-11-17 10:31:47.828 15163-15163/com.shaunsheep.activity E/ScreenOffActivity: onStop:
2021-11-17 10:31:47.829 15163-15163/com.shaunsheep.activity E/ScreenOffActivity: onSaveInstanceState:

发现Activity的生命周期如下:onCreate-onStart-onResume-onPause-onStop-onSaveInstanceState

onStop与onSaveInstanceState顺序在不同版本不一致

键盘#

实验步骤:

  1. Activity设置背景图,观察Activity布局的变化
  2. Activity配置一个输入框
  3. 调整android:windowSoftInputMode属性值,观察区别

结论先行:

键盘的弹出不会影响Activity生命周期

观察Android 27log:

1
2
3
4
5
6
7
2021-11-17 09:58:44.492 16853-16853/com.shaunsheep.activity E/KeyBordActivity: onCreate: 
2021-11-17 09:58:44.525 16853-16853/com.shaunsheep.activity E/KeyBordActivity: onStart:
2021-11-17 09:58:44.527 16853-16853/com.shaunsheep.activity E/KeyBordActivity: onResume:
2021-11-17 09:58:44.563 16853-16853/com.shaunsheep.activity E/KeyBordActivity: onLayoutChange:
2021-11-17 09:58:48.188 16853-16853/com.shaunsheep.activity E/KeyBordActivity: onLayoutChange:
2021-11-17 09:58:48.306 16853-16853/com.shaunsheep.activity E/KeyBordActivity: onLayoutChange:

观察Android30log:

1
2
3
4
5
6
2021-11-17 10:32:36.583 15163-15163/com.shaunsheep.activity E/KeyBordActivity: onCreate: 
2021-11-17 10:32:36.637 15163-15163/com.shaunsheep.activity E/KeyBordActivity: onStart:
2021-11-17 10:32:36.639 15163-15163/com.shaunsheep.activity E/KeyBordActivity: onResume:
2021-11-17 10:32:36.676 15163-15163/com.shaunsheep.activity E/KeyBordActivity: onLayoutChange:
2021-11-17 10:32:38.866 15163-15163/com.shaunsheep.activity E/KeyBordActivity: onLayoutChange:
2021-11-17 10:32:38.949 15163-15163/com.shaunsheep.activity E/KeyBordActivity: onLayoutChange:

预备知识:
在manifest文件中可以设置Activity的android:windowSoftInputMode属性,这个属性值常见的设置如下:

1
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"

windowSoftInputMode值的含义列表如下:
【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【C】stateHidden:用户选择activity时,软键盘总是被隐藏
【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【E】stateVisible:软键盘通常是可见的
【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

软键盘事件的配置

1
2
3
4
<activity
android:name=".lifecycle.KeyBordActivity"
android:windowSoftInputMode="adjustResize|stateAlwaysHidden|adjustPan"
/>

软键盘事件的监听

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.shaunsheep.activity.lifecycle;

import androidx.appcompat.app.AppCompatActivity;

import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import com.shaunsheep.activity.BaseActivity;
import com.shaunsheep.activity.R;

public class ScreenOffActivity extends BaseActivity implements View.OnLayoutChangeListener{
private View rootView;
@Override
protected void onCreate(Bundle savedInstanceState) {
TAG = "ScreenOffActivity";
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen_off);
rootView = findViewById(R.id.rl_root_view);
// 开启响应屏幕旋转效果
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
}

@Override
protected void onResume() {
super.onResume();
rootView.addOnLayoutChangeListener(this);
}

@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
Log.e(TAG, "onLayoutChange: " );
}
}

dialog#

android27 log:

1
2
3
4
5
2021-11-17 10:18:32.752 22304-22304/com.shaunsheep.activity E/DialogActivity: onCreate: 
2021-11-17 10:18:32.787 22304-22304/com.shaunsheep.activity E/DialogActivity: onStart:
2021-11-17 10:18:32.791 22304-22304/com.shaunsheep.activity E/DialogActivity: onResume:
2021-11-17 10:18:32.849 22304-22304/com.shaunsheep.activity E/DialogActivity: onLayoutChange:

android30 log:

1
2
3
4
5
2021-11-17 10:33:23.069 15163-15163/com.shaunsheep.activity E/DialogActivity: onCreate: 
2021-11-17 10:33:23.103 15163-15163/com.shaunsheep.activity E/DialogActivity: onStart:
2021-11-17 10:33:23.105 15163-15163/com.shaunsheep.activity E/DialogActivity: onResume:
2021-11-17 10:33:23.135 15163-15163/com.shaunsheep.activity E/DialogActivity: onLayoutChange:

启动新Activity#

android27 log:

1
2
3
4
5
6
7
2021-11-17 10:52:53.977 31132-31132/com.shaunsheep.activity E/StackProcessActivity: onCreate: 
2021-11-17 10:52:54.328 31132-31132/com.shaunsheep.activity E/StackProcessActivity: onStart:
2021-11-17 10:52:54.332 31132-31132/com.shaunsheep.activity E/StackProcessActivity: onResume:
2021-11-17 10:52:57.544 31132-31132/com.shaunsheep.activity E/StackProcessActivity: onPause:
2021-11-17 10:52:58.234 31132-31132/com.shaunsheep.activity E/StackProcessActivity: onSaveInstanceState:
2021-11-17 10:52:58.234 31132-31132/com.shaunsheep.activity E/StackProcessActivity: onStop:

android30 log:

与27的差异在于onStop和onSaveInstanceState顺序不同

moveTaskToBack#

实验步骤:

  1. activity绑定事件
  2. 事件内调用Activity#moveTaskToBack
  3. 观察log

结论先行:

与灭屏的生命周期一致

android27 log:

1
2
3
4
5
6
7
8
2021-11-17 10:16:26.275 21791-21791/com.shaunsheep.activity E/StackProcessActivity: onCreate: 
2021-11-17 10:16:26.356 21791-21791/com.shaunsheep.activity E/StackProcessActivity: onStart:
2021-11-17 10:16:26.367 21791-21791/com.shaunsheep.activity E/StackProcessActivity: onResume:
2021-11-17 10:16:31.358 21791-21791/com.shaunsheep.activity E/StackProcessActivity: moveTaskToBack:
2021-11-17 10:16:31.379 21791-21791/com.shaunsheep.activity E/StackProcessActivity: onPause:
2021-11-17 10:16:32.654 21791-21791/com.shaunsheep.activity E/StackProcessActivity: onSaveInstanceState:
2021-11-17 10:16:32.659 21791-21791/com.shaunsheep.activity E/StackProcessActivity: onStop:

android30 log:

1
2
3
4
5
6
7
8
2021-11-17 10:34:25.846 15163-15163/com.shaunsheep.activity E/StackProcessActivity: onCreate: 
2021-11-17 10:34:25.903 15163-15163/com.shaunsheep.activity E/StackProcessActivity: onStart:
2021-11-17 10:34:25.906 15163-15163/com.shaunsheep.activity E/StackProcessActivity: onResume:
2021-11-17 10:34:33.946 15163-15163/com.shaunsheep.activity E/StackProcessActivity: moveTaskToBack:
2021-11-17 10:34:33.961 15163-15163/com.shaunsheep.activity E/StackProcessActivity: onPause:
2021-11-17 10:34:34.618 15163-15163/com.shaunsheep.activity E/StackProcessActivity: onStop:
2021-11-17 10:34:34.619 15163-15163/com.shaunsheep.activity E/StackProcessActivity: onSaveInstanceState:

onStop与onSaveInstanceState顺序在不同版本不一致

finsh#

实验步骤:

  1. activity绑定事件
  2. 事件内调用Activity#finish
  3. 观察log

android27log:

1
2
3
4
5
6
7
8
2021-11-17 10:18:57.869 22304-22304/com.shaunsheep.activity E/StackProcessActivity: onCreate: 
2021-11-17 10:18:57.939 22304-22304/com.shaunsheep.activity E/StackProcessActivity: onStart:
2021-11-17 10:18:57.942 22304-22304/com.shaunsheep.activity E/StackProcessActivity: onResume:
2021-11-17 10:19:00.805 22304-22304/com.shaunsheep.activity E/StackProcessActivity: finish():
2021-11-17 10:19:00.861 22304-22304/com.shaunsheep.activity E/StackProcessActivity: onPause:
2021-11-17 10:19:01.411 22304-22304/com.shaunsheep.activity E/StackProcessActivity: onStop:
2021-11-17 10:19:01.412 22304-22304/com.shaunsheep.activity E/StackProcessActivity: onDestroy:

android30log:

1
2
3
4
5
6
7
8
2021-11-17 10:36:09.328 15163-15163/com.shaunsheep.activity E/StackProcessActivity: onCreate: 
2021-11-17 10:36:09.346 15163-15163/com.shaunsheep.activity E/StackProcessActivity: onStart:
2021-11-17 10:36:09.347 15163-15163/com.shaunsheep.activity E/StackProcessActivity: onResume:
2021-11-17 10:36:12.900 15163-15163/com.shaunsheep.activity E/StackProcessActivity: finish():
2021-11-17 10:36:12.910 15163-15163/com.shaunsheep.activity E/StackProcessActivity: onPause:
2021-11-17 10:36:13.468 15163-15163/com.shaunsheep.activity E/StackProcessActivity: onStop:
2021-11-17 10:36:13.469 15163-15163/com.shaunsheep.activity E/StackProcessActivity: onDestroy:

进程退出#

预备知识:

进程退出的手段:

  1. 操作Activity
1
2
3
finish();
onBackPressed();

  1. 操作进程
1
2
3
4
System.exit(0);//正常退出
System.exit(1);//非正常退出
android.os.Process.killProcess(android.os.Process.myPid());

实验步骤:

  1. activity绑定事件
  2. 事件内调用操作进程退出的方法
  3. 观察log

结论先行:

只执行onCreate-onStart-onResume,不执行onPause、onStart、onResume

正常退出的log

1
2
3
4
5
6
2021-11-17 10:20:40.130 22773-22773/com.shaunsheep.activity E/StackProcessActivity: onCreate: 
2021-11-17 10:20:40.209 22773-22773/com.shaunsheep.activity E/StackProcessActivity: onStart:
2021-11-17 10:20:40.213 22773-22773/com.shaunsheep.activity E/StackProcessActivity: onResume:
2021-11-17 10:20:41.720 22773-22773/com.shaunsheep.activity E/StackProcessActivity: System.exit(0)
2021-11-17 10:20:41.779 598-762/system_process E/InputDispatcher: channel 'cfba029 com.shaunsheep.activity/com.shaunsheep.activity.lifecycle.StackProcessActivity (server)' ~ Channel is unrecoverably broken and will be disposed!

非正常退出的log

1
2
3
4
5
2021-11-17 10:21:34.676 23282-23282/com.shaunsheep.activity E/StackProcessActivity: onCreate: 
2021-11-17 10:21:34.775 23282-23282/com.shaunsheep.activity E/StackProcessActivity: onStart:
2021-11-17 10:21:34.788 23282-23282/com.shaunsheep.activity E/StackProcessActivity: onResume:
2021-11-17 10:21:36.023 23282-23282/? E/StackProcessActivity: System.exit(1)

killProcess的log

1
2
3
4
5
2021-11-17 10:22:41.862 23744-23744/com.shaunsheep.activity E/StackProcessActivity: onCreate: 
2021-11-17 10:22:42.004 23744-23744/com.shaunsheep.activity E/StackProcessActivity: onStart:
2021-11-17 10:22:42.008 23744-23744/com.shaunsheep.activity E/StackProcessActivity: onResume:
2021-11-17 10:22:48.737 23744-23744/com.shaunsheep.activity E/StackProcessActivity: killProcess:

主线程crash异常#

实验步骤:

  1. activity绑定事件
  2. 事件内调用一段异常代码int a = 3 /0;
  3. 观察log

log:

1
2
3
4
5
6
7
8
9
2021-11-17 10:39:25.327 16634-16634/com.shaunsheep.activity E/StackProcessActivity: onCreate: 
2021-11-17 10:39:25.351 16634-16634/com.shaunsheep.activity E/StackProcessActivity: onStart:
2021-11-17 10:39:25.352 16634-16634/com.shaunsheep.activity E/StackProcessActivity: onResume:
2021-11-17 10:39:26.963 16634-16634/com.shaunsheep.activity E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.shaunsheep.activity, PID: 16634
java.lang.IllegalStateException: Could not execute method for android:onClick
at
Caused by: java.lang.ArithmeticException: divide by zero

home键#

实验步骤:

  1. 按下home键
  2. 观察log

结论先行:

与moveTaskToBack一致,不同android版本,onStop与onSaveInstanceState执行顺序不同

android27log:

1
2
3
4
5
6
7
8
2021-11-17 10:43:29.979 28253-28253/com.shaunsheep.activity E/StackProcessActivity: onCreate: 
2021-11-17 10:43:30.091 28253-28253/com.shaunsheep.activity E/StackProcessActivity: onStart:
2021-11-17 10:43:30.098 28253-28253/com.shaunsheep.activity E/StackProcessActivity: onResume:
2021-11-17 10:43:32.638 28253-28253/com.shaunsheep.activity E/StackProcessActivity: onPause:
2021-11-17 10:43:34.384 28253-28253/com.shaunsheep.activity E/StackProcessActivity: onSaveInstanceState:
2021-11-17 10:43:34.392 28253-28253/com.shaunsheep.activity E/StackProcessActivity: onStop:


android30log:

1
2
3
4
5
6
7
2021-11-17 10:41:40.785 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onCreate: 
2021-11-17 10:41:40.870 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onStart:
2021-11-17 10:41:40.873 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onResume:
2021-11-17 10:41:42.926 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onPause:
2021-11-17 10:41:42.955 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onStop:
2021-11-17 10:41:42.956 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onSaveInstanceState:

横竖屏切换#

实验步骤:

  1. 设备打开横竖屏开关
  2. 启动该页面
  3. 旋转设备
  4. 再旋转设备
  5. 观察log

第一次启动并旋转

onCreate-onStart-onResume-onPause-onStop-onSaveInstanceState-onDestroy-onCreate-onStart-onRestoreInstanceState-onResume

第二次旋转

onPause-onStop-onSaveInstanceState-onDestroy-onCreate-onStart-onRestoreInstanceState-onResume

android30log:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2021-11-17 10:46:43.170 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onCreate: 
2021-11-17 10:46:43.190 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onStart:
2021-11-17 10:46:43.192 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onResume:
2021-11-17 10:46:44.972 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onPause:
2021-11-17 10:46:44.973 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onStop:
2021-11-17 10:46:44.973 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onSaveInstanceState:
2021-11-17 10:46:44.973 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onDestroy:
2021-11-17 10:46:45.002 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onCreate:
2021-11-17 10:46:45.036 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onStart:
2021-11-17 10:46:45.036 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onRestoreInstanceState:
2021-11-17 10:46:45.037 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onResume:
2021-11-17 10:46:47.677 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onPause:
2021-11-17 10:46:47.678 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onStop:
2021-11-17 10:46:47.678 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onSaveInstanceState:
2021-11-17 10:46:47.679 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onDestroy:
2021-11-17 10:46:47.702 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onCreate:
2021-11-17 10:46:47.732 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onStart:
2021-11-17 10:46:47.732 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onRestoreInstanceState:
2021-11-17 10:46:47.733 16747-16747/com.shaunsheep.activity E/StackProcessActivity: onResume:


好文:

Android退出应用程序方法总结 - 简书 (jianshu.com)-退出12式

点击查看
-------------------本文结束 感谢您的阅读-------------------