回来栈

Android是运用任务(Task)来办理活动的,一个任务便是一组存放在栈里的活动的集合,这个栈也被称作回来栈(Back Stack )。体系总是会显现处于栈顶的活动给用户

活动状况

  1. 运转状况当一个活动坐落回来栈的栈顶时,这时活动就处于运转状况。体系最不乐意收回的便是处于 运转状况的活动,由于这会带来非常差的用户体会。
  2. 暂停状况当一个活动不再处于栈顶方位,但依然可见时,这时活动就进入了暂停状况。不在栈顶了,还怎么会可见呢?这是由于并不是每一个活动都会占满整个屏幕的,比方对话框方式的活动只会占用屏幕中心的部分区域,你很快就会在后面看到这种活动。处于暂停状况的活动依然是彻底存活着的,体系也不乐意去收回这种活动(由于它还是可见的,收回可见的东西都会在用户体会方面有不好的影响),只要在内存极低的情况下,体系才会去考虑收回这种活动。
  3. 中止状况当一个活动不再处于栈顶方位,而且彻底不行见的时分,就进入了中止状况。体系依然会为这种活动保存相应的状况和成员变量,可是这并不是彻底可靠的,当其他地方需要内存时,处于中止状况的活动有或许会被体系收回
  4. 毁掉状况当一个活动从回来栈中移除后就变成了毁掉状况。体系会最倾向于收回处于这种状况的活动,从而确保手机的内存足够。

生存期

活动的生命周期

  • 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()回调办法进行回调