Activity 及其视图生命周期如何在 android 中重叠
How can Activity and its Views lifecycles overlap in android
android 中有两个生命周期,基本上是 Activity 生命周期和视图生命周期,但是 activity 生命周期的哪个阶段会启动 View 生命周期? 从 View Lifecycle 启动的那一刻起,它是一直贯穿整个生命周期,还是在 Activity 生命周期的各个部分完成? (如果是这样,请说明在哪些部分调用了哪些方法)
每个 android 组件都有自己的生命周期。服务、视图、片段、Activity、...
我建议您首先访问 Android 文档以了解它的基本概念。
视图生命周期不会干扰 activity 生命周期。与其他类型的生命周期一样。视图的生命周期唯一开始的时间是将视图添加到屏幕时。
特此不是 100% 的官方图表,它是我从官方 activity life cycle diagram and view life cycle 混合而来的,因为我在 android 文档中没有看到任何关于视图生命周期的图表(以防万一我们可以称之为生命周期)。
因此,在图中,橙色箭头是根据以下演示应用程序的观察添加的,仅用于演示两个生命周期的关系;我在其中创建了一个虚拟自定义 TextView
并记录了它的超级 class 生命周期方法及其持有的 activity 生命周期方法;并相应地添加橙色箭头。
因此,如图所示,activity 是由其 onCreate()
创建的,就在 activity 的布局被 setContentView()
膨胀之后,系统调用布局视图的构造函数来构造它们。
现在刚刚创建了 activity 并构建了视图的实例;屏幕上仍然看不到任何东西;因此 activity 的 onStart()
和 onResume()
方法分别被调用,因此 activity 现在在屏幕上可见;上面仍然没有画任何东西。
然后,当 activity 的 window 附加到 window 管理器时,调用 activity 的 onAttachedToWindow()
,触发在 activity.
上绘制基础视图的绿灯
此时activity的生命被认为处于running/active状态。
在 activity 的 onAttachedToWindow()
之后,视图的 onAttachedToWindow()
在附加到 activity 的 window 时被调用,现在视图可以开始在屏幕.
在屏幕上绘制视图通过一系列调用来确定尺寸和属性等测量值;诸如宽度、高度、颜色、文本、填充等内容。这需要调用 measure()
几次;随后 onMeasure()
被称为
最终,onDraw()
被调用,它有一个 canvas 参数作为绘制视图的目标表面。
您可以找到图中描述的其余绘图相关方法,您可以在 here 中深入研究它们。
当 activity 被 onDestroy()
销毁时,在 activity 的主要 window 与 window 管理器分离之前,底层视图将首先抓住机会从 activity 的 window 中分离出来;当它就位时,视图的 onDetachedFromWindow()
被调用以声明它已从屏幕上删除,因此 activity 现在可以从 window 管理器中分离出来;发生这种情况时,将相应地调用 activity 的 onDetachedFromWindow()
。
因此,activity 不会与 window 管理器分离,除非所有视图都先与 window 分离。
所以,像 onDestroy()
这样的视图上没有任何东西,视图可以附加或分离 activity 的 window;您可以检查 答案。另外 onDetachedFromWindow()
的视图与其 activity 的 onDestroy()
高度耦合,如果调用 activity 的 onStop()
,视图仍然是附加到 activity 的 window.
因此,不存在我们可以称为视图被销毁的情况,而是视图被分离。
另请注意,activity & 视图的 onAttachedToWindow()
与 activity 的 onCreate()
非常耦合;所以当 activity 的 onRestart()
被调用时,activity 及其视图已经与 window 相关联,所以 onAttachedToWindow()
不会被调用(这是图表上不太清楚)。
同样,onDetachedFromWindow()
的观看次数 & activity 仅与 onDestroy()
相关;所以当 activity 暂停或停止时,onDetachedFromWindow()
不会调用,因此视图仍然附加到 window.
您还可以尝试 parentLayout.removeView(customView);
并观察回调。
下面是用于进行此观察的演示示例
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<com.example.android.androidxtest.CustomTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/long_text"
android:textSize="22sp" />
</LinearLayout>
Activity
public class LifeCycleActivity extends AppCompatActivity {
private static final String TAG = "LOG_TAG_ACTIVITY";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate: ");
setContentView(R.layout.activity_view_lifecycle);
Log.d(TAG, "onCreate: after setContentView()");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause: ");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume: ");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop: ");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart: ");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart: ");
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
Log.d(TAG, "onAttachedToWindow: ");
}
@Override
public boolean isDestroyed() {
Log.d(TAG, "isDestroyed: ");
return super.isDestroyed();
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
Log.d(TAG, "onDetachedFromWindow: ");
}
}
自定义视图
public class CustomTextView extends TextView {
private static final String TAG = "LOG_TAG_VIEW";
public CustomTextView(Context context) {
super(context);
Log.d(TAG, "CustomTextView: Constructor");
}
public CustomTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
Log.d(TAG, "CustomTextView: Constructor");
}
public CustomTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
Log.d(TAG, "CustomTextView: Constructor");
}
public CustomTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
Log.d(TAG, "CustomTextView: Constructor");
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
Log.d(TAG, "onAttachedToWindow: ");
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Log.d(TAG, "onMeasure: ");
}
@Override
public void layout(int l, int t, int r, int b) {
super.layout(l, t, r, b);
Log.d(TAG, "layout: ");
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
Log.d(TAG, "onLayout: ");
}
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
Log.d(TAG, "dispatchDraw: ");
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
Log.d(TAG, "draw: ");
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Log.d(TAG, "onDraw: ");
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
Log.d(TAG, "onDetachedFromWindow: ");
}
}
登录应用启动
2020-02-25 14:09:41.859 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onCreate:
2020-02-25 14:09:41.945 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: CustomTextView: Constructor
2020-02-25 14:09:41.945 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onCreate: after setContentView()
2020-02-25 14:09:41.947 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onStart:
2020-02-25 14:09:41.954 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onResume:
2020-02-25 14:09:41.984 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onAttachedToWindow:
2020-02-25 14:09:41.985 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onAttachedToWindow:
2020-02-25 14:09:41.993 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onMeasure:
2020-02-25 14:09:42.005 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onMeasure:
2020-02-25 14:09:42.006 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onLayout:
2020-02-25 14:09:42.006 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: layout:
2020-02-25 14:09:42.032 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onDraw:
2020-02-25 14:09:42.032 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: dispatchDraw:
2020-02-25 14:09:42.032 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: draw:
登录菜单按钮(应用的历史记录)
2020-02-25 13:44:44.462 32357-32357/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onPause:
2020-02-25 13:44:44.511 32357-32357/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onStop:
从菜单按钮重新登录我们的应用程序(应用程序的历史记录)
2020-02-25 14:11:23.387 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onRestart:
2020-02-25 14:11:23.392 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onStart:
2020-02-25 14:11:23.394 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onResume:
2020-02-25 14:11:23.405 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onMeasure:
2020-02-25 14:11:23.420 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onLayout:
2020-02-25 14:11:23.420 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: layout:
2020-02-25 14:11:23.424 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onDraw:
2020-02-25 14:11:23.424 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: dispatchDraw:
2020-02-25 14:11:23.424 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: draw:
2020-02-25 14:11:23.455 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onMeasure:
2020-02-25 14:11:23.460 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onMeasure:
2020-02-25 14:11:23.460 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onLayout:
2020-02-25 14:11:23.460 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: layout:
2020-02-25 14:11:23.461 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onDraw:
2020-02-25 14:11:23.461 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: dispatchDraw:
2020-02-25 14:11:23.462 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: draw:
登录配置更改(轮换)
2020-02-25 17:05:00.481 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onPause:
2020-02-25 17:05:00.492 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onStop:
2020-02-25 17:05:00.493 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onDestroy:
2020-02-25 17:05:00.512 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: onDetachedFromWindow:
2020-02-25 17:05:00.517 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onDetachedFromWindow:
2020-02-25 17:05:00.563 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onCreate:
2020-02-25 17:05:00.600 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: CustomTextView: Constructor
2020-02-25 17:05:00.601 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onCreate: after setContentView()
2020-02-25 17:05:00.604 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onStart:
2020-02-25 17:05:00.611 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onResume:
2020-02-25 17:05:00.626 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onAttachedToWindow:
2020-02-25 17:05:00.626 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: onAttachedToWindow:
2020-02-25 17:05:00.629 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: onMeasure:
2020-02-25 17:05:00.659 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: onMeasure:
2020-02-25 17:05:00.659 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: onLayout:
2020-02-25 17:05:00.660 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: layout:
2020-02-25 17:05:00.674 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: onDraw:
2020-02-25 17:05:00.674 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: dispatchDraw:
2020-02-25 17:05:00.674 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: draw:
按下后退
2020-02-25 16:10:24.743 7314-7314/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onPause:
2020-02-25 16:10:25.341 7314-7314/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onStop:
2020-02-25 16:10:25.343 7314-7314/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onDestroy:
2020-02-25 16:10:25.343 7314-7314/com.example.android.androidxtest D/LOG_TAG_VIEW: onDetachedFromWindow:
2020-02-25 16:10:25.344 7314-7314/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onDetachedFromWindow:
android 中有两个生命周期,基本上是 Activity 生命周期和视图生命周期,但是 activity 生命周期的哪个阶段会启动 View 生命周期? 从 View Lifecycle 启动的那一刻起,它是一直贯穿整个生命周期,还是在 Activity 生命周期的各个部分完成? (如果是这样,请说明在哪些部分调用了哪些方法)
每个 android 组件都有自己的生命周期。服务、视图、片段、Activity、... 我建议您首先访问 Android 文档以了解它的基本概念。
视图生命周期不会干扰 activity 生命周期。与其他类型的生命周期一样。视图的生命周期唯一开始的时间是将视图添加到屏幕时。
特此不是 100% 的官方图表,它是我从官方 activity life cycle diagram and view life cycle 混合而来的,因为我在 android 文档中没有看到任何关于视图生命周期的图表(以防万一我们可以称之为生命周期)。
因此,在图中,橙色箭头是根据以下演示应用程序的观察添加的,仅用于演示两个生命周期的关系;我在其中创建了一个虚拟自定义 TextView
并记录了它的超级 class 生命周期方法及其持有的 activity 生命周期方法;并相应地添加橙色箭头。
因此,如图所示,activity 是由其 onCreate()
创建的,就在 activity 的布局被 setContentView()
膨胀之后,系统调用布局视图的构造函数来构造它们。
现在刚刚创建了 activity 并构建了视图的实例;屏幕上仍然看不到任何东西;因此 activity 的 onStart()
和 onResume()
方法分别被调用,因此 activity 现在在屏幕上可见;上面仍然没有画任何东西。
然后,当 activity 的 window 附加到 window 管理器时,调用 activity 的 onAttachedToWindow()
,触发在 activity.
此时activity的生命被认为处于running/active状态。
在 activity 的 onAttachedToWindow()
之后,视图的 onAttachedToWindow()
在附加到 activity 的 window 时被调用,现在视图可以开始在屏幕.
在屏幕上绘制视图通过一系列调用来确定尺寸和属性等测量值;诸如宽度、高度、颜色、文本、填充等内容。这需要调用 measure()
几次;随后 onMeasure()
被称为
最终,onDraw()
被调用,它有一个 canvas 参数作为绘制视图的目标表面。
您可以找到图中描述的其余绘图相关方法,您可以在 here 中深入研究它们。
当 activity 被 onDestroy()
销毁时,在 activity 的主要 window 与 window 管理器分离之前,底层视图将首先抓住机会从 activity 的 window 中分离出来;当它就位时,视图的 onDetachedFromWindow()
被调用以声明它已从屏幕上删除,因此 activity 现在可以从 window 管理器中分离出来;发生这种情况时,将相应地调用 activity 的 onDetachedFromWindow()
。
因此,activity 不会与 window 管理器分离,除非所有视图都先与 window 分离。
所以,像 onDestroy()
这样的视图上没有任何东西,视图可以附加或分离 activity 的 window;您可以检查 onDetachedFromWindow()
的视图与其 activity 的 onDestroy()
高度耦合,如果调用 activity 的 onStop()
,视图仍然是附加到 activity 的 window.
因此,不存在我们可以称为视图被销毁的情况,而是视图被分离。
另请注意,activity & 视图的 onAttachedToWindow()
与 activity 的 onCreate()
非常耦合;所以当 activity 的 onRestart()
被调用时,activity 及其视图已经与 window 相关联,所以 onAttachedToWindow()
不会被调用(这是图表上不太清楚)。
同样,onDetachedFromWindow()
的观看次数 & activity 仅与 onDestroy()
相关;所以当 activity 暂停或停止时,onDetachedFromWindow()
不会调用,因此视图仍然附加到 window.
您还可以尝试 parentLayout.removeView(customView);
并观察回调。
下面是用于进行此观察的演示示例
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<com.example.android.androidxtest.CustomTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/long_text"
android:textSize="22sp" />
</LinearLayout>
Activity
public class LifeCycleActivity extends AppCompatActivity {
private static final String TAG = "LOG_TAG_ACTIVITY";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate: ");
setContentView(R.layout.activity_view_lifecycle);
Log.d(TAG, "onCreate: after setContentView()");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause: ");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume: ");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop: ");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart: ");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart: ");
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
Log.d(TAG, "onAttachedToWindow: ");
}
@Override
public boolean isDestroyed() {
Log.d(TAG, "isDestroyed: ");
return super.isDestroyed();
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
Log.d(TAG, "onDetachedFromWindow: ");
}
}
自定义视图
public class CustomTextView extends TextView {
private static final String TAG = "LOG_TAG_VIEW";
public CustomTextView(Context context) {
super(context);
Log.d(TAG, "CustomTextView: Constructor");
}
public CustomTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
Log.d(TAG, "CustomTextView: Constructor");
}
public CustomTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
Log.d(TAG, "CustomTextView: Constructor");
}
public CustomTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
Log.d(TAG, "CustomTextView: Constructor");
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
Log.d(TAG, "onAttachedToWindow: ");
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Log.d(TAG, "onMeasure: ");
}
@Override
public void layout(int l, int t, int r, int b) {
super.layout(l, t, r, b);
Log.d(TAG, "layout: ");
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
Log.d(TAG, "onLayout: ");
}
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
Log.d(TAG, "dispatchDraw: ");
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
Log.d(TAG, "draw: ");
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Log.d(TAG, "onDraw: ");
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
Log.d(TAG, "onDetachedFromWindow: ");
}
}
登录应用启动
2020-02-25 14:09:41.859 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onCreate:
2020-02-25 14:09:41.945 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: CustomTextView: Constructor
2020-02-25 14:09:41.945 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onCreate: after setContentView()
2020-02-25 14:09:41.947 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onStart:
2020-02-25 14:09:41.954 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onResume:
2020-02-25 14:09:41.984 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onAttachedToWindow:
2020-02-25 14:09:41.985 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onAttachedToWindow:
2020-02-25 14:09:41.993 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onMeasure:
2020-02-25 14:09:42.005 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onMeasure:
2020-02-25 14:09:42.006 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onLayout:
2020-02-25 14:09:42.006 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: layout:
2020-02-25 14:09:42.032 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onDraw:
2020-02-25 14:09:42.032 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: dispatchDraw:
2020-02-25 14:09:42.032 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: draw:
登录菜单按钮(应用的历史记录)
2020-02-25 13:44:44.462 32357-32357/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onPause:
2020-02-25 13:44:44.511 32357-32357/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onStop:
从菜单按钮重新登录我们的应用程序(应用程序的历史记录)
2020-02-25 14:11:23.387 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onRestart:
2020-02-25 14:11:23.392 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onStart:
2020-02-25 14:11:23.394 2043-2043/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onResume:
2020-02-25 14:11:23.405 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onMeasure:
2020-02-25 14:11:23.420 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onLayout:
2020-02-25 14:11:23.420 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: layout:
2020-02-25 14:11:23.424 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onDraw:
2020-02-25 14:11:23.424 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: dispatchDraw:
2020-02-25 14:11:23.424 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: draw:
2020-02-25 14:11:23.455 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onMeasure:
2020-02-25 14:11:23.460 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onMeasure:
2020-02-25 14:11:23.460 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onLayout:
2020-02-25 14:11:23.460 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: layout:
2020-02-25 14:11:23.461 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: onDraw:
2020-02-25 14:11:23.461 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: dispatchDraw:
2020-02-25 14:11:23.462 2043-2043/com.example.android.androidxtest D/LOG_TAG_VIEW: draw:
登录配置更改(轮换)
2020-02-25 17:05:00.481 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onPause:
2020-02-25 17:05:00.492 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onStop:
2020-02-25 17:05:00.493 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onDestroy:
2020-02-25 17:05:00.512 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: onDetachedFromWindow:
2020-02-25 17:05:00.517 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onDetachedFromWindow:
2020-02-25 17:05:00.563 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onCreate:
2020-02-25 17:05:00.600 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: CustomTextView: Constructor
2020-02-25 17:05:00.601 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onCreate: after setContentView()
2020-02-25 17:05:00.604 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onStart:
2020-02-25 17:05:00.611 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onResume:
2020-02-25 17:05:00.626 8058-8058/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onAttachedToWindow:
2020-02-25 17:05:00.626 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: onAttachedToWindow:
2020-02-25 17:05:00.629 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: onMeasure:
2020-02-25 17:05:00.659 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: onMeasure:
2020-02-25 17:05:00.659 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: onLayout:
2020-02-25 17:05:00.660 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: layout:
2020-02-25 17:05:00.674 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: onDraw:
2020-02-25 17:05:00.674 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: dispatchDraw:
2020-02-25 17:05:00.674 8058-8058/com.example.android.androidxtest D/LOG_TAG_VIEW: draw:
按下后退
2020-02-25 16:10:24.743 7314-7314/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onPause:
2020-02-25 16:10:25.341 7314-7314/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onStop:
2020-02-25 16:10:25.343 7314-7314/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onDestroy:
2020-02-25 16:10:25.343 7314-7314/com.example.android.androidxtest D/LOG_TAG_VIEW: onDetachedFromWindow:
2020-02-25 16:10:25.344 7314-7314/com.example.android.androidxtest D/LOG_TAG_ACTIVITY: onDetachedFromWindow: