Android 在服务启动几秒钟后获取WaitingMain信号捕捉器Loop信号捕捉器

Android 在服务启动几秒钟后获取WaitingMain信号捕捉器Loop信号捕捉器,android,xamarin,xamarin.android,Android,Xamarin,Xamarin.android,我正在创建一个Xamarin应用程序,它收集传感器数据,以便我可以使用机器学习进行实验。应用程序正在后台使用intentservice。。但几秒钟后,我得到以下错误: 03-23 21:31:14.772 I/zygote64(18051):线程[3,tid=18057,WaitingMain信号捕捉器Loop,线程*=0x7DABC0400,对等方=0x13fc0088,“信号捕捉器”]:对信号3作出反应 03-23 21:31:14.772 I/合子64(18051): 03-23 21:3

我正在创建一个Xamarin应用程序,它收集传感器数据,以便我可以使用机器学习进行实验。应用程序正在后台使用intentservice。。但几秒钟后,我得到以下错误:

03-23 21:31:14.772 I/zygote64(18051):线程[3,tid=18057,WaitingMain信号捕捉器Loop,线程*=0x7DABC0400,对等方=0x13fc0088,“信号捕捉器”]:对信号3作出反应 03-23 21:31:14.772 I/合子64(18051): 03-23 21:31:14.772 E/zygote64(18051):#HandleSigQuit#DumpForSigQuit#before#pid=18051 03-23 21:31:14.879 E/zygote64(18051):#HandleSigQuit#DumpForSigQuit#在#pid=18051之后 03-23 21:31:14.883 I/zygote64(18051):将堆栈跟踪写入“/data/anr/traces.txt”

我正在用android 8.0.0在Oneplus 3T上调试。 传感器数据通过sqlite网络ORM直接写入sqlite数据库

我已经试着调试了9个小时了。。但是我不能纠正这个错误。 当我评论这项服务时。。它没有给我任何错误

我的服务就是这样的:

using System;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Hardware;
using Tabi.DataStorage;
using Tabi.DataObjects;

namespace Tabi.Droid.CollectionService
{
    [Service]
    public class SensorService : IntentService, ISensorEventListener
    {
        private readonly ISensorRepository<Accelerometer> _accelerometerRepository;
        private readonly ISensorRepository<Gyroscope> _gyroscopeRepository;
        private readonly ISensorRepository<Magnetometer> _magnetometerRepository;
        private readonly ISensorRepository<LinearAcceleration> _linearAccelerationRepository;
        private readonly ISensorRepository<Orientation> _orientationRepository;
        private readonly ISensorRepository<Quaternion> _quaternionRepository;
        private readonly ISensorRepository<Gravity> _gravityRepository;


        public SensorService()
        {
            _accelerometerRepository = App.RepoManager.AccelerometerRepository;
            _gyroscopeRepository = App.RepoManager.GyroscopeRepository;
            _magnetometerRepository = App.RepoManager.MagnetometerRepository;
            _linearAccelerationRepository = App.RepoManager.LinearAccelerationRepository;
            _orientationRepository = App.RepoManager.OrientationRepository;
            _quaternionRepository = App.RepoManager.QuaternionRepository;
            _gravityRepository = App.RepoManager.GravityRepository;
        }


        public void OnAccuracyChanged(Sensor sensor, [GeneratedEnum] SensorStatus accuracy)
        {

        }

        public void OnSensorChanged(SensorEvent e)
        {
            //start gathering data and push to SqliteDB
            switch (e.Sensor.Type)
            {
                case SensorType.Accelerometer:
                     _accelerometerRepository.Add(new Accelerometer()
                    {
                        Timestamp = DateTimeOffset.Now,
                        X = e.Values[0],
                        Y = e.Values[1],
                        Z = e.Values[2],
                    });
                    break;

                case SensorType.Gyroscope:
                    _gyroscopeRepository.Add(new Gyroscope()
                    {
                        Timestamp = DateTimeOffset.Now,
                        X = e.Values[0],
                        Y = e.Values[1],
                        Z = e.Values[2],
                    });
                    break;

                case SensorType.MagneticField:
                    _magnetometerRepository.Add(new Magnetometer()
                    {
                        Timestamp = DateTimeOffset.Now,
                        X = e.Values[0],
                        Y = e.Values[1],
                        Z = e.Values[2],
                    });
                    break;

                case SensorType.Orientation:
                    _orientationRepository.Add(new Orientation()
                    {
                        Timestamp = DateTimeOffset.Now,
                        X = e.Values[0],
                        Y = e.Values[1],
                        Z = e.Values[2]
                    });
                    break;

                case SensorType.Gravity:
                    _gravityRepository.Add(new Gravity()
                    {
                        Timestamp = DateTimeOffset.Now,
                        X = e.Values[0],
                        Y = e.Values[1],
                        Z = e.Values[2]
                    });
                    break;

                case SensorType.LinearAcceleration:
                    _linearAccelerationRepository.Add(new LinearAcceleration()
                    {
                        Timestamp = DateTimeOffset.Now,
                        X = e.Values[0],
                        Y = e.Values[1],
                        Z = e.Values[2]
                    });
                    break;

                case SensorType.RotationVector:
                    _quaternionRepository.Add(new Quaternion
                    {
                        Timestamp = DateTimeOffset.Now,
                        X = e.Values[0],
                        Y = e.Values[1],
                        Z = e.Values[2],
                        W = e.Values[3]
                    });
                    break;

                default:
                    break;
            }
        }

