服务剂量似乎在后台正常工作

时间:2017-09-03 19:03:11

标签: android android-service

我正在创建一个简单的stepcounter应用程序,但后台服务似乎无法正常工作。

在我的Activity课程中,我开始使用我的服务:

...
Intent service = new Intent(this, MyService.class);
startService(service);

在我的服务类中,我这样做:

...
   Notification notification = new Notification();
   startForeground(42, notification);

    db = new SQLiteHelper(getApplicationContext());

    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    eventListener = new EventListener(db);
    //register listener for sensors
    sensorManager.registerListener(eventListener, sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR), SensorManager.SENSOR_DELAY_FASTEST);

在Listener类的onSensorChangedMethod()我做:

...      
if (sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {
        Log.d(TAG,new Date() + " " + event.values[0]);
        db.insertStep(new Date().getTime(), 1);
    }

manifest.xml中的服务配置:

...
    <service
        android:name=".MyService"
        android:stopWithTask="false"
        android:enabled="true"
        android:exported="false"

        >

即使我在前台跑步,步骤计数器似乎也会在几步之后停止。我手动测试并与Samsung Healths计步器进行比较,这与我计算的手动步骤是正确的,而我的应用程序在20-40步后停止,而在实际中我走了200步。(我关闭屏幕并从我的应用程序中取出最近的应用程序,仍然在前台。

我是否以某种方式错误地配置了服务?当我打开屏幕并打开屏幕并处于调试模式时,该应用程序正常工作(关闭屏幕并从最近的应用程序中删除应用程序)。但是,当我移除USB并尝试它时,不是这样。

我希望该服务能够永久运行,并且我希望利用从最近的应用程序移除应用程序时所采取的每一步,当屏幕关闭时等。任何帮助?

感谢。

编辑:只是读取用于长时间运行任务的服务应该使用服务中的线程。它是否正确?我可以看一个使用这种方法的例子。

0 个答案:

没有答案
相关问题