我有一个在给定时间间隔内自动更新数据库的服务。为了做到这一点,它从互联网获取信息。
我需要将它解除绑定,这样它才能在所有活动上运行。但当应用程序关闭时,最好终止该服务。以防止电池耗尽。如何才能做到这一点?
发布于 2011-09-27 23:29:05
我认为你应该让你的服务由一个引导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>发布于 2011-09-27 23:12:23
使用stopService方法。
发布于 2011-09-27 23:12:35
这取决于您如何启动服务。如果在打开活动时启动它,则在活动onDestroy()中调用stopService。
https://stackoverflow.com/questions/7571438
复制相似问题