开发者

Stop unBound service in Android

I have a service that autoupdates a 开发者_Go百科database in a given time interval. To do this it gets information from the Internet.

I need to have it unbound, so that It runs over all activities. But when the application is closed, it would be nice to terminate the service. To prevent battery drain. How can this be achieved?


I think that you should let your service be started by a boot broadcastReceiver, then ask AlarmManager to relaunch it every now and then.

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;
  }

}

To start your service at boot time use this :

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);
  }

}

Finally add this to your manifest to schedule your serviceAutoLauncher to be launched at each boot:

    <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>


Use the stopService method.


It depends on how you start the service. If you start it when your Activity is opened, then call stopService in your Activities onDestroy().

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