将 class 转换为服务

Converting a class to a service

我已经实现了一个步数计数 class 似乎工作正常,但是我从主 activity 实例化它并且每次加载主 activity 的另一个实例class 已创建,导致添加了重复的步骤。

我考虑过转换为单例以防止这种情况发生,但后来我认为将其 运行 作为一项服务会更好,这样在应用程序未 运行 时仍会计算步数ning(我想这就是它的工作原理?)。

如何最好地将 class 转换为我可以在清单文件中贴标的服务?我需要访问应用程序上下文,所以我不确定如何通过清单文件中的启动传递它。

public class StepCountingService implements SensorEventListener
{
    private SensorManager sensorManager;

    public StepCountingService(Context context)
    {
        //initialise class
    }

    @Override
    public void onSensorChanged(SensorEvent event)
    {
        //step update logic
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy)
    {

    }
}

服务是一种选择,您必须将其设为前台服务,以防止 Android 在用户未使用您的应用时杀死您的应用。我在这里回答了一个关于如何做到这一点的类似问题:

How to create an always on background service which detect when WiFi, Bluetooth and Mobile Data are turned on and off?

但在您的情况下,您可能还希望将其设为绑定服务,以便您的 activity 可以连接到它并从中获取步骤信息。

https://developer.android.com/guide/components/bound-services

或者,您可以让您的服务更新数据库(或共享首选项文件),然后 activity 可以简单地查询数据库,您将不需要绑定到服务。

关于访问应用程序上下文,服务是上下文包装器,因此它们无需传入任何内容即可访问应用程序上下文。

我会做成单例的,其实很简单:

将此代码添加(修改)到 class。

class count {

    private static count n = null;

    public static count getInstance(){
        if (n == null){
            n = new count();
        }

        return n;
    }

    private count(){
        //constructor
    }
}

到主文件:

count n = count.getInstance();