zoukankan      html  css  js  c++  java
  • 个人练习:更新UI线程

    1.如果是同一个线程(或者是主线程)里,可以直接进行UI内容的更新,如果是两个不同的线程,更新则会报错,可以用Handler+Runnable来进行不同线程的UI更新

    报错代码(报错内容:ERROR/AndroidRuntime(785): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.):

    public class MainActivity extends Activity
    {
    private TextView tvInfo = null;
    private Button btnClick = null;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tvInfo = (TextView)findViewById(R.id.tv01);
    btnClick = (Button)findViewById(R.id.btnClick);



    btnClick.setOnClickListener(new OnClickListener()
    {

    @Override
    public void onClick(View v)
    {
    new Thread(run).start();
    }
    });
    }
    Runnable run = new Runnable()
    {

    @Override
    public void run()
    {
    tvInfo.setText("kelei");
    }
    };
    }

    正确代码1:因为是同一个线程(主线成,所以能直接更改UI上的内容)

    public class MainActivity extends Activity
    {
    private TextView tvInfo = null;
    private Button btnClick = null;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tvInfo = (TextView) findViewById(R.id.tv01);
    btnClick = (Button) findViewById(R.id.btnClick);

    btnClick.setOnClickListener(new OnClickListener()
    {

    @Override
    public void onClick(View v)
    {
    tvInfo.setText("kelei");
    }
    });
    }
    }

    正确代码2(使用Handler+Runnable):

    public class MainActivity extends Activity
    {
    private TextView tvInfo = null;
    private Button btnClick = null;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tvInfo = (TextView) findViewById(R.id.tv01);
    btnClick = (Button) findViewById(R.id.btnClick);

    btnClick.setOnClickListener(new OnClickListener()
    {

    @Override
    public void onClick(View v)
    {
    Handler handler = new Handler();
    handler.post(run);
    }
    });
    }
    Runnable run = new Runnable()
    {

    @Override
    public void run()
    {
    // TODO Auto-generated method stub
    tvInfo.setText("kelei");
    }
    };
    }



  • 相关阅读:
    CSS布局--坑(2)
    CSS布局--坑(1)
    微信小程序wx:for 循环中item的keng
    初体验小程序Vue交互
    vue中数组变动更新检测
    【vue】v-if和v-show的区别
    babel把ES6转化为ES5的时候报错
    Vue.js大总结
    性能测试完整流程(二)
    性能测试完整流程(一)
  • 原文地址:https://www.cnblogs.com/kelei12399/p/2351285.html
Copyright © 2011-2022 走看看