编程语言
首页 > 编程语言> > java – 如何传递或分配在runOnUiThread中获取的值

java – 如何传递或分配在runOnUiThread中获取的值

作者:互联网

在WebView的子类中,我在getTitle()的重写方法中有这个:

      @Override
      public String getTitle() {
        Activity a = getVoTts().getActivity();
        a.runOnUiThread(new Runnable() {
            public void run() { 
                String tit = VoWebView.super.getTitle();
            }
        });


       String title = tit;  // this is what I WANT to do, it won't compile of course
       ...
       ...
      }

但是String tit在一个匿名的Runnable类中关闭,因此当然无法访问该方法.

是否有任何技术或“技巧”允许我将匿名Runnable类中获得的值传递给行中的语句(在同一方法中)或将其分配给数据成员?

解决方法:

一种方法是声明一个实例字段并在整个类中使用它.例如:

private String someText;

// ...

@Override
public String getTitle()
{
    Activity a = getVoTts().getActivity();
    a.runOnUiThread(new Runnable()
    {
        public void run()
        {  
            someText = VoWebView.super.getTitle();
        }
    });
}

编辑:

关于为什么必须将局部变量声明为final(或者换句话说,编译时间常量)的原因:

想象一下,以下内容在Java中是有效的:

@Override
public String getTitle()
{
    Foo f = new Foo();

    Button b = getButtonReference();
    b.setOnClickListener(new OnClickListener()
    {
        public void onClick(View v)
        {  
            Boo o = f.someMethod();
        }
    });

    f = null;
}

在f = null时,foo对象将有资格进行垃圾回收.因此,如果单击该按钮,则VM调用foo对象上的someMethod()为时已晚,因为它是垃圾收集的!

标签:android,java,runnable,anonymous-class
来源: https://codeday.me/bug/20190826/1724618.html