Android UI线程问题



我正在使用android中的库连接到终端模拟器,这连接到串行设备(开关)并显示我发送/接收的数据。我通过终端下面的文本框发送数据,或者在终端上输入数据,然后在键盘上按回车键。我也可以通过按键发送命令。

我的问题是,每当终端本身突出显示UI不更新时,就像在与按钮一起发送的命令或从串行设备接收的数据一样。我可以在终端中输入,然后字符就会出现。如果选择了editText,一切都会更新得很好。因此,如果我选择终端并发送命令,只有在选择editText后,它才会显示在屏幕上。很多时候,在我选择editText之后,它仍然没有更新,直到我再次按下终端。很奇怪。所以我的无效程序不能正常工作?或者是这个notifyUpdate方法,我正在使用和不真正理解?

我目前做的是在接收数据时调用一个方法,这个方法调用一个处理程序,它每1000毫秒更新一次屏幕。然而,当选择终端时,这不起作用,为什么会这样?我得到的错误:"只有创建视图层次结构的原始线程可以触摸它的视图。"

截图:https://i.stack.imgur.com/1m26B.png

    //terminal view
    EmulatorView view = (EmulatorView) findViewById(R.id.emulatorView);
    mEmulatorView = view;
    public void onDataReceived(int id, byte[] data)
    {
    dataReceived = new String(data);
    ((MyBAIsWrapper) bis).renew(data);
    mSession.write(dataReceived);
    mSession.notifyUpdate();
    viewHandler.post(updateView);
    }
    Handler viewHandler = new Handler();
    Runnable updateView = new Runnable() {
    @Override
    public void run() {
    mEmulatorView.invalidate();
    viewHandler.postDelayed(updateView, 1000);
        }
    }
};

我正在使用的库的相关代码:

 [code]protected void notifyUpdate() {
        if (mNotify != null) {
            mNotify.onUpdate();
        }
    }[/code]

/**
 * Generic callback to be invoked to notify of updates.
 */
public interface UpdateCallback {
    /**
     * Callback function to be invoked when an update happens.
     */
    void onUpdate();
}

这是方法notifyUpdate()的描述-方法在类jackpal.androidterm.emulatorview.TermSession通知由setUpdateCallback注册的UpdateCallback屏幕已经改变

我认为它可能是session . notifyupdate ();在我的代码中,但显然,如果我注释掉同样的错误发生,那行似乎对我什么也没做。我不确定在哪里的错误是修复它,所以我的屏幕总是被更新,无论我在哪里按

让它工作,我只需要在UI线程中运行写行,即使我认为它是?!

public void onDataReceived(int id, byte[] data) {
        dataReceived = new String(data);
        ((MyBAIsWrapper) bis).renew(data);
        runOnUiThread(new Runnable(){
            @Override
            public void run() { 
                mSession.write(dataReceived);       
            }});
        viewHandler.post(updateView);
    }

相关内容

  • 没有找到相关文章

最新更新