方法2  Handler andler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: String data = (String)msg.obj; textView.setText(data); break; default: break; } } };…
在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 在看方法之前需要了解一下Android中的消息机制. 转载请标明出处:http://blog.csdn.net/seu_calvin/article/details/52120389 方法1  Activity.runOnUiThread 方法如下: runOnUiThread(new Runnable() { @Override public void run() {…
一般情况下,UI的更新都少不了Handler,首先我们先了解一下Handler机制: Handler消息机制 定义 Message 线程间通信的数据单元,可通过message携带需要的数据创建对象:Message.obtain(what) Handler Handler是Message的处理器,同时也负责消息的发送和移除工作 发送即时消息:即使发送即时处理 发送延时消息:即时发送,过一会儿处理 MessageQueue:消息队列 用来存放通过Handler发送的消息,它是一个按Message的w…
http://blog.csdn.net/libaineu2004/article/details/45368427 方法1:performSelectorOnMainThread[self performSelectorOnMainThread:@selector(updateUI:) withObject:image waitUntilDone:NO]; 方法2:dispatch_async(dispatch_get_main_queue(), ^{ ... }) dispatch_asyn…
iOS开发中,因为大部分函数都不是线程安全的,所以UI子线程中操作UI是非常危险的事,但是有时候因为开发者经验不足,不知道子线程中不能UI,或者知道但是写代码的时候没注意,或者不知道那些函数操作UI了(比如UITableView的reload函数),造成这个问题时常发生,防不胜防,而且iOS不像安卓,一旦子线程中操作UI就直接崩溃,iOS中操作UI只是有可能崩,导致问题经常不好重现,而且经常奔溃堆栈是乱的,找不到出错的地方在哪儿,十分头疼. 本人写了一个简单的线程检查ui操作的库,当子线程操作u…
初了解Android的时候,就知道Android是不能在子线程更新UI的,不然程序会直接抛出异常,告诉你,别给我在自线程搞事情! 但是,这个是针对普通的view做的限制,而TextureView,Surface则可以在自线程更新UI,你可以在它的内部创建线程,然后使用canvas在线程里进行绘制. TextureView与SurfaceView的不同之处在于,textureView使用surfaceholder,是从当前页面的view中获取的,而SurfaceView则是对当前View的置顶区域…
Android确实不允许在子线程中进行UI操作的,但我们有时必须在子线程里去执行一些耗时的任务,然后根据任务的执行结果来更新相应的UI控件. Android提供了一套异步消息处理机制,可以解决子线程中进行UI操作的问题. 例子: public class MainActivity extends AppCompatActivity { public static final int UPDATE_TEXT = 1; private TextView textView; private Handl…
和许多其他的GUI 库一样,Android 的UI 也是线程不安全的.也就是说,如果想要更新应用程序里的UI 元素,则必须在主线程中进行,否则就会出现异常.了解AsyncTask的用法,请参见我的博客:(android高级---->Asynctask的源码分析)今天我们就来学习一下有关UI更新的一些知识.   目录: 不能在子线程中更新UI 用Handler机制实现UI的更新 用AsyncTask机制实现UI的更新 友情链接 今天我们通过一个小案例,来说明更新UI的全部测试内容:项目结构如下…
http://blog.csdn.net/jqncc/article/details/16342121 在winform C/S程序中经常会在子线程中更新控件的情况,桌面程序UI线程是主线程,当试图从子线程直接修改控件属性时会出现“从不是创建控件的线程访问它”的异常提示. 跨线程更新UI控件的常用方法有两种: 1.使用控件自身的invoke/BeginInvoke方法 2.使用SynchronizationContext的Post/Send方法更新 1.使用控件自身的invoke/BeginIn…