        protected override void OnHandleIntent(Intent intent)
        {
            var sensorManager = (SensorManager)Application.Context.GetSystemService(Context.SensorService);

            Sensor accelerometer = sensorManager.GetDefaultSensor(SensorType.Accelerometer);
            sensorManager.RegisterListener(this, accelerometer, SensorDelay.Normal);

            Sensor gyroscope = sensorManager.GetDefaultSensor(SensorType.Gyroscope);
            sensorManager.RegisterListener(this, gyroscope, SensorDelay.Normal);

            Sensor magnetometer = sensorManager.GetDefaultSensor(SensorType.MagneticField);
            sensorManager.RegisterListener(this, magnetometer, SensorDelay.Normal);

            //sensor fusion
            //linear acceleration
            Sensor linearAcceleration = sensorManager.GetDefaultSensor(SensorType.LinearAcceleration);
            sensorManager.RegisterListener(this, linearAcceleration, SensorDelay.Normal);

            //gravity
            Sensor gravity = sensorManager.GetDefaultSensor(SensorType.Gravity);
            sensorManager.RegisterListener(this, gravity, SensorDelay.Normal);

            //pitch yaw roll / orientation
            Sensor orientation = sensorManager.GetDefaultSensor(SensorType.Orientation);
            sensorManager.RegisterListener(this, orientation, SensorDelay.Normal);

            //quaternion
            Sensor rotationVector = sensorManager.GetDefaultSensor(SensorType.RotationVector);
            sensorManager.RegisterListener(this, rotationVector, SensorDelay.Normal);
        }
    }
}
使用系统;
使用Android.App;
使用Android.Content;
使用Android.OS;
使用Android.Runtime;
使用Android.Hardware;
使用Tabi.DataStorage;
使用Tabi.DataObjects;
命名空间Tabi.Droid.CollectionService
{
[服务]
公共类SensorService:IntentService、IsSensorEventListener
{
专用只读ISensorRepository\u accelerometerRepository;
专用只读ISensorRepository\u存储库;
专用只读ISensorRepository\u磁强计存储库;
专用只读ISensorRepository\u linearAccelerationRepository;
专用只读ISensorRepository\u orientationRepository;
专用只读ISensorRepository_四元数存储库;
专用只读ISensorRepository\u gravityRepository;
公共服务()
{
_accelerometerRepository=App.RepoManager.accelerometerRepository;
_陀螺仪存储库=App.RepoManager.repository;
_magnetometerRepository=App.RepoManager.magnetometerRepository;
_linearacelerationrepository=App.RepoManager.linearacelerationrepository;
_orientationRepository=App.RepoManager.orientationRepository;
_四元数存储库=App.RepoManager.quaternionRepository;
_gravityRepository=App.RepoManager.gravityRepository;
}
精度更改的公共无效(传感器、[GenerateNum]传感器状态精度)
{
}
传感器更改时的公共无效(传感器事件e)
{
//开始收集数据并推送到SqliteDB
开关(例如传感器类型)
{
外壳传感器类型。加速计:
_accelerometerRepository.Add(新加速计()
{
时间戳=日期时间偏移。现在,
X=e.值[0],
Y=e.值[1],
Z=e.值[2],
});
打破
外壳传感器类型。陀螺仪:
_陀螺仪存储库。添加(新陀螺仪()
{
时间戳=日期时间偏移。现在,
X=e.值[0],
Y=e.值[1],
Z=e.值[2],
});
打破
外壳传感器类型。磁场:
_磁强计还原。添加(新磁强计()
{
时间戳=日期时间偏移。现在,
X=e.值[0],
Y=e.值[1],
Z=e.值[2],
});
打破
外壳传感器类型。方向:
_添加(新方向()
{
时间戳=日期时间偏移。现在,
X=e.值[0],
Y=e.值[1],
Z=e.值[2]
});
打破
外壳传感器类型。重力:
_gravityRepository.Add(新重力()
{
时间戳=日期时间偏移。现在,
X=e.值[0],
Y=e.值[1],
Z=e.值[2]
});
打破
外壳传感器类型.线性加速:
_添加(新的LinearAcceleration()
{
时间戳=日期时间偏移。现在,
X=e.值[0],
Y=e.值[1],
Z=e.值[2]
});
打破
外壳传感器类型.旋转矢量:
_添加(新的四元数)
{
时间戳=日期时间偏移。现在,
X=e.值[0],
Y=e.值[1],
Z=e.值[2],
W=e.数值[3]
});
打破
违约:
打破
}
}
受保护的覆盖无效OnHandleIntent(意图)
{
var sensorManager=(sensorManager)Application.Context.GetSystemService(Context.SensorService);
传感器加速计=sensorManager.GetDefaultSensor(传感器类型.加速计);
sensorManager.RegisterListener(此、加速计、传感器延迟。正常);
传感器陀螺仪=sensorManager.GetDefaultSensor(传感器类型.陀螺仪);
sensorManager.RegisterListener(这是陀螺仪,传感器延迟,正常);
传感器磁强计=传感器管理器.Ge
 _magnetometerRepository.Add(new Magnetometer()
                        {
                            Timestamp = DateTimeOffset.Now,
                            X = e.Values[0],
                            Y = e.Values[1],
                            Z = e.Values[2],
                        });
using System;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Hardware;
using Tabi.DataStorage;
using Tabi.DataObjects;
using System.Threading.Tasks;

namespace Tabi.Droid.CollectionService
{
    [Service]
    public class SensorService : Service, ISensorEventListener
    {
        private readonly ISensorRepository<Accelerometer> _accelerometerRepository;
        private readonly ISensorRepository<Gyroscope> _gyroscopeRepository;
        private readonly ISensorRepository<Magnetometer> _magnetometerRepository;

        private SensorServiceBinder _binder;

        public SensorService()
        {
            _accelerometerRepository = App.RepoManager.AccelerometerRepository;
            _gyroscopeRepository = App.RepoManager.GyroscopeRepository;
            _magnetometerRepository = App.RepoManager.MagnetometerRepository;
        }


        public override IBinder OnBind(Intent intent)
        {
            // service binder is used to communicate with the service
            _binder = new SensorServiceBinder(this);
            return _binder;
        }

        public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
        {
            //!!!possibly needed for android 8+
            // maybe convert it into foreground service and uncomment code below
            //Notification.Builder builder = new Notification.Builder(Application.Context, "com.tabi.sensor");
            //builder.SetContentTitle("sensor");
            //builder.SetContentText("you are being watched -.-");
            //builder.SetAutoCancel(true);

            //Notification notification = builder.Build();
            //StartForeground(1, notification);


            //register sensors for listening
            Task.Run(() =>
            {
                var sensorManager = (SensorManager)Application.Context.GetSystemService(Context.SensorService);

                Sensor accelerometer = sensorManager.GetDefaultSensor(SensorType.Accelerometer);
                sensorManager.RegisterListener(this, accelerometer, SensorDelay.Normal);

                Sensor gyroscope = sensorManager.GetDefaultSensor(SensorType.Gyroscope);
                sensorManager.RegisterListener(this, gyroscope, SensorDelay.Normal);

                Sensor magnetometer = sensorManager.GetDefaultSensor(SensorType.MagneticField);
                sensorManager.RegisterListener(this, magnetometer, SensorDelay.Normal);
            });

            return StartCommandResult.Sticky;
        }

        public void OnAccuracyChanged(Sensor sensor, [GeneratedEnum] SensorStatus accuracy)
        {

        }

        public void OnSensorChanged(SensorEvent e)
        {
            //start gathering data and push to SqliteDB
            switch (e.Sensor.Type)
            {
                case SensorType.Accelerometer:
                    Task.Run(() =>
                    {
                        _accelerometerRepository.Add(new Accelerometer()
                        {
                            Timestamp = DateTimeOffset.Now,
                            X = e.Values[0],
                            Y = e.Values[1],
                            Z = e.Values[2],
                        });
                        Console.WriteLine("accelerometer: X:" + e.Values[0] + " Y" + e.Values[1] + " Z:" + e.Values[2]);
                    });
                    break;

                case SensorType.Gyroscope:
                    Task.Run(() =>
                    {
                        _gyroscopeRepository.Add(new Gyroscope()
                        {
                            Timestamp = DateTimeOffset.Now,
                            X = e.Values[0],
                            Y = e.Values[1],
                            Z = e.Values[2],
                        });
                    });
                    Console.WriteLine("Gyroscope: X:" + e.Values[0] + " Y" + e.Values[1] + " Z:" + e.Values[2]);
                    break;

                case SensorType.MagneticField:
                    Task.Run(() =>
                    {
                        _magnetometerRepository.Add(new Magnetometer()
                        {
                            Timestamp = DateTimeOffset.Now,
                            X = e.Values[0],
                            Y = e.Values[1],
                            Z = e.Values[2],
                        });
                    });
                    Console.WriteLine("magnetometer: X:" + e.Values[0] + " Y" + e.Values[1] + " Z:" + e.Values[2]);
                    break;

                default:
                    break;
            }
        }
    }
}