我有一项服务,每 15 分钟发送一次 gps 更新。问题是一旦我销毁我的服务并重新启动它,现在运行的服务是 2,而我只期望 1。当我已经停止它并启动一个新服务时,之前的服务正在再次执行。如需进一步参考,以下是我创建服务的方式。
Intent i = new Intent(this, BGService.class);
我在一个按钮点击的方法上启动服务:
startService(i);
这是我的服务:
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
intent = new Intent(BROADCAST_ACTION);
powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"MyWakeLock");
}
@Override
public void onStart(Intent intent, int startId) {
handler.removeCallbacks(sendWakeLock);
handler.postDelayed(sendWakeLock, 1000); // 1 second
Log.i("onStart", "onStart");
}
@Override
public void onDestroy(){
super.onDestroy();
Log.i("onDestroy", "onDestroy");
}
private Runnable sendWakeLock = new Runnable() {
public void run() {
try
{
if(!stopSend)
{
sendGPSUpdate();
}
}
finally
{
if(wakeLock != null) {
if(wakeLock.isHeld()) {
wakeLock.release();
}
wakeLock = null;
}
}
handler.postDelayed(this, 900000);
}
};
private void sendGPSUpdate()
{
sendBroadcast(intent);
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
然后回到我的活动,我单击另一个关闭应用程序的按钮,我这样做:
stopService(i);
finish();
补充一下,我有一个广播接收器:
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("Broadcast", "Recieved!");
UpdateCurrentLocati on();
if(BGService.wakeLock == null) {
PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
BGService.wakeLock = powerManager.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK,
"Tag");
}
if(! BGService.wakeLock.isHeld()) {
BGService.wakeLock.acquire();
}
}
};
再一次,当我启动应用程序并再次启动服务时,正如我所说,我有两个正在运行的服务正在发送 gps 更新。顺便说一下,这是后台进程。有任何想法吗?谢谢!