【问题标题】:Update TextView before sleeping睡觉前更新TextView
【发布时间】:2013-02-18 20:09:21
【问题描述】:

我想在TextView 上执行setText(),然后让活动休眠。

代码如下:

tv.setText("myText");
tv.invalidate(); // Doesn't work
pause(1000); // French for sleep

我的功能暂停:

public void pause(int seconds)
{
    synchronized(this)
    {
        try { 
            this.wait(seconds); 
        } catch (InterruptedException ie) { 
            ie.printStackTrace();
        }
    }
}

问题是 TextView 在睡眠前没有更新。我试图在我的 TextView 上调用 invalidate(),但它不起作用。

我有另一个可能的解决方案:创建一个新的线程来休眠活动,如果我的 TextView 的值仍然相同,则重新加载线程,否则调用我的函数pause()。但是有可能在 View 中获得我的 TextView 的真正价值吗?因为我可以得到新的文本:

tv.setText("myText");
System.out.println(tv.getText());
pause(1000); // French for sleep

而文本不会在视图中更新。

有什么想法吗?

【问题讨论】:

  • 你需要睡眠/暂停功能做什么?锁定主线程从来都不是一个好主意,相反,如果您只想在一段时间后运行某些东西,则应该使用 new Handler().postDelayed(action) 之类的东西。
  • @Jave 这是一种设置文本并让线程休眠以使该文本可读的算法。我没有找到其他解决方案。线程恢复后,正在显示另一个文本并休眠线程等。

标签: android multithreading textview sleep


【解决方案1】:

我会建议 Jave 所说的话。

tv.setText("myText");
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //Do something
            }
        }, 3000); //3000 is time in ms.

【讨论】:

  • 我明白了。但问题是 3000 毫秒后完成的动作并不总是相同的。我想我会做另一个功能,有步骤或类似的东西。
【解决方案2】:

如果您使用 UI 线程并使其休眠时间过长,您将收到应用程序无响应对话框。当然,只有当函数结束时,你才会看到新的值,所以这不是一个好的解决方案。如果您只想使用 UI 线程,则可以使用处理程序。

如果您使用不同的线程,则需要使用 UI 线程以某种方式设置 TextView 的文本,因为它是唯一允许这样做的线程(为此使用处理程序)。

【讨论】:

  • 好的,谢谢,但我让它休眠 1 秒。所以我会用一个Handler
猜你喜欢
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多