无论launchMode和/或标志设置为什么,Android通知都会启动新的活动实例

时间:2015-02-12 14:27:47

标签: android android-intent notifications

我一直在对此进行大量研究,而且我已经碰壁了。我已经阅读了有关此主题的所有材料(包括thisthisthis以及文档),没有任何内容可以帮助我想做。

基本上,如果应用程序在用户的手机上打开,我只想要通知将用户重定向到我应用中已存在的活动。我使用这样的模式:

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建议都不适合我。非常感谢!

3 个答案:

答案 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()