2013-07-15 132 views
0

在Android設備上同時運行兩個獨立的應用程序。我們負責App1。以下是將在Android設備上發生的事情:使用SharedPreferences在兩個獨立的Android應用程序之間共享數據

應用1將首先啓動,然後應用2。

App1將顯示包含消息的文件列表。

當應用2開始,它將發送一個「連接」消息,應用1。

App1將允許用戶從列表中選擇一個文件。

當用戶按下了「運行」按鈕時,應用1將開始發送消息每3秒App2的。

App2會在收到每條消息後發回一條消息。

App1將讀取App2發送的每條消息並將其記錄到文件中。

該App1的發送將導致App2的發送斷開回App1的最終消息。

負責App2的組想要使用SharedPreferences來完成所有這些。如果我們這樣做,我們需要使用什麼來確定App2消息何時位於共享首選項中,以便App1可以讀取它?

回答

5

即使共享偏好可能過程之間共享(見@CommonsWare答案..) 那麼它聽起來像你描述的問題是最可憐的設計解決方案。事實上,它聞起來像是個可怕的想法,而且我確定它最終不會起作用!

SharedPreferences是不同的應用程序/進程之間解決通信在Android中,就像是完全忽略所有的Android API,以及核心部件!

SharedPreferences沒有設計成某種過程之間的消息隊列的。 甚至沒有接近!

機器人爲不同的應用程序之間進行通信,並在它們之間共享數據

例如提供更優雅的解決方案:

  • 遠程Service結合(APP1開始其APP2可以綁定到服務)
  • 從某個應用發送廣播到另一個應用時,從另一個應用收到並從其中獲取BroadcastReceiver
  • app1可以實現並公開ContentProvider它可以從app2訪問

還有更多!

我建議你更好地瞭解Android的核心部件(ServiceBroadcastReceiverActivityContentProvider)你得到任何決定如何實現您的應用程序之前。 我無法想象一種方法來創建良好的功能應用程序,而不使用至少3上述。 可以varify與讀出寫在Android開發的第一頁入門指南 - http://developer.android.com/guide/components/fundamentals.html

鏈接:

http://developer.android.com/reference/android/app/Service.html http://developer.android.com/reference/android/content/BroadcastReceiver.html http://developer.android.com/reference/android/content/ContentProvider.html http://developer.android.com/guide/components/bound-services.html

1

的負責應用2組希望使用SharedPreferences來完成這一切

這不是一個很好的主意。引用the documentation for SharedPreferences

注意:目前該類不支持跨多個進程使用。這將在稍後添加。

+0

您的建議是什麼?請記住,這兩個應用程序分開安裝? – user2584082

+0

@ user2584082:我首先要求這些團隊解釋爲什麼用戶需要將這些應用程序設置爲單獨的應用程序,以及爲什麼用戶需要通過嘗試每三秒鐘進行一次通信來持續耗盡電池,這是爲什麼。假設這是可以理解的(可疑),我將使用實際的進程間通信:廣播'Intents',通過'startService()'發送命令給服務等。其他答案列出了許多可能性。 – CommonsWare

+0

@CommonsWare根據Facebook聊天和Facebook應用程序,任何想法如何應用程序共享登錄信息聊天應用程序? 謝謝 – hakim

1

正如塔爾說,這是窮人使用共享偏好在兩個進程間進行通信時,IPC(進程間通信,Android中的Binder)與Service是實現兩個Android進程之間完全控制的更好的解決方案。這裏是關於如何在音樂播放器中使用IPC的example以及它的客戶端。

相關問題