Activity
Intent切换活动时Activity生命周期
MainActivity部分代码:
Intent intent = new Intent(MainActivity.this,RetrospectTwo.class);
startActivity(intent);
RetrospectTwo部分代码:
Intent intent = new Intent(RetrospectTwo.this,MainActivity.class);
startActivity(intent);
当活动来回切换时的顺序M切换到R时onPause(M)->onCreate(R)->onStart(R)->onResume(R)->onStop(M)
M切换到R之后R调用finish方法
M切换到R之后R调用finish方法之后回到M生命周期变化顺序
onPause(R)->onRestart(M)->onStart(M)->onResume(M)->onStop(R)->onDestroy(R)
切横竖屏不发生生命周期改变
未添加configChanges时切屏的日志:
如果想切横竖屏不发生生命周期改变需要在AndroidManifest.xml里面设置,还需要注意的是android4.0之后要加一个screenSize才生效
android:configChanges=“orientation|keyboardHidden|screenSize“
向上一个Activity传递数据
MainActivity部分代码:
ActivityResultLauncher<Intent> intentActivityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
//判断返回的结果集是否空,以及返回的响应码是否一样
if (result.getData() != null && result.getResultCode() == Activity.RESULT_OK) {
String msg = result.getData().getStringExtra("return");
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "获取数据为空", Toast.LENGTH_SHORT).show();
}
}
});
//跳转RetrospectTwo活动,此时调用intentActivityResultLauncher的launch方法
exchange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, RetrospectTwo.class);
intentActivityResultLauncher.launch(intent);
}
});
RetrospectTwo部分代码:
finish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intentOne = getIntent();
//返回结果集
intentOne.putExtra("return", "活动二返回的数据");
//返回结果码:RESULT_OK
setResult(RESULT_OK, intentOne);
finish();
}
});
Fragment的生命周期
- Fragment不能独立存在,必须嵌入到Activity中使用,所以Fragment生命周期直接受到所在的Activity影响。
- 当在Activity中创建Fragment时,Fragment处于启动状态,当Activity被暂停时,其中的所有Fragment也被暂停,当Activity被撤销时,所有在该Activity中的Fragment也被销毁。当一个Activity处于运行状态时,可以单独地对每一个Fragment进行操作,如添加或删除,当添加时,Fragment处于启动状态。当删除时,Fragment处于销毁状态