zoukankan      html  css  js  c++  java
  • 解决安卓UI刷新卡屏,只显示最后一处刷新的问题

    ---恢复内容开始---

    错误1

    安卓的机制决定了只有UI线程(也就是主线程)才能更新UI界面

    否则会导致UI界面混乱的问题

    这就说明了在new Thread中直接showImage是会报“出现非主线程更新界面”的错误

    错误2

    尝试在一次点击事件中多次更新UI界面    或者   妄想在死循环中一直更新UI界面,会导致UI堵塞,如下图所示

    错误3

    这里正解是通过Android的Handler机制,在Runnable 中持续跟新UI,但是想用死循环在Runnable中的run 方法里持续显示,会出现错误2的问题

    正解

    1.创建全局变量 public Handler   handler =  new Handler();

    2.在需要更新UI 界面的地方创建一个线程 

    new Thread(){

    @Override
    public void run(){//*********}

    }

    3.在run地方用handler的post方法,注意post()里应该传入一个Runnable对象,我们在创建时可以重新创建

    4.在Runnable中重写run方法,在run方法里添加showImage,点击运行,完成了在线程跟新UI界面的操作

    5.如果想持续更新UI线程,在showImage()后面添加  handler.postDelayed()方法,  方法中第一个参数传入的是Runnable对象,第二个为延时时长

    这里我的Runnable对象传入的this,就完成了持续更新界面的操作

    具体代码如下

    button_start.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
    isRunning = true;
        JNImethod(outMat1.getNativeObjAddr(),outMat2.getNativeObjAddr());
    new Thread(){
    @Override
    public void run() {
    handler.post(new Runnable() {
    @Override
    public void run()
    {

    showMatImage(outMat1, outMat2); //执行时间在4ms左右
    handler.postDelayed(this, 100);
    }
    });
    }
    }.start();
    }});

    我是在一个"开始"点击事件里添加的持续跟新UI界面的操作
    我是通过慕课网上的视频学习做成的 传送门:https://www.imooc.com/learn/267
    能力有限,有些地方表述不当,希望大家不吝赐教

    ---恢复内容结束---

  • 相关阅读:
    Realtime crowdsourcing
    maven 常用插件汇总
    fctix
    sencha extjs4 command tools sdk
    首次吃了一颗带奶糖味的消炎药,不知道管用不
    spring mvc3 example
    ubuntu ati driver DO NOT INSTALL recommand driver
    yet another js editor on windows support extjs
    how to use springsource tools suite maven3 on command
    ocr service
  • 原文地址:https://www.cnblogs.com/Carlsblog/p/9437962.html
Copyright © 2011-2022 走看看