1

ウィジェットの構成に使用できるアクティビティAがあります。ただし、ランチャーから直接開始することもできます。ウィジェット構成インスタンスが保存されると、ランチャーインスタンスが再起動されます。なんでだろうか。

まず、ランチャーからアクティビティを開始します。次に、ホームボタンを押してアクティビティを停止します。

次に、ホーム画面でウィジェットをクリックすると、ウィジェット構成アクティビティインスタンスが起動します。これが私がそれを呼ぶ方法です。

Intent intent = new Intent(context, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);

PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent,
PendingIntent.FLAG_UPDATE_CURRENT);

ウィジェット構成アクティビティインスタンスを離れるとき、たとえば保存ボタンをクリックすると、ランチャーアクティビティインスタンスが再起動されます。

public void onClick(View v) {
        settings.save();

        // Signal that saving was performed and widget should be shown
        Intent resultValue = new Intent();
        resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        setResult(RESULT_OK, resultValue);

        BreakWidgetProvider.updateWidgets(new int[] { appWidgetId }, this);

        this.finish();
    }

アクティビティはさまざまなタスクに属する必要があります。なぜそれらが関連しているのだろうか。

ランチャーアクティビティインスタンスの再起動を防ぐにはどうすればよいですか?

4

1 に答える 1

0

私はそれを解決しました。ウィジェット構成アクティビティ インスタンスは、ランチャーによって開始されたものの子を取得したようです。そこで、以下のようにマニフェストを調整しました。

<activity
    android:name=".BreakMainActivity"            
    android:label="@string/app_name"
    android:launchMode="standard"
    **android:allowTaskReparenting="false"**
    **android:noHistory="true"**            
    android:theme="@android:style/Theme.Light" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

allowTaskReparenting="false" で十分だったと思います。

于 2012-08-21T19:02:15.083 に答える