我在GCMIntent服务类中指定了一个活动,只要用户从服务器接收广播,就需要打开该活动。下面是我的GCMIntent类中的代码:
private void sendNotification(String msg) {
String payload=msg.substring(msg.indexOf("RequestResponse=")+20, msg.indexOf("from")-2);
mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, ListActivity.class), 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.ic_launcher).setContentTitle("xxx").setStyle(new NotificationCompat.BigTextStyle().bigText("Update List")).setContentText("Update List").setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL).setWhen(System.currentTimeMillis());
mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
所以在广播消息上单击我的ListActivity应该打开,它将根据从服务器接收的数据刷新List。问题是如果我的ListActivity在前台打开,那么在广播点击时再次创建ListActivity,然后我实际上有2个相同活动的实例。如果其他Activity在前台,它的工作正常。 我做了一些研究,似乎我们不应该使用代码来确定生产中的前台活动。一些帖子建议使用Activity Manager来了解当前的前台活动仅用于调试目的。 我知道这个
答案 0 :(得分:1)
将其添加到清单文件中的ListActivity。
android:launchMode="singleInstance"
编辑:由于在从背景返回活动时始终会调用onResume()
,因此您可以使用onResume()
中直接收到的数据更新列表。