安卓的Activity活动栈
多个安卓Activity中的先后次序问题,需要用活动栈机制
如图:
- 每当新打开一个Activity时,会入栈,此时只有这个Activity是活动状态
- 除了栈顶的Activity其余的都处于暂停或者停止状态
- 如果内存不足,需要杀死Activity时,会释放资源使Activity处于非活动状态
安卓Activity的活动状态
分为四种:
- 活动状态:在活动栈处于栈顶的Activity,能被用户看到且可以交互,简单来说就是屏幕当前的Activity
- 暂停状态:当前Activity被部分遮挡,不再处于活动栈栈顶,并且无法交互。这里的部分遮挡是要被Activity遮挡,弹出框之类的不算被遮挡
- 停止状态:当前Activity被完全遮挡。比如按下HOME键或者跳转到别的页面
- 非活动状态:不是上面三种状态的Activity,例如被销毁的Activity
Activity活动状态切换触发回调方法
如图,转化过程如下:
- 当Activity生成时调用onCreate、onStart、onResume(相当于可以交互了),之后Activity开始运行
- 如果Acttvity处于暂停状态,会调用onPause
- Acitivty重新可以交互时调用onResume
- Activity变成停止状态,调用onPause和onStop
- Activity从停止状态变成活动状态,会调用onRestart和onStart和onResume方法
- 当前Activity从活动状态直接被销毁依次调用onPause、onStop、onDestory
- 当Activity处于暂停状态或者停止状态时,如果内存不足需要杀死Activty,进程终止,再打开需要重新生成
代码:
package net.onest.activitych0402;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private EditText etMsg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("MainActivity","onCreate");
etMsg = findViewById(R.id.et_msg);
if (null != savedInstanceState){
Log.e("onCreate",savedInstanceState.getString("msg"