我需要鎖定從三個不同的Android應用程序讀取和寫入的文本文件...如此不同的進程。Android FileLock ...如何鎖定來自不同進程的文件
當我試圖在讀取文件時寫入和鎖定(0L,Long.MAX_VALUE,true)(共享)時使用通道鎖定()(獨佔模式)。
不幸的是,這種方法不起作用...當書寫鎖還沒有被釋放時,也一直在讀取鎖。
是否有合適的工作示例來解決此問題? 我做錯了什麼?
我需要鎖定從三個不同的Android應用程序讀取和寫入的文本文件...如此不同的進程。Android FileLock ...如何鎖定來自不同進程的文件
當我試圖在讀取文件時寫入和鎖定(0L,Long.MAX_VALUE,true)(共享)時使用通道鎖定()(獨佔模式)。
不幸的是,這種方法不起作用...當書寫鎖還沒有被釋放時,也一直在讀取鎖。
是否有合適的工作示例來解決此問題? 我做錯了什麼?
終於我解決了! FileLocks沒問題......我的問題是,我正在使用storeToXml寫入一個xml文件,可能會創建一個全新的文件...所以會創建新的文件描述符,並且鎖定屬性可能會丟失。 現在我鎖定了另一個虛擬文件,而不是正在讀取和寫入的文件,並且所有內容都按預期工作。
你會發布一些代碼來顯示兩種情況(文件描述符丟失,不丟失),以便我們可以學習? –
對於我現在很難進入那個舊代碼......我唯一能告訴你的是,我最終沒有鎖定我正在編寫的文件,而只是使用與鎖文件不同的空文件。所以我確信沒有人觸摸或修改它,直到鎖定被釋放。 – mrAlmond
「我做錯了什麼?」 - 您試圖讓三個獨立的應用程序同時使用相同的文本文件。就我而言,這就是那裏的「有問題」。 – CommonsWare
文件鎖應該在那裏解決這類問題。我不認爲三個併發訪問同一個文件的應用程序被認爲是錯誤的。順便說一句你有什麼建議嗎? – mrAlmond
「我不認爲三個併發訪問同一個文件的應用程序會被認爲是錯誤的」 - 當然歡迎您的意見。 「你有什麼建議嗎?」 - 當然。有一個應用程序擁有數據。讓另外兩個應用程序通過內置在Android中的任何可用IPC機制(例如內容提供者,遠程服務(命令或綁定模式)和廣播)與第一個應用程序進行通信。 – CommonsWare