Activity

一.创建

  1. 新建类继承Activity或其子类
  2. 在AndroidManifest中声明
  3. 创建layout并在Activity的onCreate中设置

二.生命周期

onCreate
onStart
onResume
onPause
onStop
onDestroy
onResume
onRestart
App
Created
Started
Resume
Pause
Stopped
Destroy

三.跳转和数据传递

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属性

  1. standard:标准模式(默认)
  2. singleTop:Task栈顶复用模式(需要启动的目标Activity位于栈顶,则无需重新创建,复用即可)
  3. singleTask:Task栈内复用模式(只要栈内有需要创建的Activity,则直接复用)
  4. 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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值