【问题标题】:Service running AsyncTask over and over in onCreate() method在 onCreate() 方法中反复运行 AsyncTask 的服务
【发布时间】:2011-09-27 23:06:46
【问题描述】:

我有一个在发送警报时运行的服务。

问题是服务会自动运行几个小时。

我只希望它在警报执行时运行一次。

这是我正在使用的代码:

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public void onStart(Intent intent, int startId) {
   loadList service_release = new loadList();
    service_release.execute();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return startId;

}

@Override
public void onCreate(){
    super.onCreate();
        loadList service_release = new loadList();
    service_release.execute();
            }

有人告诉我应该移动 AsyncTask 以在 onStartCommand() 中执行。但是我在文档中没有看到任何可以通过这样做来解决我的问题的内容。

我需要做什么才能让它运行一次并且不要在警报响起后的整个时间段内一遍又一遍地运行?

编辑:

我的闹钟是这样设置的..

String alarm = Context.ALARM_SERVICE;

AlarmManager am = (AlarmManager)getSystemService(alarm);

Intent Aintent = new Intent("REFRESH_THIS");
PendingIntent pi = PendingIntent.getBroadcast(this, 0, Aintent, 0);

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.FRIDAY, );
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 4 * AlarmManager.INTERVAL_DAY, AlarmManager.INTERVAL_DAY, pi);

【问题讨论】:

  • 我不确定你为什么要在 Service 中使用 AsyncTask - AsyncTask 主要设计用于在 UI 上下文中工作。此外,onStart(...) 已被弃用,您应该改用onStartCommand(...)。但是,除此之外,您还没有提供足够的信息 - 如果 AsyncTask 被一遍又一遍地运行,那么这表明 Service 正在一遍又一遍地启动。在不知道“警报”是如何设置/触发的(以及您的AsyncTask 的样子)的情况下,很难提供帮助。

标签: android android-asynctask android-service


【解决方案1】:

你有一个重复的警报,这意味着它会被重复触发,并在每次触发时启动服务。如果你不需要它重复,设置一个不重复的闹钟,使用AlarmManager.set()

【讨论】:

  • 我希望它每 4 天重复一次
  • 也许你有一些旧闹钟。运行adb shell dumpsys alarm 以检查已注册的内容。另外你setRepeating() 调用看起来不对:第一个参数是'triggerAtTime',第二个'interval',你所拥有的将在 4 天后触发第一个警报,之后每天重复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多