2012-07-28 57 views
1

我開發了一個Android應用程序。爲了保持用戶登錄,我將他們的用戶名和密碼存儲在擴展Application的類中。如果用戶在不註銷的情況下退出應用程序,則會啓動一個將使用存儲在應用程序上下文中的用戶憑據(用戶名和密碼)的backgound服務。

這對我來說非常好。但現在我已經在我的手機上安裝了Facebook(三星Galaxy Ace)。它有一項佔用37 MB RAM的服務。現在,當我運行我的應用程序的後臺服務。當我玩遊戲時,或者有時甚至當我鎖定屏幕(用戶名和密碼變爲空)時,應用程序級別的變量會被殺死。
發生了什麼?有什麼其他方式來保持用戶登錄?我不想使用sqlite數據庫來存儲用戶名/密碼。您可以輕鬆查看錶格的值。

注意
我仍然有38 MB的可用RAM即使有這個Facebook的運行。我的應用程序只使用544kb的內存。Android中的應用程序級別變量無效

EDIT1
這似乎令人驚訝,但我沒有做我的代碼進行任何更改。但是現在,即使我打開三個或四個應用程序,Apllication變量(用戶名和密碼)仍然存在。在上面的問題中,我說,只要我鎖定屏幕,Application瓦器將變爲空。但是現在,即使玩遊戲時(即另一個應用程序打開!),它們似乎仍然存在。顯然,它不是殺死Application變量的內存限制。
這是什麼原因?什麼決定了殺死應用程序級別的變量?

回答

1

你可以使用SharedPreferences來完成你正在尋找的東西。

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
Editor editor = preferences.getEditor(); 
editor.putBoolean("user_logged_in", true); 
// ... anything else you want 
editor.commit(); 

此外,你也可以做同樣的檢索你的喜好。

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
boolean userLoggedIn = preferences.getBoolean("user_logged_in", false); 

如何確保您的數據安全是故事的另一部分。這些方法適用於沒有固定的設備。並且安全性取決於對憑證進行加密(最好使用非對稱加密算法)。

+0

請參閱edit1。 – Ashwin 2012-07-29 09:52:56

+0

嘗試覆蓋onDestroy()方法並嘗試試用您的應用程序的生命週期。你可能會偶然發現一些線索。 – 2012-07-29 17:36:44

+0

OnDestroy()方法是什麼?就像我說的。在後臺服務啓動之前,所有的活動都會關閉。只是擴展「應用程序」類的變量存在。我如何檢測這些變量的取消或者甚至阻止它? – Ashwin 2012-07-30 05:08:48

0

您只能使用用戶名/密碼加密。在周圍搜索會給你一些示例代碼。如果用戶關閉他的設備,您的應用也會停止。

0

在你的後臺服務OnCreate中,調用setForeground方法可以:

public void onCreate() { 
super.onCreate(); 
... 
this.setForeground(true); 
... 
} 

setForeground方法可以對可以通過系統殺死守護您服務。 我認爲這可以幫助你。^-^

+0

我的後臺服務是一項意向服務。我不包含任何創建方法。而且它運行在一個單獨的線程中。 – Ashwin 2012-07-28 15:41:53

相關問題