Activity 的 launchMode

Intent 传递内容

在使用 Intent 跳转时,可以是设置 putExtras 方法来传递内容
启动页面

Intent it = new Intent(MainActivity.this, Activity01.class);
it.putExtra("name", " 张三 "); // 设置内容
it.putExtra("age", 20);
startActivity(it);

使用 Bundle 的方式传递

Intent it = new Intent(Activity01.this, Activity02.class);
// 将数据全部设置到 Bundle 中
Bundle b = new Bundle();
b.putString("name", " 李四 ");
b.putInt("age", 20);
it.putExtras(b); // 设置数据
startActivity(it);

被启动界面,接收内容

// 得到启动该 Activity 的 Intent 对象
Intent it = getIntent();
String name = it.getStringExtra("name");
int age = it.getIntExtra("age", 0);
startActivityForResult

1 、启动页面使用 startActivityForResult 方式启动

ntent it2 = new Intent(Activity01.this, Activity02.class);
// 第一个参数表示启动 Intent 对象,第二个参数是请求码 ( 给 Intent 添加的编码 )
startActivityForResult(it2, 1);

2 、被启动界面正常处理数据,并在结束之前设置结果给启动页面

//  回传内容
Intent it = new Intent();
it.putExtra("result", " 从 Activity02 回来的内容:啦啦啦啦啦 ");
setResult(Activity.RESULT_OK, it);
finish();

3 、启动页面上重写 onActivityResult 方法接收结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1){
if(resultCode == RESULT_OK){
String str = data.getStringExtra("result");
tv.setText(str);
}else{
tv.setText(" 用户取消 ");
}
}
}

Activity 的 launchMode

Activity 的启动模式,直接操作 Activity 在栈中的情况
配置方式


"com.xykj.apidemo.Activity01"
...
android:launchMode="singleTop" />

查看 Activity 栈的情况: adb shell dumpsys activity > D:/log1805281648.txt
搜索 Running activities 找打自己的应用包名
1.standar :默认,可以在栈中创建多个 Activity ,每启动一个 Activity 都会在栈中创建一个 Activity 对象
2.singleTop :如果当前 Activity 已经在栈顶,则不再创建 Activity 对象而是直接触发其 onNewIntent 方法
3.singleTask :配置该启动模式的 Activity 一般要配合 android:taskAffinity 属性来使用,并且 taskAffinity 要跟应用包名不一样 ( 如: com.test) ,这样该 Activity 将会
放到新栈 ( 如名字 com.test) 的栈底,然后该 Activity 启动其他普通的 Activity 的话那么其他的也会被放到该新栈中

android:name="com.xykj.apidemo.Activity02"
android:label="Activity02"
android:taskAffinity="com.test"
android:launchMode="singleTask" />

4.singleInstance :跟 singleTask 类似,唯一的区别是添加来该启动模式的 Activity 会被放在新栈中,并且新栈中有且只有该 Activity 一个对象

你可能感兴趣的:(Android,狗狗吃骨头)