经过长时间的搜索,我无法找到我需要的东西。
我只想:当向用户显示通知时,如果应用程序只是在后台,我想重新打开MainActivity。但是如果app / activity被杀了,我想完全重启应用程序。
我的实际代码:
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle(notification.getSubject())
.setContentText(notification.getMessage())
.setSound(Settings.System.DEFAULT_NOTIFICATION_URI);
mBuilder.setContentIntent(
PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), PendingIntent.FLAG_UPDATE_CURRENT));
NotificationManager mNotificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notif = mBuilder.build();
notif.flags = Notification.DEFAULT_VIBRATE | Notification.FLAG_AUTO_CANCEL;
实际上无法正常工作的情况是,如果应用或活动被杀,则重新启动应用。
编辑:杀了我的意思是应用程序经理关闭了应用程序。或者我们失去了焦点,活动被破坏了。在这些情况下,我想完全重启应用程序。答案 0 :(得分:0)
我认为你并不完全了解android的功能。每当需要你的程序时,程序都是由android启动的(请参阅Application类,了解你可以覆盖的onCreate)。
每当需要某项活动时,都会(重新)创建或将其带到前台。
这意味着重新启动活动并不一定意味着重新启动应用程序。实际上,如果程序仍在内存中,则不会发生应用程序重启。
如果您想进一步调查
这应该会触发应用程序的重启。如果这确实是问题,那么你就无法“解决”它。 Android决定什么时候它会杀死你的应用程序以及何时从内存中删除它。
然后,最好的解决方案是重新设计您的活动,无论应用程序重启将触发什么,也会在活动本身中执行。或者,如果没有更详细的信息,您希望在“活动/应用程序重新启动”中执行哪些功能,则很难就此问题提供进一步的建议。
答案 1 :(得分:0)
我认为您需要将setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
值更改为setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
。
原因是由于FLAG_ACTIVITY_REORDER_TO_FRONT的方式 作品。当您使用此标志时,Android会查找该实例 活动堆栈中的所需活动,从前面开始 堆栈和扫描,直到它到达堆栈的根/后面。如 一旦找到指定活动的实例,它就会带来 一个到前面(即:如果有多个指定的实例 它将把最新的实例带到前面。
原创我发现了here。 请参阅android developer doc here。
我希望它对你有所帮助。