ps:最近学习的知识太广而没深入了解,全因工作紧张,要短期内全面了解android,没办法只有走马观花,一睹android全貌。由于只是一扫而过,心中只留下概念,没有明白原理,故用到时又得google,特花精力和时间,所以自己决定,把学习过程中点滴全记录在博客上,方便自己用时查找,同时也方便感兴趣的朋友学习。
the Andoid UI toolkit is not thread-safe. So, you must not manipulate your UI from a worker thread—you must do all manipulation to your user interface from the UI thread. Thus, there are simply two rules to Android's single thread model:
Do not block the UI thread
Do not access the Android UI toolkit from outside the UI thread
For example, below is some code for a click listener that downloads an image from a separate thread and displays it in an ImageView:
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
Bitmap b = loadImageFromNetwork("http://example.com/image.png");
mImageView.setImageBitmap(b);
}
}).start();
}
To fix this problem, Android offers several ways to access the UI thread from other threads. Here is a list of methods that can help:
1.Activity.runOnUiThread(Runnable)
2.View.post(Runnable)
3.View.postDelayed(Runnable, long)
4.Using AsyncTask
5.android.view.View.postInvalidate()
Cause an invalidate to happen on a subsequent cycle through the event loop.
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");
mImageView.post(new Runnable() {
public void run() {
mImageView.setImageBitmap(bitmap);
}
});
}
}).start();
}
Looper,Handler,Message源码分析
更新UI界面一
更新UI界面二
google官方关于UI更新及线程
invalidate()和postInvalidate() 的区别及使用
Android自定义View中界面刷新的方法 nvalidate()和postInvalidate() 的区别及使用
分享到:
相关推荐
线程机制
Android应用程序与传统的PC应用程序一样,都是消息驱动的。也就是说,在Android应用程序主线程中,所有函数都是在一个...掌握Android应用程序消息处理机制,有助于我们熟练地使用同步和异步编程,提高程序的运行性能
Handler是Android提供用来异步更新UI的一套机制,也是一套消息处理机制,可以用它来发送消息,也可以用它来接收消息。 二、为什么使用Handler Android在设计之时,就封装了一套消息的创建、传递、处理机制,作为系统...
Android 提供了一个好用的工具---AsyncTask ,方便我们在子线程中对 UI 进行操作,AsyncTask 背后的实现原理也是基于异步消息处理机制的。
详细描述了Android的UI主线程和子线程的消息通信机制,提供了一些参考代码
使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。 MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义...
Android应用启动时,会默认有一个主线程(UI线程),在这个线程中会关联一个消息队列(MessageQueue),所有的操作都会被封装成消息队列然后交给主线程处理。为了保证主线程不会退出,会将消息队列的操作放在一个死...
传统的处理手法是将特定场景下的OSD物件逐一用代码“画”出来,在遇到特定的UI事件时,再利用一堆if else判断出特定场景和操作对象,并做相应的OSD处理。在OSD较简单的情况下,其不失为一个可行的方法。但在遇到OSD...
xamarin学习笔记A13(安卓Handler异步消息处理)Android中只能在主线程进行UI操作,不能在子线程操作,要根据子线程执行的结果来更新UI时,需要用到安卓异步消息处理机制。
但为了执行一些耗时操作,往往会将它们放在子线程中,执行完毕要更新主线程中的UI,所以就有了handler消息处理机制。 handler就相当于一个中转站,子线程通过sendMessage()等方法,将消息发送给handler对象,handler...
Sales Representative 1 test5 供应商1 供应商1 - Exotic Liquids44 1 系统特色 1,不采用code-behind机制,不使用任何服务器控件,全面将工作放在前台实现,后台只处理数据部分。页面还是用aspx后缀,继承于统一的...
针对这种消息循环的机制,我们引入一个新的机制Handle,我们有消息循环,就要往消息循环里 面发送相应的消息,自定义消息一般都会有自己对应的处理,消息的发送和清除,消息的的处理,把这些都封装在Handle里面,...
安卓基本知识值时间处理机制学习源代码,对于初学者来说,学习完UI组件,就要学习安卓一些基本组件与机制了。。
基于 ligerui 的web应用系统,不采用code-behind机制,不使用任何服务器控件,全面将工作放在前台实现,后台只处理数据部分。页面还是用aspx后缀,继承于统一的页面基类(为了方便权限的控制)。数据库是access,完整...
UI编程通常都会伴随事件处理,Android也不例外,它提供了两种方式的事件处理:基于回调的事件处理和基于监听器的事件处理。 对于基于监听器的事件处理而言,主要就是为Android界面组件绑定特定的事件监听器;对于...
【完整课程列表】 ...09 Java异常处理机制和调试(共32页).ppt 10 java集合框架(共27页).ppt 11 JAVA UI swing编程基础(共39页).ppt 12 AWT布局管理器(共14页).ppt 13 AWT事件处理模型(共29页).ppt
如果队列中有消息,消息循环线程就会把它取出来,并分发给相应的Handler进行处理;如果队列中没有消息,消息循环线程就会进入空闲等待状态,等待下一个消息的到来。在编写Android应用程序时,当程序执行的任务比较...
Python实现处理机和进程调度算法及内存分配回收机制源码+项目说明+代码注释(附Vue前端源码).zip 多道程序系统中,进程与进程之间存在同步与互斥关系。当就绪进程数大于处理机数时,需按照某种策略决定哪些进程先占用...
在Android的应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息。当你创建子线程时,你可以在你的子线程中拿到父线程中创建的Handler 对象,就可以通过该对象向父线程的消息队列发送消息了。...
二是方便统一管理,通过Handler可以统一进行对UI的管理,因为Handler采用消息处理的机制。就是另一个线程发送一个编号给消息所在的线程,那么该线程的消息处理程序就会收到该消息并进行处理,而消息采用int类型,...