我正在使用带有 javascript 接口(interface) 的 WebView,有时当我在 webView 上调用 loadUrl
时,mWebView.getContext()
返回 空
。
- View 怎么可能没有上下文?为什么?
- 没有上下文的 View 是否仍在使用或可重用?
- 当我的 View 没有上下文时我该怎么办?
- 最重要的,如果 View 没有上下文,
mWebView.post(new Runnable() { ...
会被执行吗? 这段代码是否相关?
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/