任何耗时的处理过程都会降低用户界面的响应速度,甚至导致用户界面失去响应,当用户界面失去响应超过5秒钟,Android系统会允许用户强行关闭应用程序。较好的解决方法是将耗时的处理过程转移到子线程上,这样可以避免负责界面更新的主线程无法处理界面事件,从而避免用户界面长时间失去响应。
当应用启动,系统会创建一个主线程(UI线程)
处理与UI相关的事件
如按键事件、用户接触屏幕的事件、屏幕绘图事件等
统不会为每个组件单独创建线程,在同一个进程里的UI组件都会在UI线程里实例化,系统对每一个组件的调用都从UI线程分发出去
从UI线程中操作UI组件是安全的
非UI线程中进行UI操作不是线程安全的
非UI线程
非主线程
向UI线程发出请求消息,由UI线程处理这些消息,并进行相关的UI操作
Handler类
处理较为复杂的线程间通信及消息处理
AsyncTask类
轻量级基于多线程的进行后台异步工作处理的类
Handler类
Handler类
非UI线程向UI线程发出请求消息,由UI线程处理这些消息,并进行相关的UI操作。这个发送消息和处理消息的过程由Handler类来协助进行处理
在UI线程中创建Handler类的子类,并通过重写handleMessage(Message msg)方法来实现UI操作
当有其他线程向这个自定义子类的对象发送消息时,handleMessage()方法会被调用,通过识别参数msg的值
在子线程中发送消息,在主线程中处理消息
boolean sendMessage(Message msg)
boolean sendEmptyMessage(int what)