2015-09-16 38 views
2

我想編寫兩個Android應用程序,它們在單個文本文件上工作。兩個應用程序之間的相互排斥

第一個應用程序(應用)的任務 -

A.檢查文本文件「的abc.txt」是否出現在SD卡的根目錄。 B.如果不存在,則在sdcard的根目錄下創建「abc.txt」。

C.每5分鐘後定期將數據寫入abc.txt。

第二個應用程序(應用)的任務 -

A.檢查文本文件「的abc.txt」是否出現在SD卡的根目錄。

B.如果存在,讀取所有從文件「的abc.txt」,後讀數據,刪除它

現在我可以通過讀取和寫入「的abc.txt」獨立每個應用程序,但我面臨的同步問題。我想確保,如果第一個應用程序正在寫入文本文件,第二個文件必須等待文本文件準備好讀取。我會用

synchronized 

關鍵字它是一個單一的應用程序。有人可以幫助我在這種情況下?

+0

雖然有點太寬泛,但我會給你一些想法:你明顯需要一個外部同步機制。怎麼樣_locking file_ - 例如「abc.txt.lock」?這兩個應用程序都應該在完成工作時創建這樣的文件,然後再刪除它。這兩個應用程序也應該檢查該文件的存在。 – Seelenvirtuose

+0

@darthvading:請從Kathy Sierra的scjp書中查看'Synchronizing Code(Objective 4.3)'。你會發現在哪裏使用Synchronized word .. !! – AndiGeeky

+0

@darthvading:檢查這一個:http://firozstar.tripod.com/_darksiderg.pdf。 – AndiGeeky

回答

0

FileLock應該提供您需要的功能。您可以鎖定abc.txt,也可以鎖定其他文件,該文件始終存在,並且僅用作應用程序的系統範圍鎖定。

從DOC:

多個進程可以保持上的文件的相同區域共享鎖,但是隻有一個單一的過程可在一個文件的給定區域,沒有其他持有的排他鎖進程可以同時持有與獨佔鎖重疊的共享鎖。

您可以從FileChannel獲得對整個文件的獨佔FileLock