1

我真的在推进我的 android 应用程序。我能够执行onDestroy() and onPause()例程。

我还设法让 Android 的通知服务将带有标题和正文的图标放在通知栏/任务菜单中。

此通知服务的唯一问题是,如果我的 android 应用程序已经在运行,并且已经启动了onPause()功能super.onPause(); moveTaskToBack(true);,如果用户点击通知,它将调出我的应用程序的新实例。

一旦用户与新实例交互,由于后台版本已经在运行,程序会崩溃,从而导致冲突。

这是我的通知代码,我需要帮助以使此代码查找我的应用程序的已运行版本:

String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificatonManager = (NotificationManager) getSystemService(ns);
int icon = R.drawable.ic_launcher;
CharSequence tickerText = "app name";
long when = System.currentTimeMillis();
CharSequence contentTitle = "app title";
CharSequence contentText = "text";
Intent notificationIntent = new Intent(this, SuperMicProActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
final int signed = 1;
mNotificatonManager.notify(signed, notification);

我正在寻找onResume()可能是某种bringTaskToFront(this)选择。这存在吗?

谢谢,

4

2 回答 2

3

你有一些问题,恕我直言。

并启动了 super.onPause(); 的 onPause() 函数;moveTaskToBack(true);

这是相当奇怪的行为。你为什么做这个?

一旦用户与新实例交互,由于后台版本已经在运行,程序会崩溃,从而导致冲突。

那么在原始活动中所做的一切根本不应该在活动中,而应该在服务中。一旦您不再有前台活动,Android 终止您的进程以释放内存的几率相当高,并且可能发生得相当快,具体取决于其他情况。您似乎仍在以某种方式依赖于较旧的活动。活动的“后台版本”不应该做任何会影响您的流程中任何其他活动的事情,并且不在前台的活动不应该负责做任何如果活动“噗”的用户可能错过的事情。

话虽如此,还有其他原因可以避免拥有您的活动的第二个副本,特别是导航 - 就目前而言,当用户从活动的第二个副本按 BACK 时,他们将看到第一个副本并感到困惑。

我需要帮助以使此代码查找我的应用程序的已运行版本

不,您“需要帮助才能使此代码查找已运行的活动版本”。应用程序不是活动。活动不是应用程序。

添加FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOP你的Intent意志解决这个问题:

  Intent i=new Intent(this, SuperMicProActivity.class);

  i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);

  PendingIntent pi=PendingIntent.getActivity(this, 0, i, 0);

这会将您现有的活动带到前台,并在需要时摆脱您任务中的其他活动。

于 2012-02-11T20:47:22.360 回答
0

是的,这样的事情是可能的。您需要使用标志。

http://developer.android.com/reference/android/content/Intent.html#setFlags(int )

你应该特别研究这两个。

FLAG_ACTIVITY_SINGLE_TOP
FLAG_ACTIVITY_CLEAR_TOP

于 2012-02-11T20:49:55.870 回答