【发布时间】:2016-01-04 19:41:30
【问题描述】:
我正在开发一个 Android 4+ 应用程序。该应用程序使用一个简单的 MainActivity 可以启动几个其他活动。一个很好的例子是邮件应用程序:MainActivity 显示邮件列表。额外的 ReaderActivity 和 ComposeActivity 可用。让我们假设 MainActivity 有一些其他选项,例如显示一个消息框/警报,显示邮箱的可用空间。
到目前为止一切正常。知道我已经创建了一个允许直接访问“可用空间”选项的小部件:当用户单击小部件中的按钮时,这应该会打开 MainActiviy 显示“可用空间”消息框。
为了解决这个问题,我简单地将以下 PendingIntent 添加到小部件按钮:
// In Windget Provider
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
...
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget__content);
Intent showFreeSpaceIntent = new Intent(context, MainActivity.class);
showFreeSpaceIntent.putExtra(MainActivity.IS_WIDGET_CALL_EXTRA_ID, true);
PendingIntent showFreeSpacePendingIntent = PendingIntent.getActivity(context, 0, showFreeSpaceIntent , 0);
views.setOnClickPendingIntent(R.id.widget_infoButton, showFreeSpacePendingIntent );
appWidgetManager.updateAppWidget(appWidgetId, views);
...
}
// In MainActiviy
protected void onCreate(Bundle savedInstanceState) {
...
Intent intent = getIntent();
Boolean isWidgetCall = (intent != null ? intent.getBooleanExtra(IS_WIDGET_CALL_EXTRA_ID, false) : false);
if (isWidgetCall) ...
}
这会启动应用程序,其顶部的 MainActivity 会显示所需的信息。
问题:
- 如果 MainActivity 已经在运行,则会在顶部创建一个新实例。
- 如果另一个活动,例如ReadMailActivity,在顶部,一个新的 MainActivity 被创建并设置在顶部。
这会创建一个从未计划过的 Activity 堆栈。 MainActivity 应该只有一个实例。如果一个(或多个)Activitoes 位于顶部,则应将其关闭以返回 MainActivity,然后该 MainActivity 应显示信息。
我怎样才能建立这种行为?
【问题讨论】:
-
你在manifest 中尝试过
android:launchMode="singleTop"吗? -
@ci_
singleTop如果现有任务堆栈中的Activity之上已经有另一个Activity,则将无济于事。 Android 仍会启动另一个MainActivity实例。
标签: android android-activity android-widget android-pendingintent