Android 更新UI的两种方法——handler和runOnUiThread() 在Android开发过程中,常需要更新界面的UI。而更新UI是要主线程来更新的,即UI线程更新。如果在主线线程之外的线程中直接更新页面显示常会报错。抛出异常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 只有原始创建这个视图层次(view hierachy)的线程才能修改它的视图(view) 话不多说,贴出下面的代码 方法一: 在Activity.onCreate(Bundle savedInstanceState)中创建一个Handler类的实例, 在这个Handler实例的handleMessage回调函数中调用更新界面显示的函数。
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); UITxt = (EditText)findViewById(R.id.ui_txt); updateUIBtn = (Button)findViewById(R.id.update_ui_btn); updateUIBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub UIhandler = new UIHandler(); UIThread thread = new UIThread(); thread.start(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } private class UIHandler extends Handler{ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); Bundle bundle = msg.getData(); String color = bundle.getString("color"); UITxt.setText(color); } } private class UIThread extends Thread{ @Override public void run() { try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Message msg = new Message(); Bundle bundle = new Bundle(); bundle.putString("color", "黄色"); msg.setData(bundle); MainActivity.this.UIhandler.sendMessage(msg); } } }
方法二:利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。 这样Runnable对像就能在ui程序中被调用。如果当前线程是UI线程,那么行动是立即执行。如果当前线程不是UI线程,操作是发布到事件队列的UI线程 [html] FusionField.currentActivity.runOnUiThread(new Runnable() { public void run() { Toast.makeText(getApplicationContext(), , "Update My UI", Toast.LENGTH_LONG).show(); } });

更多相关文章

  1. android 在surfaceView上画图
  2. Android(安卓)MediaScannerService源码分析
  3. android应用程序中获取view的位置(2)
  4. RxJava RxAndroid(安卓)在android中最重要的应用(一)
  5. Android用于提示等待的ProgressDialog
  6. android 设置全屏方法1
  7. Android定时器和Handler用法实例分析
  8. Android(安卓)4.0 隐藏虚拟按键(导航栏)的方法
  9. Android画布(cavas)

随机推荐

  1. Android DatePicker和TimePicker实践
  2. linux系统和android系统的区别
  3. Android面试题精选,自己收藏下
  4. androidstudio搭建flutter环境,遇到的问题
  5. Android中的soundpool小结
  6. Android开发学习:ImageView的scaletype属
  7. android调用Webservice方法
  8. eclipse导入已存在的android工程时遇到An
  9. android简易画图板与五子棋
  10. Android中LocationManager的简单使用,获