【问题标题】:Android architecture for background services app consumed by several activities多个活动消耗的后台服务应用程序的 Android 架构
【发布时间】:2012-12-18 03:38:34
【问题描述】:

我正在开发一个 Android 应用程序。 一旦启动,我将创建一个扩展 IntentService 并实现 SensorEventListener 的后台服务。 该类负责监听位置更新和传感器更新,例如来自加速度计的更新。

然后我创建主窗口并检查例如 GPS 是否启用以及其他一些内容。如果一切正确,我从主 Activity 开始另一个。 我是这样创建的:

Intent startDrIntent = new Intent(MainActivity.this, DrActivity.class);
MainActivity.this.startActivity(startDrIntent);

现在我想在 DrActivity 中显示坐标和加速度计值。

在活动中显示这些值的最佳方法是什么? 我能想到这两个:

1) 不知何故,应用程序中的活动处理程序以及每个传感器上的传感服务类或位置更新使用应用程序处理程序(可能是静态的?)并更改 TextView(s) 的值

2) 在应用程序中拥有坐标和传感器的公共静态值,然后从 Activity 中使用它们(这里的问题是如何让 Activity 知道有更新。

3) 有更好的吗?

我不能使用 AsyncTask,因为后台服务将被多个活动消耗,而不仅仅是一个。 提前致谢!吉列尔莫。

【问题讨论】:

  • 为什么没有一个单例对象作为传感器侦听器,活动在其中注册以侦听事件。每次事件到达时,它都会传递给正在监听的活动。

标签: android android-intent


【解决方案1】:

为什么不让 DrActivity 也实现 SensorEventListener?

public class DrActivity implements SensorEventListener
{
    private SensorManager mSensorManager;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    public void onAccuracyChanged(Sensor arg0, int arg1) {
    // TODO Auto-generated method stub

   }

   @Override
   public void onSensorChanged(SensorEvent arg0) 
    {
        // TODO Auto-generated method stub
        if(arg0.sensor.getType()==Sensor.TYPE_LIGHT)
        {
             textLightSensorData.setText("Light Sensor Date:"
           + String.valueOf(arg0.values[0]));
        }
    }
}

【讨论】:

  • 这应该是评论而不是答案。
  • 传感器后台服务由多个活动运行和使用,如标题中所述,所以如果我这样做,其余活动将无法使用传感器数据
  • 任何实现 SensorEventListener 的 Activity 都可以使用传感器数据,不是吗?您甚至可以创建一个实现 SensorEventListener 的 BaseSensorActivity,然后让所有需要获取传感器事件的活动都从 BaseSensorActivity 扩展。
  • 传感器服务独立于活动,而且我还有另一个位置服务,活动也使用它。如果我创建一个扩展 SensorEventListener 的基类(如果我错了,请纠正我),但我将为每个 Activity 初始化一个服务。我知道我可以将其设为静态并且只有一个实例。但我不认为它是一个好的架构。
  • 我不建议在 BaseSensorActivity 中启动新服务。我建议让 BaseSensorActivity 实现 SensorEventListener,然后为您想要获取传感器数据的每个 Activity 扩展 BaseSensorActivity。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多