在Android中获取应用程序上下文到静态方法的最佳方法

我正在开发一个有几个活动的Android应用程序。 其中我有一个类与几个静态方法。 我希望能够从不同的活动中调用这些方法。 我正在使用静态方法通过XmlResourceParser从XML文件加载数据。 创build一个XmlResourceParser需要在应用程序上下文上调用。 所以我的问题是,什么是最好的方式来获得对静态方法的应用程序上下文的引用? 让每个活动得到它并通过它? 以某种方式将其存储在全局variables中?

  • 为什么ContextThemeWrapper现在仅限于支持库组?
  • 从不扩展Activity的类的startService
  • 我是否真的需要将Context实例深入到应用程序中?
  • 在android中添加上下文菜单图标
  • 传递上下文作为DialogFragment的参数
  • 如何跨两个不同的android应用程序共享SharedPreferences文件?
  • 匕首2注入Android上下文
  • Android应用程序上下文是否被破坏?
  • 更好的方法是将Activity对象作为parameter passing给静态函数。

    AFAIK,没有这样的方法会给你静态方法中的应用上下文。

    我不知道这会一直工作,但现在对我有用:

    public class myActivity extends ListActivity { public static Context baseContext; public void onCreate(Bundle savedInstanceState) { baseContext = getBaseContext(); } 

    那么你可以使用你的包中的静态:

     myApplication.baseContext 

    在“疯狂世界”的博客中有一篇post提供了一个答案。 它说,你可以用你自己的子类来replaceApplication对象,然后静态地保持应用程序的上下文。 你可以在post中find示例代码。

    原来的博客文章 – http://uquery.blogspot.co.il/2011/08/how-to-get-application-context.html

    这应该让你从任何地方访问applicationContext ,让你可以在任何地方使用applicationContextToastgetString()sharedPreferences等。我已经使用这个来获取多个静态方法中的applicationContext

    单身人士:

     package com.domain.packagename; import android.content.Context; /** * Created by Versa on 10.09.15. */ public class ApplicationContextSingleton { private static PrefsContextSingleton mInstance; private Context context; public static ApplicationContextSingleton getInstance() { if (mInstance == null) mInstance = getSync(); return mInstance; } private static synchronized ApplicationContextSingleton getSync() { if (mInstance == null) mInstance = new PrefsContextSingleton(); return mInstance; } public void initialize(Context context) { this.context = context; } public Context getApplicationContext() { return context; } } 

    Application子类中初始化Singleton:

     package com.domain.packagename; import android.app.Application; /** * Created by Versa on 25.08.15. */ public class mApplication extends Application { @Override public void onCreate() { super.onCreate(); ApplicationContextSingleton.getInstance().initialize(this); } } 

    如果我没有错,这会给你一个到applicationContext的钩子,用ApplicationContextSingleton.getInstance.getApplicationContext();调用它ApplicationContextSingleton.getInstance.getApplicationContext(); 你不需要在任何时候清楚这一点,因为当申请closures时,无论如何都是这样。

    记得要更新AndroidManifest.xml来使用这个Application子类:

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.domain.packagename" > <application android:allowBackup="true" android:name=".mApplication" <!-- This is the important line --> android:label="@string/app_name" android:theme="@style/AppTheme" android:icon="@drawable/app_icon" > 

    如果您在这里发现任何问题,请告诉我,谢谢。 🙂