Android:滞后设置文本到文本框

时间:2013-04-07 06:23:23

标签: android performance lag

该计划需要尽可能少的滞后。不幸的是,下面代码中的inputWord.setText("");会略有滞后。反正有没有解决这个滞后?非常感谢帮助。

public void addInputWordListener(){
    inputWord.addTextChangedListener(new TextWatcher() {

        public void afterTextChanged(Editable s) {
            if(s.toString().equals("")){
                topView.setTextColor(Color.WHITE);
                return;
            }

            if (s.toString().endsWith(" ")){    //submitting a word
                token = s.toString().trim();
                System.out.println("1");
                if (token.equalsIgnoreCase(topView.getText().toString())){
                    System.out.println("2");
                    inputWord.setText("");
                    System.out.println("3");
                    topView.setText(midView.getText());
                    System.out.println("4");
                    midView.setText(botView.getText());
                    System.out.println("5");
                    botView.setText(MainMenu.we.nextWord());
                    System.out.println("6");

                }else
                {
                    topView.setTextColor(Color.RED);

                }
            }
        }

        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        public void onTextChanged(CharSequence s, int start, int before, int count) {}

    });
}

以下是可疑运行的LogCat输出:

04-07 02:41:10.539: I/System.out(13152): 1
04-07 02:41:10.539: I/System.out(13152): 2
04-07 02:41:10.549: I/System.out(13152): 3
04-07 02:41:10.549: I/System.out(13152): 4
04-07 02:41:10.549: I/System.out(13152): 5
04-07 02:41:10.549: I/System.out(13152): 6

4 个答案:

答案 0 :(得分:1)

删除System.out.println,这些会严重影响您的“效果”。

答案 1 :(得分:0)

使用inputWord.setText("");替换s.clear();后,查看是否有任何更改。

答案 2 :(得分:0)

您还可以通过仅转换为String一次来加快速度:

 String inputString = s.toString();

然后使用inputString进行所有比较

您还可以在TextViews上缓存文本(即在活动中保留副本)以节省必须执行所有getText()调用。

答案 3 :(得分:0)

你刚刚被Observer effect抓住了。

正如Gabe Sechan所说,日志很慢,而且它们显示的时间可能不准确。

尝试在mid和mid之前使用SystemClock.uptimeMills()并在你真正需要之后减去并打印它们,但是时间差小于几毫秒根本就不准确。