我有一个任务,需要周期性地在后端读取手机传感器(例如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); }
在“AutoLogging”程序中(一个服务),我们定期响应闹钟:
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(); // 在这里读取传感器数据 }
@Override public IBinder onBind(Intent intent) { Toast.makeText(this, "onBind", Toast.LENGTH_SHORT).show(); return null; } }
我的问题是:
当我使用这个alarm service时,每次闹钟只会调用OnCreate和OnStart。
我的问题是:
(1) 我需要调用OnDestroy(或onBind、onUnbind)吗?
(2) 与“广播接收器”相比,这种使用AlarmManager的方式是否正确?
谢谢! Vincent