gpt4 book ai didi

android - View.getContext 返回 null,为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:53 26 4
gpt4 key购买 nike

我正在使用带有 javascript 接口(interface) 的 WebView,有时当我在 webView 上调用 loadUrl 时,mWebView.getContext() 返回

  1. View 怎么可能没有上下文?为什么?
  2. 没有上下文的 View 是否仍在使用或可重用?
  3. 当我的 View 没有上下文时我该怎么办?
  4. 最重要的,如果 View 没有上下文,mWebView.post(new Runnable() { ... 会被执行吗?
  5. 这段代码是否相关?

    if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
    mWebView.loadUrl("javascript:...");
    } else {
    mWebView.post(new Runnable() {
    public void run() {
    mWebView.loadUrl("javascript:...");
    }
    });
    }

最佳答案

View 空上下文的 2 个常见原因:

  • 您正尝试在异步(处理程序、网络调用)调用的回调中获取上下文,但由于用户的另一个操作(例如:按下), Activity/fragment 消失了。因此, View 是分离的并且不再有上下文。

  • 您的某处存在内存泄漏,并且您的 Activity 和 View 层次结构有两个或多个实例。然后在您不再引用但 View 失去与其上下文的链接的实例中发生了一些事情。

关于处理程序。我不确定 View 是否有自己的处理程序,或者它是否使用它所附加的 Activity 的处理程序,您可能必须阅读源代码才能找到答案。然而,这个问题并不真正相关:如果 View 没有上下文,你就会遇到更大的问题:它不在屏幕上。

关于 5. 中的代码是否相关,您需要回答以下问题:为什么您不知道您的代码在哪个线程上运行?

当您知道自己在哪个线程上,并且如果不在主线程上对您来说有意义,那么使用处理程序是在主线程上执行代码的有效方法。以及 Activity.runOnUiThread()

请记住,处理程序的生命周期与 Activity 无关。因此,当您的 Activity/fragment 暂停时,您应该清除消息队列和可运行对象

关于android - View.getContext 返回 null,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32459297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com