亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Android中的單身漢與應用上下文?

Android中的單身漢與應用上下文?

元芳怎么了 2019-06-18 15:50:00
Android中的單身漢與應用上下文?回顧這一點后列舉使用單子的幾個問題看過幾個使用單例模式的Android應用程序的例子后,我想知道使用單例而不是通過全局應用程序狀態共享的單個實例(子類為android.os.Application并通過context.getApplication()獲得它)是否是個好主意。這兩種機制有哪些優點/缺點?老實說,我希望在這篇文章中得到同樣的答案。單例模式與Web應用程序,不是一個好主意!但適用于安卓系統。我說對了嗎?否則,DalvikVM有什么不同?編輯:我想就以下幾個方面發表意見:同步可重用性測試
查看完整描述

3 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

我非常不同意戴安·哈克伯恩的回答。我們一點地從我們的項目中移除所有的單點對象,以支持輕量級的、任務范圍的對象,當您實際需要它們時,這些對象可以很容易地重新創建。

單節點是測試的噩夢,如果初始化延遲,將引入“國家不確定性”具有微妙的副作用(當將調用轉移到getInstance()從一個范圍到另一個范圍)。可見性被提到了另一個問題,因為單例意味著“全局”(=隨機)訪問共享狀態時,當并發應用程序中不正確同步時,可能會出現微妙的bug。

我認為這是一種反模式,這是一種糟糕的面向對象的風格,本質上相當于維護全球狀態。

回到你的問題上:

雖然應用程序上下文可以被認為是單例,但它是由框架管理的,并且有一個很好的定義。生命周期、范圍和訪問路徑。因此,我認為,如果你真的需要管理應用-全球狀態,它應該去這里,沒有其他地方。再考慮一下真的需要一個單例對象,或者也可以重寫您的單例類來實例化執行手頭任務的小的、短命的對象。


查看完整回答
反對 回復 2019-06-18
?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

我非常推薦單身人士。如果您有一個需要上下文的單例,請具有:

MySingleton.getInstance(Context c) {
    //
    // ... needing to create ...
    sInstance = new MySingleton(c.getApplicationContext());}

我更喜歡單身漢而不是應用程序,因為它有助于保持應用程序更有組織性和模塊化-而不是有一個需要維護整個應用程序的全球狀態的地方,每個單獨的部分都可以自己處理。另外,在Application.onCreate()中,單例延遲初始化(應請求)而不是引導您執行所有初始化的路徑也是好的。

使用單子沒有本質上的錯誤。只要正確地使用它們,當它有意義的時候。Android框架實際上有很多,因為它可以維護每個進程緩存的加載資源和其他類似的東西。

對于簡單的應用程序,多線程不會成為單線程的問題,因為通過設計,對應用程序的所有標準回調都被分派到進程的主線程上,所以除非通過線程顯式地引入多線程,或者通過將內容提供程序或服務IBinder發布到其他進程,否則不會發生多線程。

想想你在做什么就行了。*)


查看完整回答
反對 回復 2019-06-18
?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

來自:開發人員>參考-應用程序

通常不需要子類應用程序。在大多數情況下,靜態單節點可以更模塊化的方式提供相同的功能。如果您的單例需要全局上下文(例如注冊廣播接收器),那么檢索它的函數可以在第一次構造單例時在內部使用Context.getApplicationContext()。


查看完整回答
反對 回復 2019-06-18
  • 3 回答
  • 0 關注
  • 472 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號