窗口小部件配置活动关闭时,Launcher活动实例将重新启动

时间:2012-08-11 01:12:55

标签: android android-intent android-activity widget android-pendingintent

我有一个活动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();
    }

活动应该属于不同的任务。我想知道为什么他们有关系。

如何阻止重启启动器活动实例?

1 个答案:

答案 0 :(得分: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”已经足够了。