服务关闭 OnHandleIntent mqtt

Posted

技术标签:

【中文标题】服务关闭 OnHandleIntent mqtt【英文标题】:Service close OnHandleIntent mqtt 【发布时间】:2018-06-06 08:28:13 【问题描述】:

我有一个后台服务,它初始化 System.Net.MQTT 库并等待来自 mqtt 的消息。 我有一个问题 OnHandleIntent 初始化库并关闭服务!在开机启动时,并没有收到消息,为什么??

[BroadcastReceiver(Label = "StartReceiver", Enabled = true)] [IntentFilter(new[] Intent.ActionBootCompleted )] 公共类 StartReceiver : BroadcastReceiver 公共覆盖无效 OnReceive(上下文上下文,意图意图) Toast.MakeText(context, "我明白了", ToastLength.Long).Show(); if (intent.Action == Intent.ActionBootCompleted) var serviceIntent = new Intent(context, typeof(ServiceTermoCoperta)); serviceIntent.AddFlags(ActivityFlags.NewTask); context.StartService(serviceIntent); [服务(导出 = 真,启用 = 真)] 公共类 ServiceTermoCoperta : IntentService 公共 IMqttClient 客户端MQTT; [返回:生成的枚举] 公共覆盖 StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId) base.OnStartCommand(intent, flags, startId); 返回 StartCommandResult.Sticky; protected override async void OnHandleIntent(Intent intent) var mqttConfig = 新的 MqttConfiguration 端口 = 1883, MaximumQualityOfService = MqttQualityOfService.ExactlyOnce, KeepAliveSecs = 60, //WaitTimeoutSecs = 50, //ConnectionTimeoutSecs = 50, AllowWildcardsInTopicFilters = true ; clientMQTT = 等待 MqttClient.CreateAsync("iot.pushetta.com", mqttConfig); 新处理程序(Looper.MainLooper).Post(() => 如果(客户端MQTT!= null) clientMQTT.ConnectAsync(new MqttClientCredentials("pusmdm476u47r", "xxxxxx", "aaaaaa")).Wait(); clientMQTT.SubscribeAsync("/pushetta.com/channels/tteste", MqttQualityOfService.AtLeastOnce).Wait(); clientMQTT.MessageStream.Subscribe(msg => 字符串 bs = msg.Topic + " " + Encoding.Default.GetString(msg.Payload); //发送数据 意图 localIntent = new Intent(Constants.BROADCAST_ACTION).PutExtra(Constants.EXTENDED_DATA_STATUS, bs); // 将 Intent 广播到此应用中的接收者。 发送广播(本地意图); ); );

【问题讨论】:

Please refer to IntentService, IntentService 将在工作完成后停止。为什么不使用Service,然后手动关闭它。 Yesssss 工作!!! ,谢谢!!! 【参考方案1】:

IntentService

IntentService 属于计算服务,您可以使用它来完成需要花费大量时间的工作。

Service不同

IntentService 将打开另一个不同于 UI 线程的工作线程来完成工作。

IntentService 将在工作完成后自行停止。

所以我建议你使用Service 来实现你的目标。

【讨论】:

以上是关于服务关闭 OnHandleIntent mqtt的主要内容,如果未能解决你的问题,请参考以下文章

Android onHandleIntent IntentService 等待 UI 线程

使用 IntentService 进行位置监听,但在 onHandleIntent 之后立即调用 onDestroy

handler.postDelayed 在 IntentService 的 onHandleIntent 方法中不起作用

android 四大组件之ServiceIntentService

如何从 IntentService 创建吐司?它卡在屏幕上

android IntentService生命周期问题