java - 将类转换为服务

标签 java android sensormanager

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

我考虑过转换为单例来防止这种情况,但后来我认为它作为服务运行会更好,这样在应用程序不运行时仍然会计算步骤(我认为这就是它的工作原理?) .

如何最好地将类转换为可以在 list 文件中标记的服务?我需要访问应用程序上下文,因此我不确定如何通过 list 文件的启动来传递它。

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?

但就您而言,您可能还希望将其设为绑定(bind)服务,以便您的 Activity 可以连接到它并从中获取步骤信息。

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

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

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

关于java - 将类转换为服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60382338/

相关文章:

java - 即使设置可取消为 true 后,自定义对话框也不会取消

java - 需要在等待函数上下文中实现 Thread.sleep(100) 来评估 sleep 时间?

android - 将 Android 标准输出和标准错误消息的 FFMPEG 重定向回 TextView 控件

android - 什么是陀螺仪和加速度计以及它们在 Android 中的使用方式

java - Spring ControllerAdvice 不会因某些异常而触发其他异常

java - 如何使用 JavaMail 从子文件夹获取邮件?

Android - 使 ExpandableListView 元素具有透明背景

android - 在没有扩展类 Activity 的情况下,如何从联系人那里获取电子邮件 ID 并从联系人那里获取电话号码?

java - android中连续收到震动信号