回来栈
Android是运用任务(Task)来办理活动的,一个任务便是一组存放在栈里的活动的集合,这个栈也被称作回来栈(Back Stack )。体系总是会显现处于栈顶的活动给用户
活动状况
- 运转状况当一个活动坐落回来栈的栈顶时,这时活动就处于运转状况。体系最不乐意收回的便是处于 运转状况的活动,由于这会带来非常差的用户体会。
- 暂停状况当一个活动不再处于栈顶方位,但依然可见时,这时活动就进入了暂停状况。不在栈顶了,还怎么会可见呢?这是由于并不是每一个活动都会占满整个屏幕的,比方对话框方式的活动只会占用屏幕中心的部分区域,你很快就会在后面看到这种活动。处于暂停状况的活动依然是彻底存活着的,体系也不乐意去收回这种活动(由于它还是可见的,收回可见的东西都会在用户体会方面有不好的影响),只要在内存极低的情况下,体系才会去考虑收回这种活动。
- 中止状况当一个活动不再处于栈顶方位,而且彻底不行见的时分,就进入了中止状况。体系依然会为这种活动保存相应的状况和成员变量,可是这并不是彻底可靠的,当其他地方需要内存时,处于中止状况的活动有或许会被体系收回
- 毁掉状况当一个活动从回来栈中移除后就变成了毁掉状况。体系会最倾向于收回处于这种状况的活动,从而确保手机的内存足够。
生存期
- onCreate()这个办法你现已看到过很屡次了,每个活动中我们都重写了这个办法,它会在活动第一次被创建的时分调用。你应该在这个办法中完结活动的初始化操作,比方说加载布局、绑定事情等。
- onStart()这个办法在活动由不行见变为可见的时分调用
- onResume()这个办法在活动预备好和用户进行交互的时分调用。此刻的活动必定坐落回来栈的栈顶,而且处于运转状况
- onPause()这个办法在体系预备去发动或许恢复另一个活动的时分调用。我们一般会在这个办法中将一些耗费CPU的资源释放掉,以及保存一些要害数据,但这个办法的履行速度必定要快,否则会影响到新的栈顶活动的运用
- onStop()这个办法在活动彻底不行见的时分调用。它和onPause()办法的首要区别在于,假如发动的新活动是一个对话框式的活动,那么onPause()办法会得到履行,而onStop()办法并不会履行
- onDestroy()这个办法在活动被毁掉之前调用,之后活动的状况将变为毁掉状况
- onRestart()这个办法在活动由中止状况变为运转状况之前调用,也便是活动被重新发动了
MainActivity.java类
package com.example.lifecycletest;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
setContentView(R.layout.activity_main);
@SuppressLint({"MissingInflatedId", "LocalSuppress"}) Button startNormalAct = (Button) findViewById(R.id.start_normal_activity);
@SuppressLint({"MissingInflatedId", "LocalSuppress"}) Button startDialogAct = (Button) findViewById(R.id.start_dialog_activity);
startNormalAct.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, NormalActivity.class);
startActivity(intent);
}
});
startDialogAct.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, DialogActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart");
}
}
活动被收回了调用数据
使用onSaveInstanceState()回调办法进行回调