Activity的android:launchMode属性(四种启动模式)(在AndroidManiFest配置)
- standard:标准模式,默认
- singleTop:Task栈顶复用模式
- singleTask:Task栈内复用模式
- singleInstance:全局单例模式
Activity是由谁管理的
- Activity是由任务栈管理的,每启动一个Activity,就会被放入栈中,按返回键,就会从栈顶移除一个Activity
- standard是默认的启动模式,即标准模式。每启动一个Activity,都会创建一个新的实例
singleTOP模式
- 当要启动的目标Activity已经位于栈顶的时候,不会创建新的实例,会复用栈顶Activity,并且其onNewIntent()方法会被调用;如果目标Activity不在栈顶,则跟standard一样创建新的实例
singleTask
- 在同一个任务栈中,如果要启动的目标Activity已经在栈中,则会复用该Activity,并调用其onNewIntent()方法,并且该Activity上面的Activity会被清除;如果栈没有就会创建新的实例
SingleInstance
- 全局复用,不管哪个Task栈,只要存在目标Activity,就复用。每个Activity占有一个新的Task栈
package com.example.test0508.jump;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.example.test0508.R;
public class AActivity extends AppCompatActivity {
private Button mBtnJump1;
private Button mBtnJump2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
Log.d("AActivity","--onCreate--");
Log.d("AActivity","taskId:" + getTaskId()+" ,hashCode" + hashCode());
/**
* 数据传递
*/
mBtnJump1 = findViewById(R.id.btn_jump1);
mBtnJump1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(AActivity.this,BActivity.class);//从Activity.this跳到B.class
//数据传递
Bundle bundle = new Bundle();
bundle.putString("name","李");
bundle.putInt("age",21);
intent.putExtras(bundle);
startActivity(intent);
//这个0是请求码,判断哪一个控件返回
// startActivityForResult(intent,0);
}
});
mBtnJump2 = findViewById(R.id.btn_jump2);
mBtnJump2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(AActivity.this,AActivity.class);
startActivity(intent);
}
});
}
/**
* 接受B返回的数据
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Toast.makeText(AActivity.this,"返回的数据"+data.getExtras().getString("title"),Toast.LENGTH_SHORT).show();
}
/**
* 打印任务栈相关信息
*/
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.d("AActivity","--onNewIntent--");
Log.d("AActivity","taskId:" + getTaskId()+" ,hashCode" + hashCode());
}
}
package com.example.test0508.jump;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.example.test0508.R;
public class BActivity extends AppCompatActivity {
private TextView mTvTitle;
private Button mBtnFinish;
private Button mBtnBtoA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
mTvTitle = findViewById(R.id.tv_jump_title);
Log.d("BActivity","--BonCreate--");
Log.d("BActivity","taskId:" + getTaskId()+" ,hashCode" + hashCode());
/**
* 从A那边获取数据并设置到自己的text里面
*/
final Bundle bundle = getIntent().getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
mTvTitle.setText("name:" + name + "age" + age);
/**
* 结束按钮,并返回数据给A
*/
mBtnFinish = findViewById(R.id.btn_jump_finish);
mBtnFinish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
Bundle bundle1 = new Bundle();
bundle1.putString("title","我回来了");
intent.putExtras(bundle1);
setResult(Activity.RESULT_OK,intent);
finish();//关闭掉
}
});
mBtnBtoA = findViewById(R.id.btn_jump_btoA);
mBtnBtoA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(BActivity.this,AActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.d("BActivity","--BonNewIntent--");
Log.d("BActivity","taskId:" + getTaskId()+" ,hashCode" + hashCode());
}
}