我有一個類需要獲得對其應用程序AssetManager
的引用。這個類不擴展任何類型的UI類,所以它沒有getContext()
方法或類似的東西。有沒有某種靜態的Context.getCurrentApplicationContext()
類型的方法?如何獲取AssetManager而不參考上下文?
澄清:我的課程旨在用作圖書館,用於其他應用程序。它沒有關聯AndroidManifest.xml
或控制調用它的上下文。
我有一個類需要獲得對其應用程序AssetManager
的引用。這個類不擴展任何類型的UI類,所以它沒有getContext()
方法或類似的東西。有沒有某種靜態的Context.getCurrentApplicationContext()
類型的方法?如何獲取AssetManager而不參考上下文?
澄清:我的課程旨在用作圖書館,用於其他應用程序。它沒有關聯AndroidManifest.xml
或控制調用它的上下文。
Application
一個子類,例如public class App extends Application {
AndroidManifest.xml
您<application>
標籤的android:name
屬性指向你的新類,例如android:name=".App"
onCreate()
方法,你的情況下(例如this
)保存到一個名爲app
一個靜態字段,並創建一個返回該領域的靜態方法,例如getApp()
:這是它應該如何看:
public class App extends Application{
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
}
public static Context getContext(){
return mContext;
}
}
現在你可以使用:App.getContext()
每當你想獲得一個上下文,然後getAssetManager()
(或App.getContext().getAssetManager()
)。
我不確定OP問題的最佳答案。不過,我不知道你有使用靜態上下文時要非常小心,建議在Android developer resources:
在您的應用程序實例的
onCreate()
方法(例如本)保存上下文靜態字段命名的應用並創建一個返回該字段的靜態方法,例如getApp()
:
使用靜態上下文可能泄漏到泄漏的內存問題,特別是如果靜態上下文用於引用視圖。
在Cristian的回答中,這個問題是針對應用程序實例本身的,這正是存儲在mContext中的內容。應用程序實例的壽命與您的應用程序相同;沒有什麼可以「泄漏」。 **如果需要訪問用戶界面,關注確實變得非常重要**;在這種情況下,一個'Activity'將作爲上下文傳入,並且讓該活動在onPause和onDestroy中另外調用「取消註冊」本身很重要。當需要活動上下文時,請參閱http://stackoverflow.com/a/13994622/199364瞭解這種技術。 'static WeakReference
爲了澄清,我的課程旨在用於像其他應用程序一樣的庫。它沒有關聯的AndroidManifest.xml。 – ab11 2010-12-10 17:42:36
在這種情況下,在應用程序中創建資產管理器並將其傳遞給庫(通過方法或構造函數)。 – Cristian 2010-12-10 18:33:25
看到我打算讓圖書館在其應用程序中被其他開發人員使用,我希望能有一種替代方法來要求他們手動設置資產管理器。 – ab11 2010-12-10 19:14:56