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