IntentService实现原理及内部代码

很多网友可能发现Android中除了Service还有一个IntentService,他们之间到底有哪些区别呢? 在继承关系上而言IntentService是Service的子类,内部实现的代码中涉及到一些Android入门开发者不了解的Looper,Android123在早期的文章中已经说明他们的用法,这里不再赘述,有关原理大家可以看源码实现如下:

 

 从上面的代码相信大家可以看出IntentService和Service的不同了,通过Looper和Thread来解决标准Service中处理逻辑的阻塞问题,毕竟Android的Service也是会阻塞的。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在 IntentService 中使用 MQTT 的示例代码: ```java public class MqttService extends IntentService { private MqttAndroidClient mqttClient; public MqttService() { super("MqttService"); } @Override protected void onHandleIntent(Intent intent) { String clientId = MqttClient.generateClientId(); mqttClient = new MqttAndroidClient(this, "tcp://mqtt.eclipse.org:1883", clientId); try { mqttClient.connect().waitForCompletion(); mqttClient.subscribe("topic/test", 0); mqttClient.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable cause) { // 连接丢失 } @Override public void messageArrived(String topic, MqttMessage message) throws Exception { // 收到消息 } @Override public void deliveryComplete(IMqttDeliveryToken token) { // 传输完成 } }); } catch (MqttException e) { e.printStackTrace(); } } @Override public void onDestroy() { super.onDestroy(); try { mqttClient.disconnect().waitForCompletion(); } catch (MqttException e) { e.printStackTrace(); } } } ``` 在 `onHandleIntent` 方法中,我们创建了一个 MQTT 客户端,并连接到 MQTT 服务器。然后订阅了一个主题,并设置了回调函数来处理收到的消息。在 `onDestroy` 方法中,我们断开了 MQTT 客户端的连接。 需要注意的是,由于 IntentService 是单线程的,因此在 `onHandleIntent` 方法中不能进行耗时操作,否则可能会导致 IntentService 超时而被系统杀死。如果需要进行耗时操作,可以考虑使用 AsyncTask 或 HandlerThread 等方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值