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