我正在设计一个在Android.When上使用NFC的应用程序--一个标签被读取,系统将一个Tag
对象发送给一个活动。Tag
对象是Parcelable
对象。因为我想稍后根据用户设置在这个标签上编写,所以我需要以某种方式“缓存”这个对象。我想以后即使使用粘性广播来检索它,但从Lollipop开始,推荐使用粘性广播。另一种选择是在磁盘上保存,但正如docs所言,保存Parcelable
不是件好事。如果我在文件中缓存对象,用户更改android版本,标记对象不同,那么就可能发生崩溃,那么问题就会发生。我只需要一个内存缓存,但在我看来,没有办法强迫Android保存内存缓存,我可以使用一个粘稠的服务,但是Android可以随时杀死我的服务。这种情况下最好的方法是什么?
发布于 2015-04-05 15:19:50
当读取标记时,系统将标记对象发送给活动。
对,是这样。在这一点上,这个活动和你的过程,在前景中。我们稍后再谈这个问题。
因为我想在后面的标签上写
没有“以后”的意义。您等待的每毫秒都是用户有机会将设备移出标记范围的毫秒,此时Tag
对象是无用的。即使用户稍后将设备移回标记的范围,您也会得到一个新的Tag
对象。
根据用户设置,我需要以某种方式“缓存”这个对象。
不怎么有意思。您只需要将Tag
传递给任何需要它的人。它是一个Java对象,因此它可以作为参数传递给您需要的方法。它是Parcelable
,所以您甚至不受Intent
障碍的限制,因为您可以将Tag
附加到Intent
中。
即使是5秒也是个问题
是的,因为那时用户可能已经将他们的设备从标签移开了。
因为我不能传递标记对象“四处”。
是的,您可以,因为它是一个Java对象--请参阅前面的答案。
我只需要几秒钟的内存缓存
在5秒内,静态数据成员将正常工作。
但是Android没有提供任何工具来保存内存缓存
Android中的静态数据成员就像普通Java中的静态数据成员一样工作。
我猜你担心你的过程会被终止。正如在这个答案的顶部所指出的,当您获得Tag
时,您的流程具有重要的前景。它不会被终止,直到用户做一些事情(例如,按下主页)将您的应用程序移到后台。您的后台进程有可能在5秒内终止。然而,如果用户决定离开您的应用程序,这将是一个信号,用户不想让您干扰NFC标记。
我们欢迎您使用服务来增加您的进程存活5秒的几率。此时,更有可能是用户在这5秒内从标记中删除了他们的设备,而不是在相同的5秒内结束您的后台进程。
就我个人而言,如果我试图编写一个使用NFC的应用程序,并且它是可靠的,我会在接收到Tag
后立即写信给。延迟意味着可能应用程序的可靠性会下降,更多的原因是用户的操作,而不是进程被终止。
https://stackoverflow.com/questions/29455881
复制相似问题