我正在设计一个在Android上使用NFC的应用程序。读取标签时,系统会发送一个Tag
对象。 Tag
对象是Parcelable
对象。由于我想根据用户设置稍后写入该标签,因此我需要以某种方式“缓存”该对象。我虽然使用粘性广播稍后检索它,但从棒棒糖开始,粘性广播已弃用。另一种方法是保存在磁盘上,但正如文档所述,保存Parcelable
并不是件好事。我猜如果我缓存对象的文件,用户更改Android版本,标签对象不同,然后可能发生崩溃,就会发生问题。我只需要一个内存缓存,但在我看来,无法强制Android保留内存缓存,我可以使用粘性服务,但Android可以随时终止我的服务。这种情况下最好的方法是什么?可缓存对象缓存
可缓存对象缓存
回答
当标签被读取时,系统发送一个活动一个标签对象。
正确。而且,在这一点上,这个活动和你的过程处于前台。我们稍后会回到这一点。
因为我想以后写一篇关于这个标签
没有“后来”的意义。您等待的每毫秒是用户有机会将设备移出标签范围的毫秒,此时Tag
对象无用。即使用户稍后将设备移回标签范围,您也会得到一个新的Tag
对象。
根据用户设置,我需要以某种方式“缓存”这个对象。
不是。你只需要通过Tag
来满足任何需求。它是一个Java对象,所以它可以作为参数传递给你需要的方法。它是Parcelable
,所以你甚至没有受到Intent
的限制,因为你可以将Tag
加入Intent
。
连5秒钟都出了问题
是的,只要用户可能是由然后移动他们的设备从标签了。
因为我无法传递Tag对象“around”。
是的,你可以,因为它是一个Java对象 - 请参阅前面的答案。
我需要一个内存缓存仅仅几秒钟
五秒钟,静态数据成员将工作得很好。
但Android不提供任何工具来保持内存缓存
静态数据成员在Android的工作就像在普通的Java静态数据成员。
我的猜测是你担心你的进程被终止。正如本答案的顶部所指出的那样,在您获得Tag
时,您的过程具有前景重要性。直到用户执行某些操作(例如,按HOME)才能将应用程序移动到后台,它不会被终止。您的后台进程有可能会在五秒内终止。但是,如果用户决定离开您的应用程序,这将是一个信号,表示用户不希望您再使用NFC标签。
欢迎您使用服务来尝试增加您的流程在五秒钟内存活的几率。在这一点上,它是远更可能是用户将在这五秒钟内从标签中删除他们的设备,而后台进程将在相同的五秒内终止。个人而言,如果我试图编写使用NFC并且可靠的应用程序,我会立即在收到后立即写入Tag
。延迟意味着应用程序的可靠性将下降,更多的是由于用户操作而不是由于进程被终止。
你的回复是正确的。由于我为其他应用程序编写插件,所以我不能依赖额外的意图,或者至少我可以使用服务作为“临时存储”,因为我需要两个步骤的过程,这是一个漫长的故事:)。然而,我同意你的看法,这是一种黑客行为,NFC安卓管理告诉你:使用前台活动来写! :)谢谢你的回应。 – greywolf82 2015-04-05 15:28:42
@ greywolf82:“因为我为另一个应用程序编写插件” - ick。在那种情况下,是的,我猜静态数据成员方法和你将要获得的一样好。但是,再一次,我担心用户离开标签比我担心流程消失更多。用户很容易感到无聊。 :-)我的答案让我有点不安,但插件场景很少见,并没有超出我的想法。 – CommonsWare 2015-04-05 15:33:53
- 1. 缓存对象
- 2. 访问缓存从缓存中缓存对象
- 3. 缓存UserControl对象
- 4. Java对象缓存
- 5. C++ - 缓存对象
- 6. Jquery对象缓存
- 7. Python对象缓存
- 8. ASP.NET缓存对象
- 9. Android对象缓存
- 10. 使用jQuery缓存,缓存jQuery可排序对象
- 11. 我们应该缓存原始对象还是缓存对象?
- 12. 缓存大量对象的方法(ASP.NET缓存vs静态对象和单独缓存对象vs字典)
- 13. 页面输出缓存存储在ASP.NET缓存对象中吗?
- 14. 存在新对象的缓存策略导致缓存失效
- 15. 缓存不可序列化的对象
- 16. javax.persistence.Query对象是否可以被缓存?
- 17. 对象引用和缓存
- 18. python全局对象缓存
- 19. 缓存反射对象
- 20. PHP的SimpleXML对象缓存
- 21. LINQ到对象缓存?
- 22. ASP.NET MVC3缓存对象
- 23. 迭代缓存对象
- 24. 在Application_AuthenticateRequest中缓存对象
- 25. 了解Neo4j对象缓存
- 26. 做caja.appspot.com缓存cajoled对象
- 27. ASP.NET 4.0对象缓存
- 28. 缓存什么对象?
- 29. DAL层和缓存对象
- 30. Oracle Coherence的缓存对象
你是否真的需要这样一个强大的持续不断的坚持为你的标签对象? :) – agamov 2015-04-05 09:58:02
“因为我想写在这个标签后面” - 人体模型或绑架人质以外,大多数用户会移动。 NFC标签本身将被取出Android设备的范围。即使用户稍后将标签移回范围,结果也将是“标签”的另一个实例。因此,一个'标签'只会对一秒钟左右有用。 – CommonsWare 2015-04-05 10:28:24
@CommonsWare是的,但我不谈论几个小时。即使5秒钟也是一个问题,因为我无法将“标记”对象传递给“周围”。正如我所说我可以使用一项服务,但我没有获得任何服务保留的授权,我可能会丢失标签对象。 – greywolf82 2015-04-05 14:59:52