0

アプリケーションに 2 つのアクティビティしかないとし
ます。1.アクティビティ A (ランチャー アクティビティ)
2.アクティビティ B


onCreate()のAcrivity Aのコード:

Intent intent = new Intent();
    intent.putExtra("key", "test");
    intent.setClass(this, ActivityB.class);
    startActivity(intent);
    finish();  

したがって、データを渡すことにより、Activity AからActivity 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>

4

1 に答える 1

0

アプリを起動するたびに、ActivityA が実行されます。そして、ActivityA が作成されるたびにそのデータを ActivityB に送信するように指示しているので、毎回それを行うことになります。

2 回目には、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 を起動しますが、データは初回のみ送信されます。

于 2014-12-04T08:21:46.150 に答える