Android AlarmManager用于周期性传感器读数

我有一项任务是定期读取后端的手机传感器(例如WiFi,加速计)。

我目前的解决方案是使用AlarmManager。

具体来说,我们有:

在“主”程序(一个活动)中,我们使用PendingIntent.getService:

public class Main extends Activity {
...
Intent intent = new Intent(this, AutoLogging.class);
mAlarmSender = PendingIntent.getService(this, 0, intent, 0);
am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC, 0, 5*1000, mAlarmSender);
}

在“自动记录”程序(一项服务)中,我们定期对警报作出响应:

public class AutoLogging extends Service {
...
@Override
public void onCreate() {
   Toast.makeText(this, "onCreate", Toast.LENGTH_SHORT).show();
}

@Override
public void onDestroy() {
   super.onDestroy();
   Toast.makeText(this, "onDestroy", Toast.LENGTH_SHORT).show();
}

@Override
public boolean onUnbind(Intent intent) {
   Toast.makeText(this, "onUnbind", Toast.LENGTH_SHORT).show()
   return super.onUnbind(intent);
}

@Override
public void onStart(Intent intent, int startId) {
   super.onStart(intent, startId);
   Toast.makeText(this, "onStart", Toast.LENGTH_SHORT).show();
   // Read sensor data here
}

@Override
   public IBinder onBind(Intent intent) {
   Toast.makeText(this, "onBind", Toast.LENGTH_SHORT).show();
   return null;
}
}

我的问题是:

当我使用这个警报服务时,每个警报只会调用OnCreate和OnStart。

我的问题是:

(1)我们是否需要调用OnDestroy(或onBind,onUnbind)?

(2)这是使用AlarmManager的正确方法吗(与“broadcase receiver”相比)?

谢谢! 文森特


AlarmManager只是使用挂起的意图并执行意向操作,即在您的案例中启动服务。使用onCreate(如果它尚未运行)创建警报过期服务,然后通过调用onStart启动。 读完传感器数据后,可以使用stopSelf()来停止服务,stopSelf()将最终调用onDestroy()。您不应该在服务中明确地调用onDesind(),onBind()或onUnBind()。

如果您使用广播接收器与警报管理器,您必须在接收器的接收器中启动此服务。在这种情况下,使用服务似乎适合我。

链接地址: http://www.djcxy.com/p/62619.html

上一篇: Android AlarmManager for periodical sensor reading

下一篇: Push Notification without APNS having secure Intranet