假设应用程序中只有2个活动:
1. 活动A (启动器活动)
2. 活动B
onCreate()中 Acrivity A 的代码:
Intent intent = new Intent();
intent.putExtra("key", "test");
intent.setClass(this, ActivityB.class);
startActivity(intent);
finish();
因此,通过传递数据,从活动A 启动活动B 。 活动A 也会被销毁。
所以,如果我第一次启动应用程序:
1. 活动A 开始了
2. 活动A 使用数据发布活动B
3. 活动A 被销毁
假设如果我按活动B 中的后退键,活动B 会被销毁并且应用程序退出,如果我重新启动应用程序:
1.活动B直接开始,获取相同的数据,这是从活动A 设置的。
我的问题是:
当应用程序重新启动时,如何停止获取此意图?
活动B 在重新启动后启动,不是问题,我只是想停止获取意图。
AndriodManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.listnertest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="ActivityA"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="ActivityB"
android:label="@string/app_name" >
</activity>
</application>
答案 0 :(得分:0)
每次启动应用时,它都会运行ActivityA。因为你告诉ActivityA在创建它时将数据发送到ActivityB,所以每次都会这样做。
这听起来像第二次,你仍然想要启动ActivityB,但不是你在意图额外添加的数据,是吗?无论您是否已发送该数据,您都需要跟踪应用启动。一种方便的方法是使用SharedPreferences。
Intent intent = new Intent();
SharedPreferences prefs = activity.getSharedPreferences("my_prefs", 0);
if (!prefs.contains("sent_key")) {
intent.putExtra("key", "test");
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("sent_key", true);
editor.commit();
}
intent.setClass(this, ActivityB.class);
startActivity(intent);
finish();
这将使ActivityA始终启动ActivityB,但它只会在第一次发送数据。