原文:https://bafanglvren.ink/archives/82/
首先看到Google官方的一张图
Activity的7个自带方法完成了生命周期的大致过程
onCreate();
onStart();
onResume();
onPause();
onStop();
onRestart();
onDestroy();
其中除了onCreate()会在创建项目时自动重写,其余的方法都需要我们手动重写,对此,在日志中记录下每个方法被调用时的情况。
package com.example.lifecycle;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
String TAG = "myTag";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate: ");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart: ");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume: ");
Log.d(TAG, "Activity running");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause: ");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop: ");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart: ");
}
}
当程序启动时->调用onCreate()方法,使这个Activity初始化数据。
接着调用onStart()方法,使Activity出现在设备屏幕上。
再调用onResume()方法,使Activity可以接受用户的操作,如滑动,单击等。
此时Activity处于一个正常的前台状态,用户可以对其进行操作并得到反馈。
当用户返回主界面,系统调用了onPause()和onStop()方法。此时程序还在后台,所以并不会调用onDestroy();
当重新回到app时,因为之前已经调用过onCreate方法。所以程序直接从onRestart()方法开始走->onStart()->onResume()->活动状态。
当用户按返回键退出程序时,系统调用onDestroy()方法,但是如果用户从任务管理器关闭app却不会调用onDestroy()方法。
旋转屏幕时也会调用onDestroy()方法
手动旋转手机屏幕可以看到:
旋转前:
旋转后:
由此可见,安卓的旋转机制是先把当前的画面(竖屏)关闭再重新加载一遍画面(横屏)。由此在对app适配旋转时要额外注意数据的保存。
测试设备环境:
版本: Android 9.0
系统:PixelExperience