我正在設計一個在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. C++ - 緩存對象
- 3. ASP.NET緩存對象
- 4. Jquery對象緩存
- 5. 緩存UserControl對象
- 6. 我們應該緩存原始對象還是緩存對象?
- 7. 存在新對象的緩存策略導致緩存失效
- 8. 頁面輸出緩存存儲在ASP.NET緩存對象中嗎?
- 9. 緩存不可序列化的對象
- 10. javax.persistence.Query對象是否可以被緩存?
- 11. LINQ到對象緩存?
- 12. ASP.NET緩存對象讀寫
- 13. ASP.NET MVC3緩存對象
- 14. 對象引用和緩存
- 15. 迭代緩存對象
- 16. 緩存DAL返回對象?
- 17. 緩存一個302MB對象
- 18. 緩存什麼對象?
- 19. 在Application_AuthenticateRequest中緩存對象
- 20. 瞭解Neo4j對象緩存
- 21. 做caja.appspot.com緩存cajoled對象
- 22. python全局對象緩存
- 23. DAL層和緩存對象
- 24. ASP.NET 4.0對象緩存
- 25. Spring緩存框架可以用來緩存不可序列化的對象嗎?
- 26. Asp.Net緩存,修改緩存中的對象,並更改緩存的值
- 27. 建議的內存對象緩存.NET
- 28. ASP.NET輸出緩存vs ASP.NET對象緩存
- 29. 魷魚 - 我可以使用url清除squid緩存中的緩存對象嗎?
- 30. 可可和緩存
你是否真的需要這樣一個強大的持續不斷的堅持爲你的標籤對象? :) – 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