繁体   English   中英

Android - 等待 runnable 完成

[英]Android - wait for runnable to finish

我一个字母一个字母地写文本到textview。 只有在显示整个文本后,我才想开始运行进度条。 我想我可以通过通知/等待来实现它,但我不知道如何实现。 有什么帮助吗?

我创建了扩展Textview Typewriter类:

private Handler mHandler = new Handler();

public Runnable characterAdder = new Runnable() {
  @Override
  public void run() {
    setText(mText.subSequence(0, mIndex++));
    if (mIndex <= mText.length()) {
      mHandler.postDelayed(characterAdder, mDelay);
    }
  }
};

public void animateText(CharSequence text) {
  mText = text;
  mIndex = 0;
  setText("");
  mHandler.removeCallbacks(characterAdder);
  mHandler.postDelayed(characterAdder, mDelay);
}

然后我在主要活动中使用它:

Typewriter writer = (Typewriter)findViewById(R.id.typewriter);
writer.animateText("Lorem ipsum dolor sit amet");
//wait until animation finishes to perform further actions

由于我的两个操作都在 UI 线程上运行,因此我没有找到任何同步解决方案。 相反,我将第二个动作推迟到打印所有字母所需的时间:

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
  public void run() {
    animation.start();
  }
  }, timeNeeded);

我在 Kotlin 中使用 Coroutine 确实喜欢这个。

val handler = Handler()
var isWaitingHandler = true
GlobalScope.async {
    handler.post {
        // handler does something.
        isWaitingHandler = false    
    }

    while(isWaitingHandler) {
        delay(50)
    }
    Unit
}.await()

这不完全是我写的,但我认为会起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM