Android setText耗时太长

时间:2015-10-14 13:00:32

标签: android android-layout android-activity

嗨,我有这段代码:

editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        morseText = editText.getText().toString();
        message.setText("Sending Message...");
        message.setTextColor(Color.BLACK);
        sendMessage();

        return handled;
    }
});

一切都按预期工作,除了setText和setTextColor在sendMessage()已经完成后生效,而对于记录,sendMessage()可能需要几秒钟。 我需要在sendMessage之前更改文本。

我如何解决这个问题以及为什么会这样? 谢谢

3 个答案:

答案 0 :(得分:2)

  

setText和setTextColor在sendMessage()完成后生效

onEditorAction()返回时,将主应用程序线程的控制权返回给框架后,它们才会生效。

  记录sendMessage()的

可能需要几秒钟

然后,这项工作必须在后台线程上完成。

  

我该如何解决?

将任何需要超过主应用程序线程约1毫秒的工作移到后台线程上。您可能希望详细了解Android's threading model

答案 1 :(得分:0)

尝试使用此代码运行sendMessage():

new Handler().post(new Runnable(){
    public void run(){
        sendMessage();
    }
});

或使用postDelay替换帖子。

答案 2 :(得分:0)

在UI有机会绘制您的更改后延迟sendMessage。此外,如果sendMessage需要几秒钟的时间,请考虑将其放在IO线程上。

    TextView editText = null;
    assert editText != null;
    editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            boolean handled = false;
            morseText = editText.getText().toString();
            message.setText("Sending Message...");
            message.setTextColor(Color.BLACK);
            v.postDelayed(new Runnable() {
                @Override
                public void run() {
                    sendMessage();
                }
            }, 1);
            return handled;
        }
    });