message handler

本文介绍Android应用中如何在保持UI响应性的同时进行后台任务处理。主要内容包括:避免在主线程执行耗时操作;使用Handler机制从子线程发送消息到主线程以更新UI;runOnUiThread方法的工作原理及其实现方式。

 主线程中不执行耗时操作,子线程不更新UI

 

因此,Android提供了Handler来解决这个问题

子线程中 sendMessage ,通知主线程更新UI

 

**整个过程:

 

新建Handler,通过sendMessage或者post发送消息,Handler调用sendMessageAtTimeMessage交给MessageQueue


MessageQueue.enqueueMessage方法将Message以链表的形式放入队列中


Looperloop方法循环调用MessageQueue.next()取出消息,并且调用HandlerdispatchMessage来处理消息


dispatchMessage中,分别判断msg.callback、mCallback也就是post方法或者构造方法传入的不为空就执行他们的回调,如果都为空就执行我们最常用重写的handleMessage

 

 

 

runOnUiThread看起来很简单,其实原理也和上面的一样

给定的引用内容中未提及C#中MessageHandler的相关信息,以下是一般性的关于C#中MessageHandler的介绍: ### 原理 在C#里,`MessageHandler`通常和`HttpClient`搭配使用,它属于HTTP消息处理程序,主要负责处理HTTP请求和响应。`HttpClient`的请求会经过`MessageHandler`,`MessageHandler`会对请求进行处理,像添加请求头、处理认证、记录日志等操作,之后再将请求发送到目标服务器。服务器返回响应后,`MessageHandler`还能对响应进行处理,例如解析响应内容、处理错误等。 ### 使用方法 在创建`HttpClient`实例时,可指定`MessageHandler`。`HttpClient`有一个接受`HttpMessageHandler`参数的构造函数,这样就能自定义消息处理逻辑。 ### 示例代码 ```csharp using System; using System.Net.Http; using System.Threading.Tasks; // 自定义MessageHandler public class CustomMessageHandler : HttpClientHandler { protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { // 在发送请求之前添加自定义逻辑,例如添加请求头 request.Headers.Add("CustomHeader", "CustomValue"); // 调用基类的SendAsync方法发送请求 var response = await base.SendAsync(request, cancellationToken); // 在收到响应之后添加自定义逻辑,例如记录响应状态码 Console.WriteLine($"Response Status Code: {response.StatusCode}"); return response; } } class Program { static async Task Main() { // 创建自定义的MessageHandler实例 var customHandler = new CustomMessageHandler(); // 使用自定义的MessageHandler创建HttpClient实例 using (var httpClient = new HttpClient(customHandler)) { // 发送HTTP请求 var response = await httpClient.GetAsync("https://www.example.com"); // 读取响应内容 var content = await response.Content.ReadAsStringAsync(); // 输出响应内容 Console.WriteLine(content); } } } ``` 在这个示例中,定义了一个`CustomMessageHandler`类,它继承自`HttpClientHandler`。在`SendAsync`方法里,添加了自定义的请求头,同时记录了响应的状态码。在`Main`方法中,使用`CustomMessageHandler`创建了`HttpClient`实例,接着发送了一个GET请求,并且输出了响应内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值