不幸的是,正如其他答案所建议的那样,您设置的延迟(或采样率)只是您的应用程序所需的最小值的建议(对于系统),但是,这可能会根据正在运行的其他应用程序或您的设备进入省电模式而发生巨大变化模式(关闭 CPU 等)。我能够获得较好的采样率的一种方法是记录来自服务的数据,使该服务成为前台服务并使用标志 PARTIAL_WAKE_LOCK 进行电源锁定。
我把代码放在这个要点
https://gist.github.com/julian-ramos/6ee7ad8a74ee4b442530
该要点的代码比您需要的要多,但请注意接下来的两种方法
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// //Power management
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
wl.acquire();
.....}
上面的代码防止操作系统关闭 CPU
现在让这个服务成为前台服务
NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(getApplicationContext())
.setContentTitle("Title")
.setContentText("hola")
.setContentIntent(viewPendingIntent);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
not=notificationBuilder.build();
notificationManager.notify(notificationId,not );
startForeground(notificationId, not);
与普通服务不同,上面的代码使服务成为操作系统的优先级。例如,前台服务的示例是音乐播放器。
使用此代码,即使在手表自动关闭屏幕后,我也能够获得所需的采样率。