2011-08-03 27 views
1

我的啓動活動啓動了其啓動設置爲單個實例的另一活動。在這第二項活動中,我有一個公開的方法。然後我開始第三項活動,該活動需要在第二項活動中訪問公共方法。我不想使用startActivity並傳遞額外信息,因爲我認爲onCreate會被調用(或者我錯了嗎?),我需要避免第二個活動重新初始化自己。Android:從另一活動的訪問方法

當使用startActivit y開始活動時,是否有可能獲取對底層類實例本身的訪問權限並且只需調用該方法?

回答

3

我真的想出了一個簡單的解決方案。事實上,您可以訪問活動的基礎類。首先,創建一個用於保存活動2的公共靜態引用的類。創建活動2時,在其onCreate方法中,將「this」存儲在靜態引用中。活動2實現了一個接口,其中包含您希望可用於任何其他活動或對象的方法。你所持有的靜態引用將是該接口的數據類型。當另一個活動想要在此活動中調用方法時,它只會訪問公共靜態引用並調用該方法。這不是黑客攻擊,而是Java運行的內在因素,是完全合法的。

+1

我可能是錯的,但這似乎是你會通過這樣做導致上下文泄漏。 –

0

無法直接訪問使用startActivity開始的活動對象(無需使用某些黑客)。坦率地說,你甚至不應該試圖完成這個。

一個Activity組件可以在活動時循環通過幾個Activity java對象。例如,當用戶旋轉屏幕時,丟棄舊對象並創建新的活動對象。但這仍然是一個Activity組件。

根據我的經驗,當你需要做你描述的事情時,你的架構出了問題。您或者應該將部分活動的職責轉移到服務或ContentProvider,或者使用Intents等。在不知道更多細節的情況下,很難推薦任何更具體的內容。

1

這不是一個好主意。 正如我可以理解的方法從第二個活動實際上沒有連接到特定的活動,而你想從另一個調用它。所以把這個方法運用到其他(非活動)類(也許是靜態方法)並在兩個活動中使用它。

0

不,沒有辦法通過startActivity()傳遞引用,但是您可以使用某種共享內存來繼續引用您的活動。這可能是一個糟糕的設計。然而,傳遞額外的Intent不會導致onCreate,這與生命週期完全相關。

相關問題