Handler AsyncTask

xiaoxiao2021-02-27  128

实现线程的方法 1. 继承Thread类 2. 实现Runnable接口 主线程才允许修改UI,子线程修改UI会抛异常。 ANR 主线程5秒无响应,就会出现ANR对话框。 避免ANR:将耗时任务放入子线程。 Handler消息机制 1. Looper 循环者 2. Handler 通信 3. Message 消息 Looper Looper: 无线循环的线程。 looper.prepare();将一条普通的线程,提升到一个Looper线程。添加一个本地线程,添加了 一个MessageQueue looper.loop(); 一个线程只允许出现一个Looper 提升Looper: 创建一个MessageQueue,无限循环从Queue中取消息。 好处: 可以开始于当前的线程进行交互。 重要方法 1. 获取主线程的Looper,可以和主线程进行通信。 2. getMainLooper() : 主线程默认是Looper线程。 Handler 1. 一个Handler在创建的时候,必须有一个Looper。 2. 往绑定的MesageQueue上发消息,和处理消息。 1. Handler每次创建必须有一个所属的Looper,默认是当前的线程的Looper(没有就报错了); 2. Handler必须重写handlerMessage的方法来处理消息。 1. Handler的消息分为两大类 2. 消息类 3. 1. Message 发送消息 4. 2. EmptyMessage 发送空消息 5. 3. Runnable 发送任务 6. 任务类 7. Runanble 可以执行一个Runnable的线程 8. handler.post(new Runnable()); 9. 10. 11. 12. 每种都有三种发送模式 13. 1. 立即发送 14. 2. 在某个时间点(开机后的时间) 15. 3. 延迟多久后发送 Message 1. Message可以存放 2. 1. obj 用来存放对象 占用内存高 3. 2. what 用来存放1个int值 4. 3. arg1,arg2 用来存放2个int值 Message不要使用构造方法,而是去重用。 1. Message msg = handler.obtainMessage(); AsyncTask 1. 三个泛型 2. Pamras 提供给doInBackground方法的参数 执行后台线程的参数 3. Progress 提供给 onProgressUpdate的方法参数 进度改变时需要的参数 4. Result 提供给 postExecute方法的参数 最终的结果处理的方法参数 5. 6. 五个方法 7. onPreExecute 准备执行后台任务前的准备工作 8. doInBackground 后台任务执行的位置 一定需要实现。 9. onPostExecute 最终完成后台任务之后,处理结果 10. 11. 12. 13. onCanceled 手动取消任务的时候执行的方法 14. onProgressUpdate 不会主动调用,必须在doInBackgroud中调用publishProgress才 会执行。

转载请注明原文地址: https://www.6miu.com/read-16969.html

最新回复(0)