2019-09-17 18:51:21.639 26091-26091/? D/LifeActivity: --------onCreate:
2019-09-17 18:51:21.714 26091-26091/? D/LifeActivity: --------onStart:
2019-09-17 18:51:21.716 26091-26091/? D/LifeActivity: --------onResume:
复制代码
2019-09-17 19:36:10.457 29902-29902/com.fr.myapplication D/LifeActivity: --------onPause:
2019-09-17 19:36:10.929 29902-29902/com.fr.myapplication D/LifeActivity: --------onStop:
复制代码
2019-09-17 19:36:15.411 29902-29902/com.fr.myapplication D/LifeActivity: --------onRestart:
2019-09-17 19:36:15.412 29902-29902/com.fr.myapplication D/LifeActivity: --------onStart:
2019-09-17 19:36:15.413 29902-29902/com.fr.myapplication D/LifeActivity: --------onResume:
复制代码
2019-09-17 19:36:10.457 29902-29902/com.fr.myapplication D/LifeActivity: --------onPause:
2019-09-17 19:36:10.929 29902-29902/com.fr.myapplication D/LifeActivity: --------onStop:
复制代码
2019-09-17 19:40:09.387 29902-29902/com.fr.myapplication D/LifeActivity: --------onRestart:
2019-09-17 19:40:09.389 29902-29902/com.fr.myapplication D/LifeActivity: --------onStart:
2019-09-17 19:40:09.391 29902-29902/com.fr.myapplication D/LifeActivity: --------onResume:
复制代码
Running / Paused / Stopped / Killedandroid
Activity处于活动状态,此时Activity处于栈顶,是可见状态,可与用户进行交互。bash
当Activity失去焦点时,或被一个新的非全屏的Activity,或被一个透明的Activity放置在栈顶时,Activity就转化为Paused状态。此时Activity只是失去了与用户交互的能力,其全部的状态信息及其成员变量都还存在,只有在系统内存紧张的状况下,才有可能被系统回收掉。app
当一个Activity被另外一个Activity彻底覆盖时,被覆盖的Activity就会进入Stopped状态,此时它再也不可见,可是跟Paused状态同样保持着其全部状态信息及其成员变量。ide
当Activity被系统回收掉时,Activity就处于Killed状态。布局
咱们知道,Activity除了受用户操做所致使的正常的生命周期方法的调度,还有一些异常状况,好比当资源相关的系统配置发生改变以及系统内存不足时,Activity就可能被杀死。学习
例如当前的Activity处于竖屏状态,若是忽然旋转屏幕,因为系统配置发生了改变,在默认的状况下,Activity就会被销毁而且从新建立,固然咱们能够阻止系统从新建立咱们的Activity。 测试
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(TEXT,text);
Log.d(TAG, "--------onSaveInstanceState: ");
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
text = savedInstanceState.getString(TEXT);
Log.d(TAG, "--------onRestoreInstanceState: ");
}
复制代码
注意:系统只有在Activity异常终止的时候才会调用onSaveInstanceState和onRestoreInstanceState来储存和恢复数据,其余状况下不触发这个过程动画
Activity按照优先级从高到低,能够分为如下三种ui
当系统的内存不足时,系统会按照上述的优先级去杀死目标Activity所在的进程,并在后续经过onSaveInstanceState和onRestoreInstanceState来储存和恢复数据。this
在AndroidManifest.xml中设置configChanges属性的值可使系统配置发生变化后,Activity不被从新建立,以达到和onSaveInstanceState和onRestoreInstanceState来储存和恢复数据同样的效果。
<activity android:name=".LifeActivity"
android:configChanges="orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
复制代码
public class LifeActivity extends AppCompatActivity {
private static final String TAG = "LifeActivity";
private static final String TEXT = "text";
private EditText editText;
private String text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "--------onCreate: ");
setContentView(R.layout.activity_life);
editText = findViewById(R.id.et_text);
text = String.valueOf(editText.getText());
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "--------onStart: ");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "--------onPause: ");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "--------onStop: ");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "--------onResume: ");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "--------onRestart: ");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "--------onDestroy: ");
}
public void click(View view) {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(TEXT,text);
Log.d(TAG, "--------onSaveInstanceState: ");
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
text = savedInstanceState.getString(TEXT);
Log.d(TAG, "--------onRestoreInstanceState: ");
}
}
复制代码
其中的MainActivity,为页面内跳转测试当前生命周期而存在,可为任意一个Activity此处就不贴出代码了
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Activity学习.LifeActivity">
<Button
android:id="@+id/bt_click"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击跳转"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
tools:ignore="HardcodedText"
android:onClick="click"/>
<EditText
android:id="@+id/et_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:hint="输入内容"
app:layout_constraintTop_toBottomOf="@id/bt_click"
android:inputType="text"
android:imeOptions="actionDone"/>
</androidx.constraintlayout.widget.ConstraintLayout>
复制代码