一.创建
- 新建类继承Activity或其子类
- 在AndroidManifest中声明
- 创建layout并在Activity的onCreate中设置
二.生命周期
三.跳转和数据传递
1.跳转
[1]显式跳转(最常用)
Intent intent = new Intent(当前activity的context,目标activity类);
startActivity(intent);
或
Intent intent = new Intent();
intent.setClass(当前activity的context,目标activity类);
startActivity(intent);
或
Intent intent = new Intent();
intent.setClassName(当前activity的context,目标activity完整路径(例“com.test.jump.TargetActivity”));
startActivity(intent);
或
Intent intent = new Intent();
intent.setComponent(new ComponentName(当前activity的context,目标activity完整路径(例“com.test.jump.TargetActivity”)));
startActivity(intent);
[2]隐式跳转
.java文件
Intent intent = new Intent();
intent.setAction(目标activity的action);
AndroidManifest.xml
<activity android:name=".TargetActivity">
<intent-filter>
<action android:name="com.test.jump.Target"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
2.数据传递
数据发送代码:
Intent intent = new Intent(当前activity的context,目标activity类);
Bundle bundle = new Bundle();
bundle.putString("name":"文字");
bundle.putInt("number":66);
intent.putExtras(bundle);
startActivity(intent);
数据获取代码:
Bundle bundle = getIntent().getExtras();
String name = bundle.getString("name");
Int number = bundle.getInt("number");
StartActivityForResult()
跳转发起页面:
1.发送数据
Intent intent = new Intent(当前activity的context,目标activity类);
Bundle bundle = new Bundle();
bundle.putString("name":"文字");
bundle.putInt("number":66);
intent.putExtras(bundle);
startActivityForResult(intent,0);
2.接收目标页面返回的数据
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(data.getExtras().getString("title"));
}
跳转目标页面:
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("title":"返回的数据");
intent,putExtras(bundle);
setResult(Activity.RESULT.OK,intent);
finish();
四.Activity四种启动模式
1.Activity的android:lanchMode属性
- standard:标准模式(默认)
- singleTop:Task栈顶复用模式(需要启动的目标Activity位于栈顶,则无需重新创建,复用即可)
- singleTask:Task栈内复用模式(只要栈内有需要创建的Activity,则直接复用)
- singleInstance:全局单例模式(2和3仅限与同一栈内,该模式无此局限)
[1]standard(最多)
Activity是由任务栈管理的,每启动一个Activity,就会被放入栈中,按返回键会从栈中移除一个Activity;
standard是默认的启动模式,即标准模式,每启动一个Activity,都会创建一个新的实例。
[2]singleTop(较多)
当要启动的目标Activity位于栈顶时,不会创建新的实例,会复用栈顶的Activity,并且其onNewIntent()方法会被调用;如果目标Activity不在栈顶,则同standard一样创建新的实例。
[3]singleTask(较多)
在同一个任务栈中,如果要启动的目标Activity已经在栈中,则会复用该Activity,并调用其onNewIntent()方法,并且该Activity上面的Activity会被清除;如果栈中没有,则创建新的实例
[4]singleInstance(很少)
全局复用,每个任务栈中只有一个Activity,无论哪个任务栈,只要存在目标Activity就可以复用;每个Activity占有一个新的任务栈。
测试以上模式核心代码:
Log.d("AActivity", "----onCreate----");
Log.d("AActivity", "taskid:" + getTaskId() + " ,hash:" + hashCode());
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.d("AActivity", "----onNewIntent----");
Log.d("AActivity", "taskid:" + getTaskId() + " ,hash:" + hashCode());
logtaskName();
}
private void logtaskName() {
try {
ActivityInfo info = getPackageManager().getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);
Log.d("AActivity", info.taskAffinity);//info.taskAffinity所在任务栈的名称,默认为包名,可自行设置
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}