【问题标题】:How can I get current running context in Android?如何在 Android 中获取当前运行上下文?
【发布时间】:2018-12-05 05:56:32
【问题描述】:

我正在尝试在 android 中获取当前运行的上下文,我尝试使用:

<application android:name="com.xyz.MyApplication">

</application>

public class MyApplication extends Application
{
    private static Context context;

    public void onCreate()
    {
        super.onCreate();
        MyApplication.context = getApplicationContext();
    }

    public static Context getAppContext() 
    {
        return MyApplication.context;
    }
}

当我尝试使用MyApplication.getAppContext() 时,它给了我错误

AndroidRuntime(14421): android.view.WindowManager$BadTokenException: 无法添加窗口 -- 令牌 null 不适用于应用程序

【问题讨论】:

  • 您只在创建对象时设置上下文,如果您还没有创建应用程序,静态引用将返回null。
  • “它们不能正常工作”是什么意思?一些错误信息?一些意想不到的行为,你可以解释一下吗?然后有人可以(并且会)帮助你:)

标签: android


【解决方案1】:

这对我有用:

public class MyApplication extends Application {

private static Context mContext;

@Override
public void onCreate() {
    super.onCreate();
    mContext = getApplicationContext();
}
public static Context getContext() {
    return mContext;
}
}

您只需在应用的任何部分调用MyApplication.getContext()

我假设应用程序 XML 标记在 manifest.xml 上

<application
    android:name=".MyApplication"
    android:icon="@drawable/icon"
    android:label="@string/app_name" >

您不需要创建 Application 类的任何实例,它会在您启动应用程序时创建,然后再创建。

【讨论】:

  • 感谢您的回复,但仍然无法正常工作,他们给了我这个错误 AndroidRuntime(14421): android.view.WindowManager$BadTokenException: Unable to add window -- token null 不适用于应用程序
  • 您可以发布您的 manifest.xml 并查看包名和应用程序类名吗?
  • 但是您使用静态上下文造成了内存泄漏?!!
  • “不要将 Android 上下文类放在静态字段中;这是内存泄漏”
【解决方案2】:

如果你想获取Application类的实例,你可以使用它,

MyApplication Obj = ((MyApplication )getApplicationContext());

如果上下文那么getApplicationContext() 本身就足够了。

【讨论】:

    猜你喜欢
    • 2012-07-09
    • 1970-01-01
    • 2023-03-08
    • 2016-12-15
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    相关资源
    最近更新 更多