Settext вызывает иррациональное мерцание текста

Я делаю приложение, которое устанавливает USB-связь между Arduino UNO R3 и планшетом Android. Плата Arduino правильно отправляет данные, и они даже правильно принимаются планшетом, и при попытке отобразить текст печатается, но с довольно непрерывным мерцанием.

class MyThread extends Thread
{
    @Override
    public void run()
    {
        mCallback = new UsbSerialInterface.UsbReadCallback()
        { //Defining a Callback which triggers whenever data is read.
            @Override
            public void onReceivedData(byte[] arg0) //data received in bytes
            {
                String data = null;

                try
                {

                    data = new String(arg0, "UTF-8");
                    handler.post(new newthread(data));                            

                }
                catch (UnsupportedEncodingException e)
                {
                    e.printStackTrace();
                }
            }
        };
    }
}
class newthread implements Runnable
{
    String str1;        

    public newthread(String STR1)
    {            
        str1 = STR1;
    }
    @Override
    public void run()
    {

        DoseRateDisplay = (TextView) findViewById(R.id.DoseRateDisplay);
        if(str1.contains("L"))
        { tv6.append("Health OK"); }
        else
        {
           DoseRateDisplay.settext(str1);
        }
    }
}

Я думаю, что причина мерцания может быть в том, что данные поступают слишком быстро. Использование Thread.sleep не помогает. Каким может быть возможное решение этой проблемы? Кроме того, использование append вместо settext не вызывает проблем с мерцанием, но тогда данные добавляются в текстовое представление.


person archity    schedule 05.07.2016    source источник
comment
Данные быстро меняются? Если нет, вы можете проверить, есть ли уже этот текст в TextView, и не устанавливать его снова.   -  person yennsarah    schedule 05.07.2016
comment
Дело не в изменении данных. Я попытался отправить постоянное число из Arduino, даже если оно мерцает.   -  person archity    schedule 05.07.2016
comment
Кстати, не могли бы вы рассказать, как вы читаете уже напечатанное значение textview...   -  person archity    schedule 05.07.2016
comment
textView.getText().toString(); Рассматривали ли вы для своей проблемы изменение текста текстового представления на основе значения, полученного Arduino? Таким образом, он просто обновит текстовое представление, если значение отличается, а не каждый раз, когда значение получено.   -  person Geoff    schedule 05.07.2016
comment
Вы говорите, что, по вашему мнению, причина может заключаться в том, что значения поступают слишком быстро. Вы пробовали обновлять TextView, скажем, один раз за 10 или 100 значений?   -  person Magnus W    schedule 05.07.2016


Ответы (1)


Из моего комментария: попробуйте проверить, равны ли полученный текст и текст, уже находящийся в TextView:

if(!DoseRateDisplay.getText().toString().equals(str1)) {
    DoseRateDisplay.settext(str1);
}
person yennsarah    schedule 05.07.2016
comment
По логике, условие if должно быть инвертировано. Кроме того, он все еще не работает и даже тогда мерцает. - person archity; 06.07.2016
comment
Да, конечно, вы правы. Вы тестировали (отлаживали) это? Как часто это входит в заявление? Каждый раз? - person yennsarah; 06.07.2016
comment
Да. До и после особой разницы не было. Я думаю, что условие if выполняется каждый раз, т. е. строки всегда разные. - person archity; 06.07.2016