2017-01-14 29 views
0

我擡頭看着不同的Q & A如何發送數據或什麼是在Android中的活動之間發送數據的最佳方式,但我無法找到有關最如果數據非常敏感,則可以採用安全的方式來執在Android的發送活動之間的數據在Android中的活動之間發送數據的最安全的方式

最佳方式: https://stackoverflow.com/a/4878259/5544859

以下哪種方式是最安全的,高效的發送數據?

+0

是這兩項活動支左右在同一個應用程序和相同的過程? – CommonsWare

+0

我更喜歡Intents –

+0

@CommonsWare是的。這是一個在5個活動之間發送數據的過程,A→B→C→D→E,當我處於活動E時,我將把數據發送到存儲/數據庫。所以,當我在這些活動之間傳輸數據時,我正在尋找安全的東西,因爲它是敏感數據。 –

回答

2

將數據放入Intent將是最不安全的,因爲數據由IPC從您的進程發送到核心OS進程,然後通過另一個IPC調用返回到您的進程。在現代版本的Android上,我知道這個—沒有安全問題,其他應用程序不能監視該IPC或以其他方式獲取該數據。然而,在其他條件相同的情況下,始終保持敏感數據在您的流程中比在流程外傳遞數據更安全。

引用的「持久對象(sqlite,共享首選項,文件等)」不是在組件之間傳遞數據的方式。這是長期使用數據的一種方式。現在,大多數應用程序都需要這種持久性,因此您可能會因爲其他原因而持久化並簡單地利用它(例如,A觸發器寫入數據; E讀取該數據)。但是,從效率的角度來看,磁盤I/O速度很慢,所以當您需要持久性而不是數據傳遞時,您就可以做到這一點。 儘管如此,通過持久化,我們維護某種內存緩存,以最大限度地減少磁盤I/O。這涉及靜態字段和WeakReferences,Stack Overflow答案中引用的另一個選項。

即興,知道也不關心你的應用程序:

  • 如果這些敏感數據應該堅持,那麼就堅持它,使用緩存,並得到E獲取從緩存或持久數據存儲

  • 如果這些敏感數據不應該堅持,但它是大的,它可以再次獲得性(例如,通過網絡I/O),使用靜態字段和WeakReference它高速緩存,所以你不打領帶無限期地堆起堆空間

  • 如果這些敏感數據不應該堅持,而無論是不是很大或不能輕易使用靜態字段緩存再次收購,所以只要你的進程確實

+0

數據需要在活動「E」後才能被持久化,因爲應用程序的確從活動「A」收集信息一直到活動「E」(同時經歷B,C和D)。 –

+0

我相信我有兩個選擇:1)在從A到E時保持數據,然後檢索E中的所有數據並將其發送到服務器,或者2)將數據從A傳遞到E,然後將其保存在活動E中,並且發送給服務器。如果有任何區別,這兩個選項中的哪一個更安全? –

+0

@RedaM:「我相信我有兩個選擇」 - 可能我會用一個嚮導UI隱喻將它變成一個活動,而不是五個。除此之外,你可以在我的答案中列出選項。 「如果有任何區別,這兩個選項哪一個更安全?「 - 只要您沒有將數據傳遞到您的流程之外,安全性就是相同的。 – CommonsWare

相關問題