我一直在对此进行大量研究,而且我已经碰壁了。我已经阅读了有关此主题的所有材料(包括this,this和this以及文档),没有任何内容可以帮助我想做。
基本上,如果应用程序在用户的手机上打开,我只想要通知将用户重定向到我应用中已存在的活动。我使用这样的模式:
private PendingIntent buildPendingIntentForNotification(String type) {
Intent resultIntent = new Intent(this, MainActivity.class);
resultIntent.setAction(Intent.ACTION_VIEW);
resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);// have tried without this and with Intent.FLAG_ACTIVITY_CLEAR_TOP
resultIntent.putExtra(CommonUtils.NOTIFICATION_TYPE, type);
PendingIntent resultPendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
return resultPendingIntent;
}
我还尝试在活动代码中的Android Manifest中声明所有4种类型的launchModes。无论我做什么,点击通知(即使应用程序是屏幕上的活动前台应用程序而MainActivity是活动活动)似乎总是从onCreate重新启动活动。从调试期间我可以看到,在获取通知和单击它之间的任何时候都不会调用onDestroy。但是,单击通知后,即使我的活动没有被销毁,也会调用onCreate并调用onDestroy,这很奇怪。我希望有人可以帮助我理解这一点,因为所有的launchMode和Intent.setFlags建议都不适合我。非常感谢!
答案 0 :(得分:1)
仅仅是为了信息,这里是我用来解决问题的代码(归功于David的解决方案):
private PendingIntent buildPendingIntentForNotification(String type) {
Intent resultIntent = new Intent(this, MainActivity.class);
//resultIntent.setAction(Intent.ACTION_VIEW);
resultIntent.setAction(Intent.ACTION_MAIN);
resultIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resultIntent.putExtra(CommonUtils.NOTIFICATION_TYPE, type);
PendingIntent resultPendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
return resultPendingIntent;
}
答案 1 :(得分:0)
有两种方法可以做到这一点:
答案 2 :(得分:-1)
您无法控制并且无法确定Android上的state of your activities,这意味着(在您的上下文中)您只能启动已暂停但未被销毁的活动。操作系统决定哪些活动会暂停,哪些活动会破坏,你无法控制。当您的活动离开前台时,将在未定义的时间和操作系统中调用连续的回调
您可以简单地做的是在onPause()
方法中保存您的活动的实例状态(我们知道这将在活动离开前景时立即调用)和on { {1}}您可以使用以前的数据恢复活动。
注意:如果您有活动onCreate()
和活动A
并且您从活动B
中开始活动B
,那么请参阅活动A
& #39; B
方法onCreate()