首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >View.getContext返回null,为什么?

View.getContext返回null,为什么?
EN

Stack Overflow用户
提问于 2015-09-08 13:35:36
回答 1查看 6.1K关注 0票数 3

我使用webView和javascript接口,有时当我在WebView上调用loadUrl时,mWebView.getContext()返回null

  1. 一个视图怎么可能没有上下文呢?为什么?
  2. 视图白化上下文是否仍然使用或可重用?
  3. 当我的观点没有背景的时候,我该怎么办?
  4. 最重要的,如果视图没有上下文,mWebView.post(new Runnable() { ...会被执行吗?
  5. 这段代码相关吗? if (Looper.getMainLooper().getThread() == Thread.currentThread()) {mWebView.loadUrl(“javascript:.”);}mWebView.loadUrl{mWebView.post(新的Runnable() { public void (){mWebView.loadUrl(“javascript:.”);});}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-08 13:45:10

[2]空上下文到视图的常见原因:

  • 您试图在异步(处理程序,网络调用)调用的回调中获取上下文,但是由于用户的另一个操作(例如:按回),活动/片段消失了。因此,视图是独立的,不再有上下文。
  • 您的某个地方有内存泄漏,您的活动和视图层次结构有两个或多个实例。然后,在您不再引用的实例中发生了一些事情,但是视图已经失去了与其上下文的链接。

关于处理程序的。我不确定视图是否有自己的处理程序,或者它是否使用它所附加的活动的处理程序,您可能需要阅读源代码才能找到答案。然而,这个问题并不真正相关:如果视图没有上下文,那么您有一个更大的问题:它不在屏幕上。

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

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

请记住,Handler的生命周期与活动无关。因此,当您的活动/片段暂停时,您应该清除消息队列和运行程序。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32459297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档