(1)activity 启动政策:
activity 启动行为由相应应用的 AndroidManifest.xml
文件中的启动模式、intent 标志以及调用方提供的 ActivityOptions 定义。使用 ActivityOption#setLaunchDisplayId(int)
可将特定屏幕指定为 activity 启动的目标。
- 默认情况下,activity 与调用方在同一个屏幕上启动。例如,如果未指定其他标志或选项,通过启动器启动的新 Activity 实例应该放置与启动器相同的屏幕上。请务必在启动时使用正确的上下文(activity 与应用)。
- 如果在与特定屏幕无关的来源执行启动(例如通过 shell 或应用上下文),那么 activity 会位于用户上次与设备互动或上一个 activity 启动时的顶部屏幕上。
- 用于启动 activity 的 intent 可解析为系统中已有的 activity 实例。在这种情况下,如果未提供其他标志,activity 会显示在上次使用它时所在的屏幕上。如果使用
ActivityOptions#setTargetDisplayId()
指定目标屏幕,activity 会移动到该屏幕(如果安全限制及其他限制允许的话)。
(2)Activity生命周期,如下定义:
按照上图关系,可见,Activity启动与停止状态过程关系:
启动:
onCreate()
onStart()
onResume()
暂停:
onPause()
onStop()
销毁:
onDestroy()
(3)Activity完整状态,构建如下:
public class MainActivity extends AppCompatActivity {
String TAG = "activity stack flow";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG,"onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG,"onStart");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG,"onReStart");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG,"OnStop");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG,"onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG,"onPause");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG,"onDestroy");
}
}
(4)当apk运行时,遵循步骤2的状态关系执行。可以,通过步骤3进行log验证,准确掌握Activity运行生命周期。