Android通知重新排序到前台不';不行。从其工作的应用程序中复制

Android通知重新排序到前台不';不行。从其工作的应用程序中复制,android,android-intent,notifications,Android,Android Intent,Notifications,我从虚拟项目测试服务和通知中复制了一段代码,在这些服务和通知中,reorder-to-font像一个符咒一样工作 以下是通知代码(与教程中的代码非常相似) 清单看起来像: <application android:allowBackup="true" android:icon="@drawable/ld" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity

我从虚拟项目测试服务和通知中复制了一段代码,在这些服务和通知中,reorder-to-font像一个符咒一样工作

以下是通知代码(与教程中的代码非常相似)

清单看起来像:

<application android:allowBackup="true" android:icon="@drawable/ld"
    android:label="@string/app_name" android:theme="@style/AppTheme">
    <activity 
        android:name="com.iraasta.cloudcab.driver.MainActivity"
        android:launchMode="singleTop"
        android:label="@string/app_name" 
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

它在我的另一个应用程序中看起来完全一样,它完美地将应用程序带到前台,就像在主屏幕上选择一样。
但在这个例子中,它每次都调用OnCreate并丢失整个状态。

不使用任何标志修复了它

给以后看这篇文章的人。
如果您的应用程序使用单个活动,并且您希望在单击通知后将其置于最前面,只需将标志保留为整数0即可。
它解决了我的问题。
谢谢你的建议


赏金将交给解释为什么这面旗帜会毁掉一切的人。

不使用任何旗帜修复了它

给以后看这篇文章的人。
如果您的应用程序使用单个活动,并且您希望在单击通知后将其置于最前面,只需将标志保留为整数0即可。
它解决了我的问题。
谢谢你的建议


赏金会交给解释为什么这个标志会毁掉一切的人。

要让你的应用程序在任何状态下都处于最前端(如果它在后台),或者要启动你的应用程序(如果它不是aleady运行),你需要启动你的“根活动”(ACTION=MAIN,CATEGORY=LAUNCHER)并设置标志
Intent.flag\u ACTIVITY\u NEW\u TASK
。这将在新任务中启动活动(如果应用程序尚未运行),或将现有任务置于前台(如果应用程序已运行)

由于您是通过通知执行此操作的,因此应在传递给通知的
Intent
中设置
Intent.FLAG\u ACTIVITY\u NEW\u TASK
。然而,如果你忘记做,Android已经足够好了,可以为你设置这个标志


我不太清楚为什么设置
Intent.FLAG\u ACTIVITY\u REORDER\u TO\u FRONT
会导致你的问题,但我可以想象这会让Android感到困惑。

要让你的应用程序在任何状态下都能出现在前台(如果它在后台),或者要启动你的应用程序(如果它不在日常运行),你需要启动你的应用程序“根活动”(具有ACTION=MAIN和CATEGORY=LAUNCHER的活动)并设置标志
Intent.flag\u activity\u NEW\u TASK
。这将在新任务中启动活动(如果应用程序尚未运行),或将现有任务置于前台(如果应用程序已运行)

由于您是通过通知执行此操作的,因此您应该在传递给通知的
Intent
中设置
Intent.FLAG\u ACTIVITY\u NEW\u TASK
。不过,如果您忘记了设置此标志,Android已经足够好了


我不太清楚为什么设置
Intent.FLAG\u ACTIVITY\u REORDER\u TO\u FRONT
会导致您的问题,但我可以想象这会让Android感到困惑。

设置
Android:launchMode=“singleTask”
在清单中为您想带到前台的活动设置设置
Android:launchMode=“singleTask"
在你想展示给我的活动清单中,你的应用程序有透明/半透明的主题吗?它在按钮上使用透明样式,如果你问的是安卓按钮栏样式,那么有一个已知的bug,它会破坏活动重新排序的功能,如果活动有透明的标题出身背景也许这不是你的问题。既然您试图启动的活动是您的根(启动器)活动,为什么要在这里设置后台堆栈?没有父活动。可能是这导致了问题?我刚刚复制了官方android通知教程中使用的所有代码,我的应用程序是单一活动。你的应用程序是否有透明/半透明的主题?它在按钮上使用透明样式和android按钮栏样式(如果这是你要问的),有一个已知的bug破坏了如果活动具有透明背景,则将活动重新排序到前面。也许这不是你的问题。既然您试图启动的活动是您的根(启动器)活动,为什么要在这里设置后台堆栈?没有父活动。也许这就是问题的原因?我只是复制了官方android通知教程中使用的所有代码,我的应用程序是单一活动
<application android:allowBackup="true" android:icon="@drawable/ld"
    android:label="@string/app_name" android:theme="@style/AppTheme">
    <activity 
        android:name="com.iraasta.cloudcab.driver.MainActivity"
        android:launchMode="singleTop"
        android:label="@string/app_name" 
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>