我正在使用带有javascript接口的webview,有时当我在webview上调用loadUrl
时,mWebView.getContext()
返回null
。
一个视图怎么可能没有上下文?为什么?
没有上下文的视图是否仍在使用或可重用?
当我的观点没有背景时,我该怎么办?
最重要的是,如果视图没有上下文,是否会执行mWebView.post(new Runnable() { ...
?
这个代码相关吗?
if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
mWebView.loadUrl("javascript:...");
} else {
mWebView.post(new Runnable() {
public void run() {
mWebView.loadUrl("javascript:...");
}
});
}
最佳答案
视图空上下文的两个常见原因:
您试图在异步(处理程序、网络调用)调用的回调中获取上下文,但由于用户的另一个操作(例如:按下back),活动/片段已消失。因此,视图是分离的,不再有上下文。
您的活动和视图层次结构的某个地方存在内存泄漏以及两个或多个实例。然后在你不再引用的实例中发生了一些事情,但是视图失去了与上下文的链接。
关于处理者。
我不确定视图是否有自己的处理程序,或者是否使用了它所附加到的活动的处理程序,您可能需要阅读源代码才能找到答案。然而,这个问题并不真正相关:如果视图没有上下文,那么您就有一个更大的问题:它不在屏幕上。
关于代码是否在5。是相关的,你需要回答这个问题:为什么你不知道你的代码在哪个线程上运行?
当您知道自己在哪个线程上,并且如果不在主线程上是有意义的,那么使用处理程序是在主线程上执行代码的有效方法。以及activity.runonuithread()
请记住,处理程序的生命周期与活动没有关联。因此,当活动/片段暂停时,应该清除消息队列和runnable