1

我有两个应用程序 A(活动 A1、A2、A3)和 B(活动 B1、B2)。我的过程是这样的:

A1 -> A2 -> A3 -> B1 -> B2

我的问题是:从活动 B2,如何恢复到现有活动 A3 - 不创建新活动 A3 - 就像使用多任务按钮切换 2 个应用程序一样?

谢谢,

4

4 回答 4

2

Intent 是 Android 中强大的机制,它允许您从另一个进程启动活动。

你只需要安装包和类名。就这样。

例如 :

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example", "com.example.MyExampleActivity"));
startActivity(intent);

你也可能需要一个singleInstance | Activity A3 的singleTask启动模式。

当您需要启动 A3 时,您需要将FLAG_ACTIVITY_REORDER_TO_FRONT设置为您的 Intent,并且 A3 将重新排序到前面。

如何在 Android 中制作 IRC:阅读此处

于 2015-08-10T12:16:17.743 回答
1

您需要 singleTop 使活动始终使用相同的实例,然后在该活动中 onNewIntent 将在我们从另一个活动返回时触发(通过意图)

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="..." >
<application ...>
    <!-- android:launchMode="singleTop" makes sure we reuse the same instance -->
    <activity android:name=".A3Activity" android:label="@string/app_name"
        android:launchMode="singleTop">...</activity>
    ...
</application>


public class A3Activity extends Activity {
    @Override
    protected void onNewIntent(Intent intent) {
        //This is triggered onyl when re-launched
        super.onNewIntent(intent);
        //do anything new here
    }
}

public class B2Activity extends Activity {

    public void someMethod() {
        //This relaunches the A3 activity from same app
        //Intent intent = new Intent(this, A3Activity.class);

        //This does it from the other app
        Intent intent = new Intent(
        intent.setComponent(new ComponentName("com.anh", "com.anh.A3Activity"));
        startActivity(intent);
    } 

}
于 2015-08-10T12:20:47.790 回答
0

首先从 B2 到 B1 你需要这个

Intent intent = new Intent(this, B1.Class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("fromB",true);
startActivity(intent);
finish(); 

当您在 B1 中时 onCreate 放这个

 Bundle b = getIntent().getExtras();
 if(b.getBoolean()){
   Intent intent = new Intent(this, A3.Class);
   intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
   intent.putExtra("fromB",true);
   startActivity(intent);
   finish(); 
 }

我认为这会有所帮助:D

于 2015-08-10T12:25:08.207 回答
-1

当重定向到 B1 -> B2 时调用 finish(); 在活动 B1..

于 2015-08-10T12:17:40.030 回答