1

我正在構建一個具有一些功能的Android庫,供第三方應用程序使用。在我的庫中,我需要訪問網絡相關的東西,並且需要訪問Context.getSystemService()來獲取ConnectivityManager。對於例如 -在沒有活動或上下文的庫內訪問ConnectivityManager

ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));

的問題是,我沒有一個活動類,從中獲取上下文。所以2個問題 -

  1. 有沒有辦法獲得我的庫方法被調用的活動的上下文?
  2. 請問應用程序(調用我的庫)是否將應用程序的活動上下文傳遞給第三方庫是一種很好的做法?

謝謝!

+0

在構造函數或方法參數 –

+0

中傳遞'context'它不一定是一個活動。您也可以傳入應用程序上下文。 SO可能在您的庫初始化中,如果您使用應用程序上下文,那麼請利用 – ifiok

+0

difyzz - 它是否仍需要由調用應用程序傳遞?還是我可以在我的課堂內得到它? – snakepitbean

回答

1

理想情況下,您不應該傳遞上下文來檢索資源。您應該自己傳遞資源(在這種情況下爲ConnectivityManager)。如果這是不切實際的(因爲您需要多個資源,或者您需要不時重新加載它們),或者資源本身與Context的生命週期相關聯,並且應用程序上下文無用,那麼您應該傳遞上下文,但也應該如果需要,可以擦除參考,這樣可以避免泄漏和崩潰。例如,添加一個setContext(Context context)方法,並在離開活動時將上下文設置爲null。不完全漂亮,但鑑於你不控制用戶的行爲,這是最安全的選擇。一個類似的選擇是刪除庫對象引用,但是這不會阻止你的庫在GC的下一次掃描之前可以使用上下文進行的任何操作。請記住,即使您的圖書館在主線程中運行,您的應用程序也可以隨時發送到後臺。

相關問題