-
new Thread (){ public void run(){//这个run方法是在子线程中 try{ Thread.sleep(1000); handler.post(new Runnable(){ @Override public void run(){ textView.setText("updata thread");//这个run()方法是在主线程中的 } },1000);//使用Handler在主线程更新UI }catch(InterruptedException e){ e.printStackTrace(); } } }.start();
查看全部 -
Android在设计的时候就封装了一套消息创建,传递,处理机制,如果不遵循这样的机制就没办法更新UI信息的,就会抛出异常信息
查看全部 -
Handler是Android给我们提供用来更新UI的一套机制,也是一套消息处理机制,我们可以用它来发送消息,也可以用它来处理消息
查看全部 -
android中更新ui四种方式
runonui
view.post(runable)
handler.post()
handler.sendmessage
查看全部 -
自定义线程处理handler方法:
class MyThread extends Thread{ public Handler handler; @Override public void run() { Looper.prepare(); handler = new Handler(){ @Override public void handleMessage(Message msg) { System.out.print("currentThread:"+Thread.currentThread()); } }; Looper.loop(); } }
查看全部 -
绑定了HandlerThread的Looper的Handler里面是可以更新ui的,也可以做耗时操作.它其实就是个线程,所以可以做耗时操作,除此之外由于在线程中调用了Looper.prepare()方法,所以绑定到了主线程从而可以更新UI了。这是我的理解不知道对不对,不过确实是可以更新UI也可以做耗时操作,我在代码中试过。
查看全部 -
非ui线程真的不能更新ui吗?答:某种情况下可以。
在oncreate方法中开启子线程更新ui,在thread没有休眠的情况下,因为ViewRootImp在activity的onresume方法中创建,在ViewRootImp方法中判断当前线程是否为主线程,oncreate在onresume之前执行,所以这种情况下,可以进行更新ui操作。查看全部 -
创建handle的时候会跟一个默认的线程绑定,线程中有一个Massagequeue
查看全部 -
handler是android给我们提供的用来更新UI的一套机制,也是一套消息处理的机制,我们可以发送消息,也可以通过它来处理消息
查看全部 -
可以利用有返回值的handleMassage方法截获发送来的消息,当handleMassage方法的返回值为true时,后面无返回值的handleMassage就不会执行了。
查看全部 -
handler原理
查看全部 -
handler原理
查看全部 -
Handler实现图片轮播(循环播放) //实现图片切换 class MyRunnable implements Runnable { @Override public void run() { index++; index = index % 3; imageView.setImageResource(images[index]); handler.postDelayed(myRunnable,1000); } } //实现更新textView文本文档 // new Thread() { // @Override // public void run() { // try { // Thread.sleep(1000); // handler.post(new Runnable() { // @Override // public void run() { // textView.setText("Update thread!"); // } // }); // } catch (InterruptedException e) { // e.printStackTrace(); // } // } // }.start();
查看全部 -
什么是handler
handler就是官方提供的一套更新UI的机制 也是一套消息处理的机制
查看全部 -
--摘自评论区 使用handler时候常遇到的问题(系统抛出的异常): 1. android.view.ViewRootImpl$CalledFromWrongTreadException:Only the original thread that created a view hierarchy can touch its views 2. Can't create handler inside thread that has not called Looper.prepare() 在子线程中创建一个 Handler对象,却没有给它指定一个Looper对象的时候,就会抛出该异常。 如图是第一个异常抛出的原因:checkThread()判断“当前线程(更新UI的线程)是不是主线程”,如果不是,就抛出该异常。查看全部
举报