activity的launchmode和taskAffinity学习笔记(二)

现在想尝试一下,两个应用间的测试,废话不多说,上代码。


app1代码如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.kv.app1">

    <application android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name">
        <activity android:name=".App1Act1">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name=".App1Act2"  android:taskAffinity="com.kf.app"/>
        <activity android:name=".App1Act3"/>
        <activity android:name=".App1Act4"/>
    </application>

</manifest>

public class App1Act1 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act1);
        findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(App1Act1.this, App1Act2.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
            }
        });
    }
}

public class App1Act2 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act2);
        findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(App1Act2.this, App1Act3.class);
                startActivity(intent);
            }
        });
    }
}

app2代码如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.kv.app2">

    <application
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name">
        <activity android:name="com.kv.app2.App2Act1">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".App2Act2" android:taskAffinity="com.kf.app" />
        <activity android:name=".App2Act3" />
        <activity android:name=".App2Act4" />
    </application>

</manifest>

public class App2Act1 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act1);
        findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(App2Act1.this, App2Act2.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
            }
        });
    }
}

public class App2Act2 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act2);
        findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(App2Act2.this, App2Act3.class);
                startActivity(intent);
            }
        });
    }
}


如下操作步骤:

1.先启动app1,启动了app1Act1,点击按钮启动app1Act2。

2.点击home键退到后台,点击app2。

3.启动app2,启动了app2Act2,点击按钮启动app2Act2。


敲adb指令

adb shell dumpsys activity

结果如下:

 Task id #13645
   TaskRecord{19079e91 #13645 A=com.kf.app U=0 sz=2}
   Intent { flg=0x10000000 cmp=com.kv.app1/.App1Act2 }
     Hist #1: ActivityRecord{29ceaf63 u0 com.kv.app2/.App2Act2 t13645}
       Intent { flg=0x10400000 cmp=com.kv.app2/.App2Act2 }
       ProcessRecord{984b615 26342:com.kv.app2/u0a1054}
     Hist #0: ActivityRecord{37bf0e0b u0 com.kv.app1/.App1Act2 t13645}
       Intent { flg=0x10000000 cmp=com.kv.app1/.App1Act2 }
       ProcessRecord{12276da0 26427:com.kv.app1/u0a1053}
 Task id #13646
   TaskRecord{2fb4e1f6 #13646 A=com.kv.app2 U=0 sz=1}
   Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x30200000 cmp=com.kv.app2/.App2Act1 }
     Hist #0: ActivityRecord{3506b230 u0 com.kv.app2/.App2Act1 t13646}
       Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x30200000 cmp=com.kv.app2/.App2Act1 bnds=[283,86][535,371] }
       ProcessRecord{984b615 26342:com.kv.app2/u0a1054}
 Task id #13644
   TaskRecord{272159f7 #13644 A=com.kv.app1 U=0 sz=1}
   Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x30200000 cmp=com.kv.app1/.App1Act1 }
     Hist #0: ActivityRecord{1a07ead2 u0 com.kv.app1/.App1Act1 t13644}
       Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x30200000 cmp=com.kv.app1/.App1Act1 bnds=[21,86][273,371] }
       ProcessRecord{12276da0 26427:com.kv.app1/u0a1053}

可以看出App1Act2和App2Act2在同一个Task里面。然后点击回退键,你会惊人的发现,是下面的退出方式:

1. App2Act2   ->  App1Act2 -> App2Act1 -> 桌面

2. 从任务管理器重新点击App1, 发现App1的app1Act2也被关闭了。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值