将 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();
我已经实现了一个步数计数 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();