Activity的一些细节

147 阅读2分钟

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);

intent切换活动的日志.png 当活动来回切换时的顺序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)

M切换到R之后R调用finish方法回到M的日志.png

切横竖屏不发生生命周期改变

未添加configChanges时切屏的日志:

未添加configChanges的日志.png

如果想切横竖屏不发生生命周期改变需要在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的生命周期

  1. Fragment不能独立存在,必须嵌入到Activity中使用,所以Fragment生命周期直接受到所在的Activity影响。
  2. 当在Activity中创建Fragment时,Fragment处于启动状态,当Activity被暂停时,其中的所有Fragment也被暂停,当Activity被撤销时,所有在该Activity中的Fragment也被销毁。当一个Activity处于运行状态时,可以单独地对每一个Fragment进行操作,如添加或删除,当添加时,Fragment处于启动状态。当删除时,Fragment处于销毁状态