当前位置: 首页 > 知识库问答 >
问题:

使用挂起意图存储应用程序状态的可靠性

松英喆
2023-03-14

我有一个服务,它首先创建一个新的意图,并在其上调用setAction('foo')。在此之后,我调用putextra(“key”,“value123”)。然后调用pendingIntent.getService(this,999,intent,0)(没有传递标志),并将挂起的意图传递给AlarmManager。

但在警报触发之前(甚至之后),我创建了另一个意图,并再次调用setAction('foo'),但不设置任何附加内容。然后再次将其传递给pendingIntent.getService(this,999,intent,0)。但是,这次我在PendingIntent上调用send(),以便立即接收intent。

我所观察到的是,最初的临时演员是以新的意图交付的。我似乎可以一遍又一遍地这样做,即使我的应用程序被干掉了,当我重新启动它时,附加程序仍然在那里。

然而,我在文档中没有看到任何具体的内容来说明这是否实际上是预期的行为。这是一个可靠的方法,我可以通过它在RAM中持久保存少量数据(仅!)以防我的应用程序被终止?目前我正在使用RAMdisk上的文件,但有些设备显然没有这样的东西。

共有1个答案

夹谷鸿福
2023-03-14

这是pendingintent的工作方式;-)

PendingIntent.GetService()的第一次调用将创建一个新的PendingIntent,其中RequestCode设置为999,Intent设置为Action=“foo”

PendingIntent.GetService)的第二次调用不会创建新的PendingIntent。它只返回对第一个PendingIntent的令牌(引用)。对其调用Send()时,将发送原始的PendingIntent

原因是,当您调用PendingIntent.getService()时,Android首先尝试查找与您指定的PendingIntent匹配的PendingIntent。为了确定intent是否匹配,它检查操作、组件和数据,还检查匹配的requestcode参数。在您的示例中,对PendingIntent.getService()的两个调用都具有相同的RequestCodeIntent具有相同的操作。注意:在确定intent是否匹配时,不考虑intent中的“附加项”。

如果您总是希望(重新)使用一个PendingIntent,并且每次使用时只需重写“附加项”,则可以将标志PendingIntent.Flag_Update_Current添加到对PendingIntent.GetService()的调用中。

如果需要并行创建几个PendingIntent,并使用不同的“附加项”,则需要确保每次调用PendingIntent.getService()时使用唯一的RequestCode

 类似资料:
  • 问题内容: 我有在执行过程中挂起的控制台应用程序。这是我的配置: 这是我的堆栈跟踪: 我只打开了一个锥形杯,但似乎没有泄漏。而且我也使用一个线程。除了内存使用率,我没有调整任何mysql设置。Mysql从控制台正常工作。为什么会发生这种情况?这是c3p0错误吗? 问题答案: 立即发生还是在一段时间后发生?也就是说,结帐最初是否成功,但随后却像这样挂起?如果是这样,它看起来像是连接泄漏。请尝试将c3

  • 对于某些活动的意图是有效的,对于某些特定的活动意图是崩溃的,我已经改变并尝试了不同的方法,但是对于某些活动意图是无效的,应用程序正在构建,但是在手机上运行之后,它在调试期间没有显示出任何错误?我尝试了不同的方法,但它仍然崩溃,谁能帮助我解决它? MainActivity java 清单文件

  • 我正在寻找关于如何正确使用Kubernetes本地存储PVC的帮助。 我们在Ubuntu上提供了一个kubespray集群,并启用了本地存储提供器。 我们做错了什么?

  • 我正在做一个大学作业,我必须午餐3个服务器处理客户和一个服务器组的领导,这里是场景: 领导者开始。 leader 运行 3 台服务器(必须使用 Runtime.getRuntime().exec() 将它们作为 jar 文件运行); 向服务器发送激活消息以开始为客户端提供服务 客户端开始与服务器通信。 问题是在客户端发出3或4个请求后,服务器挂起,只有当领导者终止时才完成其工作。如果我从cmd手动

  • 科尔多瓦应用程序在将手机升级到Android 9后停止工作 这是发送请求的代码 当手机连接到wifi时,一切都正常工作,当通过手机切换到数据时,应用程序停止工作。我连接了调试器,所有GET请求都处于状态(挂起)。 我已经在REST客户端应用程序中测试了通过蜂窝连接访问API的能力,它工作正常。 科尔多瓦网络应用程序可以很好地处理这部手机上的蜂窝数据。 Android 9中有什么变化会导致这种行为?

  • 问题内容: 广泛的讨论问题。是否已经有任何库可以让我在Java中存储应用程序的执行状态? 例如,我有一个处理文件的应用程序,现在该应用程序可能在某个时刻被迫关闭。我想存储所有已处理文件和未处理文件的信息,以及处理正在进行的阶段正在进行的流程。 是否已经有抽象此功能的库,或者我将不得不从头开始实现它? 问题答案: 似乎您正在寻找的是可以使用Java Serialization API 执行的序列化。