android传感器在服务中改变了

时间:2013-04-08 18:50:28

标签: android

我有一项检查手机是否响铃的服务。在这项服务中,我也在检查手机是否转过来。在服务运行期间一直运行此传感器检查是否有用,或者这对电池和CPU资源有多大影响?

@Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {

            boolean turnAroundToStop = some code is executed

            if (turnAroundToStop) {
                float value = Math.abs(event.values[1]);
                if (value > orientationLim && !stopped) {
                    // Down
                    do some code
                    stopped = true;
                } else {
                    // Up
                    stopped = false;
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

关于CPU和电池,始终运行服务的成本很高。我知道有两个选项可以帮助您减少CPU负载,我建议尽可能使用它们。

选项1:当显示屏开启时,当显示屏关闭并开始维修时停止服务。您可以使用BroadcastReceiver

来实现此目的
public class ScreenReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            // stop service
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            // start service
        }
    }
}

重要提示:以编程方式注册活动:

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver receiver = new ScreenReceiver();
registerReceiver(receiver, filter);

选项2:改为使用AlarmManager:如果在设备待机期间也需要执行传感器检查,则此选项会更好。然而,缺点是它不适合短时间间隔(比方说小于30分钟)。

 public void SetAlarm(Context context) {
    AlarmManager manager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 *60 , pendingIntent);
 }

你可能需要在清单中使用它:

<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>

注意:这些不是完整/正在运行的示例。代码片段应该可以帮助您从正确的关键字开始。希望这有助于...干杯!