通过通知显示现有活动

时间:2011-04-10 18:26:28

标签: java android android-activity background notifications

我有一个问题,我需要加载已经通过点击活动打开的现有活动,我的问题是,当点击通知时,尝试创建一个新活动,从而调用onCreate方法等等第四。我应该如何只重新打开已经打开的(在后台运行)活动?

另外,我应该如何解决Android可能会杀死我打算通知的后台活动的问题?

另一个大问题是,如果用户手动显示通知进入应用程序并执行所需的活动,从而使通知无效,然后当用户点击通知时,我应该如何识别用户已经手动执行通知应该完成的任务?

此致 MilindaD

2 个答案:

答案 0 :(得分:0)

听起来这里有一些不同的问题。

  

我有一个问题,我需要加载已经通过点击活动打开的现有活动,我的问题是,当点击通知时,尝试创建一个新活动,从而调用onCreate方法等等第四。我应该如何只重新打开已经打开的(在后台运行)活动?

因此,如果我理解正确,用户正在查看您的活动,然后他们离开,然后他们通过通知返回。在这种情况下,通常不会再次调用onCreate,除非应用程序自行终止,设置android:noHistory或被系统杀死以回收内存。如果您正在尝试编写一个不会被杀的活动,那么您做错了,您应该使用服务:http://developer.android.com/reference/android/app/Service.html

  

另外,我应该如何解决Android可能会杀死我打算通知的后台活动的问题?

这里的问题是“背景活动”。你必须假设如果用户去做其他事情,任何Activity都可能被杀死。如果您需要代码继续运行而不管用户在做什么,您应该使用服务(见上文)。

  

另一个大问题是,如果用户手动显示通知进入应用程序并执行所需的活动,从而使通知无效,然后当用户点击通知时,我应该如何识别用户已经手动执行通知应该完成的任务?

当您的活动运行时,它可以简单地取消任何通知。通过NotificationManager抓取getSystemService()的实例并致电.cancel(NOTIFICATION_ID)

答案 1 :(得分:0)

不确定自2011年以来这是否有所改变,很可能,但在2016年,改变清单对我来说非常容易。它正在添加“singleTask”,从而产生了不同。

    <activity
        android:name=".MainActivity"
        android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>