我可以依靠聲明應用程序的Context
在應用程序的生命週期中沒有改變嗎?如果我在某處使用單身模式存儲context
,然後在需要的地方使用,該怎麼辦?在應用程序生命週期中可以更改應用程序上下文嗎?
回答
先回答你的第二個問題:如果你需要存儲在一個單獨的一些狀態,那麼你可以使用Android Application
類和你Application
成爲你單身(它也是一個Context
)。沒有必要存儲它。
關於第一個問題,至於是否Context
可以在運行時改變:排序相關your other question,我認爲我們可以明白這一點通過查看ContextWrapper.attachBaseContext
:
protected void attachBaseContext(Context base) {
if (mBase != null) {
throw new IllegalStateException("Base context already set");
}
mBase = base;
}
所以,是的,你可以依靠它;它不能改變,如果你嘗試,它會拋出一個IllegalStateException
。
如果應用程序因某種原因被殺害會是什麼情況? – Eugene 2012-08-22 20:42:35
如果應用程序被殺害,你無法做任何事情,因爲你也被殺了。您是否需要在停止並重新啓動的應用程序中保存數據?你想使用共享首選項。 – 2012-08-22 21:01:54
Android Application
class IS是您的單例,用於存儲應通過應用程序生命週期階段進行跟蹤的信息。您可以在手冊中說明這個類的描述 - http://developer.android.com/reference/android/app/Application.html
在應用程序類中是android應用程序的單一應用程序級別類。我的回答是,你不能改變應用程序上下文對象。
圍繞這個話題有一些爭議。甚至有一部分來自谷歌的人。 我堅持我認爲是正確的方法,它基本上儘可能多地獲取活動環境。原因在於,上下文的重點是爲應用程序的某些資源/部分提供正在工作的環境。您給系統的信息越準確,意想不到的行爲就會發生(例如:您只需訪問活動上下文範圍內的一些資源,並從應用上下文中獲得一些途徑)。
請記住,活動是一個上下文,所以如果你在一個活動中傳遞「this」將會使這個工作成爲可能,或者如果你的代碼在一個片段中工作,那麼傳遞「getActivity()」。 .com。使用自己的Application類作爲Singleton非常有用,因爲您可以輕鬆管理應用程序的生命週期並將其用作適當的中間點。再一次,獲取appContext足以調用getApplicationContext或甚至你的應用程序單例類的實例。
應用程序是一個單身人士,我不知道如何繞過這一點,而不需要改變核心。
但是,如果您的代碼啓動另一個進程,則可能會遇到2個Application對象的實例。一個例子是啓動遠程服務;這將創建另一個將創建它自己的應用程序對象實例的進程。
http://developer.android.com/reference/android/app/Service.html#RemoteMessengerServiceSample
爲了避免必須將遠程服務和使用的Parcelable或序列化機器人選項之一的應用程序的其餘部分之間進行通信混亂:
消息 - 意圖putExtra
處理程序 意圖包或創建一個自己的
- 1. Android上應用程序生命週期的上下文可用性
- 2. ASP.NET應用程序生命週期 - 非頁面生命週期
- 3. 播放應用程序生命週期
- 4. WP7應用程序生命週期
- 5. Tomcat應用程序生命週期
- 6. Ruby Web應用程序生命週期
- 7. Asp.NET Global.asax - 應用程序生命週期
- 8. iphone應用程序的生命週期?
- 9. 應用程序生命週期問題
- 10. 在應用程序生命週期的早期調用getPackageName()
- 11. 在Android應用程序中使用生命週期方法
- 12. 在應用程序生命週期中重用InputSource
- 13. 修改Android應用程序生命週期
- 14. Symbian應用程序生命週期:應用程序永遠不會被殺死?
- 15. Openshift應用程序生命週期事件 - 應用程序創建事件?
- 16. 安卓應用程序生命週期和/或應用程序終止儲值
- 17. dispatch_once每個應用程序的負載或應用程序的生命週期?
- 18. 應用程序的生命週期:如何管理更新
- 19. 當我們刷新應用程序上下文時的Spring生命週期
- 20. 在ios應用程序的生命週期中存儲變量
- 21. 在應用程序生命週期中何處刪除委託?
- 22. Alamofire在應用程序生命週期中阻止請求
- 23. 使用除主線程以外的應用程序生命週期線程
- 24. Spring bean和應用程序生命週期中更改bean參數
- 25. Android工作線程和應用程序生命週期
- 26. Android應用程序/進程的生命週期?
- 27. ASP .NET應用程序生命週期+ Singleton實例壽命
- 28. 我可以在iTunes中更改應用程序狀態嗎?
- 29. Struts2中應用程序的ValueStack生命週期是什麼?
- 30. Web應用程序中Hibernate對象的典型生命週期 - ?
也許這可能會有所幫助:http://stackoverflow.com/questions/708012/android-how-to-declare-全局變量/ 4642069#4642069 – 2012-07-15 09:04:14
爲什麼你需要存儲上下文?您可以隨時通過調用getApplicationContext() – Yury 2012-07-22 15:04:21
@Yury獲取它:不是來自非活動或應用程序類。 – 2016-02-08 15:24:48