Android Activity
生命周期:
- onCreate() :它在活动第一次被创建的时候调用,所以在方法中完成活动的初始化操作,比如加载布局文件、初始化View、事件绑定等。只会被调用一次。
- onStart() : 在活动在屏幕上由不可见变为可见的时候该方法被调用,但是在这个时候界面是不可交互的。在调用onRestart()方法后会再次调用onStart()方法。
- onResume() : 在活动准备好可以和用户进行交互的时候该方法被调用。此时的活动是处于任务栈的栈顶,并且处于运行状态的。
- onPause() : 在活动处于可见但不可见交互时候该方法被调用。在这个时候我们可以通过在这个方法中将一些消耗CPU的资源释放掉,以及保存活动状态。
- onStop() : 在活动完全不可见的时候该方法被调用。也就是完全被另一个活动覆盖了。
- onDestroy() : 活动即将被销毁前调用,这里面会释放该Activity所占用的资源,这之后活动就变成销毁状态。
- onRestart() : 在活动即将重新启动的时候调用,也就是说该活动需要从停止状态变为运行状态时调用。
那么说完它的理论概念,下面上代码会让理解更加清晰👇👇
public class MainActivity3 extends AppCompatActivity {
private static final String TAG = "ActivityDemo";
private EditText mEditText;
private String mString;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
mEditText = (EditText) findViewById(R.id.editText);
Log.e(TAG, "start onCreat输入e~~~");
}
@Override
protected void onStart() {
super.onStart();
Log.e(TAG, "start onStart~~~");
}
@Override
protected void onRestart() {
super.onRestart();
mEditText.setText(mString);
Log.e(TAG, "start onRestart~~~");
}
@Override
protected void onResume() {
super.onResume();
Log.e(TAG, "start onResume~~~");
}
@Override
protected void onPause() {
super.onPause();
mString = mEditText.getText().toString();
Log.e(TAG, "start onPause~~~");
}
@Override
protected void onStop() {
super.onStop();
Log.e(TAG, "start onStop~~~");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e(TAG, "start onDestroy~~~");
}
}
然后是布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Please input!!" />
<EditText
android:id="@+id/editText"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
当程序启动后日志结果如下:
E/ActivityDemo: start onCreate~~~
E/ActivityDemo: start onStart~~~
E/ActivityDemo: start onResume~~~
当点击中间的回到主屏幕按钮时,该活动会被挂起,日志如下:
E/ActivityDemo: start onPause~~~
E/ActivityDemo: start onStop~~~
当再次回到程序中时:
E/ActivityDemo: start onRestart~~~
E/ActivityDemo: start onStart~~~
E/ActivityDemo: start onResume~~~
当真正退出程序时:
E/ActivityDemo: start onPause~~~
E/ActivityDemo: start onStop~~~
E/ActivityDemo: start onDestroy~~~
那么到这儿呢,对Activity的生命周期也就有了一定的了解。
下面来解释一下这些代码是干嘛的:
protected void onPause() {
super.onPause();
mString = mEditText.getText().toString();
Log.e(TAG, "start onPause~~~");
}
protected void onRestart() {
super.onRestart();
mEditText.setText(mString);
Log.e(TAG, "start onRestart~~~");
}
Activity启动方式
Android启动提供了四种启动方式:
- 标准模式(
Standard ) - 栈顶复用模式(
SingleTop ) - 栈内复用模式(
SingleTask ) - 单例模式(
SingleInstance )
存储方式:
-
Activity 的管理方式 = 任务栈 -
任务栈 采用的结构 = “后进先出” 的栈结构 -
每按一次Back键,就有一个Activity 出栈
四种启动模式的区别:
启动模式的设置:
<activity
android:launchMode="启动模式"
//属性
//standard:标准模式
//singleTop:栈顶复用模式
//singleTask:栈内复用模式
//singleInstance:单例模式
//如不设置,Activity的启动模式默认为**标准模式(standard)**
</activity>
Intent inten = new Intent (ActivityA.this,ActivityB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
标志位属性:
标记位属性 | 含义 |
---|
FLAG_ACTIVITY_SINGLE_TOP | 指定启动模式为栈顶复用模式(SingleTop ) | FLAG_ACTIVITY_NEW_TASK | 指定启动模式为栈内复用模式(SingleTask ) | FLAG_ACTIVITY_CLEAR_TOP | 所有位于其上层的Activity都要移除,SingleTask 模式默认具有此标记效果 | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | 具有该标记的Activity不会出现在历史Activity的列表中,即无法通过历史列表回到该Activity上 |
两种启动模式的区别:
Intent 设置方式的优先级 > Manifest 设置方式
Manifest 设置方式无法设定 FLAG_ACTIVITY_CLEAR_TOP ;Intent 设置方式 无法设置单例模式(SingleInstance )
|