首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在安卓系统中停止unBound服务

在安卓系统中停止unBound服务
EN

Stack Overflow用户
提问于 2011-09-27 23:09:54
回答 3查看 1.6K关注 0票数 1

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

我需要将它解除绑定,这样它才能在所有活动上运行。但当应用程序关闭时,最好终止该服务。以防止电池耗尽。如何才能做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-27 23:29:05

我认为你应该让你的服务由一个引导broadcastReceiver启动,然后让AlarmManager时不时地重新启动它。

代码语言:javascript
复制
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;
  }

}

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

代码语言:javascript
复制
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在每次引导时启动:

代码语言:javascript
复制
    <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>
票数 2
EN

Stack Overflow用户

发布于 2011-09-27 23:12:23

使用stopService方法。

票数 0
EN

Stack Overflow用户

发布于 2011-09-27 23:12:35

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7571438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档