1

我有一项服务可以检查电话是否在响铃。在这项服务中,我还会检查电话是否转机。在服务运行时一直运行此传感器检查是否很好,或者这对电池和 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;
                }
            }
        }
    }
4

1 回答 1

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>

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

于 2013-04-08T19:40:53.037 回答