大家!
我的应用程序有问题(Xamarin.Android)。 我正在尝试编写应扫描蓝牙设备的服务:
[Service]
internal class BluetoothService : IntentService
{
...
protected override void OnHandleIntent(Intent intent)
{
// Thats not working...
}
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
_bluetoothAdapter = BluetoothAdapter.DefaultAdapter;
ScanLeDeviceInLoop(true);
return StartCommandResult.Sticky;
}
private async void ScanLeDeviceInLoop(bool enable)
{
await Task.Factory.StartNew(async () =>
{
if (enable == _loopScanningEnabled)
return;
_loopScanningEnabled = enable;
while (_loopScanningEnabled)
{
_container.Clear();
_bluetoothAdapter.StartLeScan(_leScanCallback);
await Task.Factory.StartNew(() => System.Threading.Thread.Sleep((int)_scanPeriod.TotalMilliseconds));
_bluetoothAdapter.StopLeScan(_leScanCallback);
OnScanCompleted();
}
});
}
}
在OnStartCommand和ScanLeDeviceInLoop服务之后调用onDestroy。但是我想保持这个服务活着(扫描的线程是活的,但服务没有)并从UI调用StopService来停止扫描。但我不能因为服务已经停止。
有什么建议吗? 感谢。
答案 0 :(得分:0)
IntentService
旨在异步执行有限的工作单元。
他们根据需要处理异步请求(表示为
Intents
)。 客户端通过StartService(Intent)
电话发送请求;该 根据需要启动服务,使用a依次处理每个Intent 工作线程,并在失去工作时自行停止。您不应该覆盖
OnStartCommand
方法IntentService
。相反,覆盖OnHandleIntent(Intent)
,其中IntentService
收到启动请求时的系统调用。
在您的情况下,服务可能会停止,因为他完成了OnHandleIntent
中的所有工作,这是无。
我建议你使用Service
类,但请记住你应该手动创建新的线程,因为Service
不像IntentService
在主线程上工作