Android服务被破坏,但不是无限循环

时间:2014-07-31 04:46:04

标签: android bluetooth xamarin intentservice

大家!

我的应用程序有问题(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来停止扫描。但我不能因为服务已经停止。

有什么建议吗? 感谢。

1 个答案:

答案 0 :(得分:0)

IntentService旨在异步执行有限的工作单元。

  

他们根据需要处理异步请求(表示为Intents)。   客户端通过StartService(Intent)电话发送请求;该   根据需要启动服务,使用a依次处理每个Intent   工作线程,并在失去工作时自行停止。

     

您不应该覆盖OnStartCommand方法   IntentService。相反,覆盖OnHandleIntent(Intent),其中   IntentService收到启动请求时的系统调用。

在您的情况下,服务可能会停止,因为他完成了OnHandleIntent中的所有工作,这是无。

我建议你使用Service类,但请记住你应该手动创建新的线程,因为Service不像IntentService在主线程上工作