View.getContext返回null,为什么?

Hug*_*sse 3 android android-lifecycle android-view

我正在使用带有javascript界面​​的 WebView,有时当我loadUrl在webView上调用时,mWebView.getContext()返回null.

  1. 视图怎么没有Context?为什么?
  2. 视图whitout上下文是否仍在使用或可重用?
  3. 当我的观点没有背景时,我该怎么办?
  4. 最重要的是,如果视图没有上下文,会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:...");
            }
        });
    }
    
    Run Code Online (Sandbox Code Playgroud)

zna*_*nat 11

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

  • 您正试图在异步(处理程序,网络调用)调用的回调中获取上下文,但由于用户的另一个操作(例如:已按下),活动/片段已消失.因此视图被分离并且不再具有上下文.

  • 您在某处有内存泄漏,并且您的活动和视图层次结构有两个或更多实例.然后在你不再引用的实例中发生了某些事情,但是视图已经失去了与其上下文的链接.

关于处理程序.我不确定视图是否有自己的处理程序,或者如果它使用它附加的Activity的处理程序,你可能必须阅读源代码才能找到.然而问题并不是真正相关:如果视图没有上下文,则会出现更大的问题:它不在屏幕上.

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

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

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