在App重新启动时获取Intent

时间:2014-12-03 14:10:37

标签: android android-intent android-activity android-task

假设应用程序中只有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>

1 个答案:

答案 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,但它只会在第一次发送数据。