在Android中停止unBound服务

时间:2011-09-27 15:09:54

标签: android android-service

我有一个服务,可以在给定的时间间隔内自动更新数据库。为此,它从互联网获取信息。

我需要将其解除绑定,以便它可以运行所有活动。但是当应用程序关闭时,终止服务会很好。为防止电池耗尽。如何实现这一目标?

3 个答案:

答案 0 :(得分:2)

我认为您应该通过boot broadcastReceiver启动服务,然后让AlarmManager不时重新启动它。

public class DbUpdateService extends Service {
  //compat to support older devices
  @Override
  public void onStart(Intent intent, int startId) {
      onStartCommand(intent, 0, startId);
  }


  @Override
  public int onStartCommand (Intent intent, int flags, int startId){
   //your method to update the database
   UpdateTheDatabaseOnceNow();

   //reschedule me to check again tomorrow
    Intent serviceIntent = new Intent(DbUpdateService.this,DbUpdateService.class);
    PendingIntent restartServiceIntent = PendingIntent.getService(DbUpdateService.this, 0, serviceIntent,0);
    AlarmManager alarms = (AlarmManager)getSystemService(ALARM_SERVICE);
    // cancel previous alarm
    alarms.cancel(restartServiceIntent);
    // schedule alarm for today + 1 day
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DATE, 1);

    // schedule the alarm
    alarms.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), restartServiceIntent);
    return Service.START_STICKY;
  }

}

要在启动时启动服务,请使用以下命令:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class serviceAutoLauncher  extends BroadcastReceiver{

@Override
  public void onReceive(Context context, Intent intent) {
      Intent serviceIntent = new Intent(context,DbUpdateService.class);
      context.startService(serviceIntent);
  }

}

最后将此添加到您的清单中,以安排在每次启动时启动serviceAutoLauncher:

    <receiver android:name="serviceAutoLauncher">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            <category android:name="android.intent.category.HOME"></category>
        </intent-filter>
    </receiver>

答案 1 :(得分:0)

使用stopService方法。

答案 2 :(得分:0)

这取决于您如何启动服务。如果在打开Activity时启动它,则在Activities onDestroy()中调用stopService。