我有一个问题,我需要加载已经通过点击活动打开的现有活动,我的问题是,当点击通知时,尝试创建一个新活动,从而调用onCreate方法等等第四。我应该如何只重新打开已经打开的(在后台运行)活动?
另外,我应该如何解决Android可能会杀死我打算通知的后台活动的问题?
另一个大问题是,如果用户手动显示通知进入应用程序并执行所需的活动,从而使通知无效,然后当用户点击通知时,我应该如何识别用户已经手动执行通知应该完成的任务?
此致 MilindaD
答案 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>