我在stackoverflow上找到了多种方法来实现这一点,但仍然没有找到一种使用参数的好方法。在我的例子中,我有一个线程需要不断地用日志信息更新ui主线程(我没有使用asynctask;我正在从googleMap实现tileprovider接口)
这就是我在线程中运行的东西,它可以工作:
Handler mainHandler = new Handler(Looper.getMainLooper());
...
public void debugMsg(final String msg)
{
Runnable myRunnable = (new Runnable()
{
@Override
public void run()
{
Log.Add(msg); // static function that update the UI in the main thread
}
});
mainHandler.post(myRunnable);
}
问题是,如果我理解正确,每次调用debugmsg时,它都会示例化一个新的可运行对象。我不认为这是一个很好的实践,特别是因为它将被大量地完成,所以我想知道是否有办法重用线程中的runnable。或者有更好的方法。。。
1条答案
按热度按时间rwqw0loc1#
如果你想重复使用
Runnable
,您可以轻松地将其存储为成员变量。您可能会认为,在有参数的情况下,可以使用consumer。
然后在debugmsg中
但是,lambda仍然是每次运行时示例化的函数接口的对象
debugMsg
. 但是,主要的逻辑将不会被重新创建和修改myConsumer
将被重新使用。升级版本:
您可以自己实现runnable接口,比如
然后创建parameterisedrunnable的示例,就像常规的runnable(重写run方法)一样。
你就可以这样使用它了。