0

我的问题与 Android 相关:如何在 intentservice 中每 20 秒运行一次任务?问题是,我必须初始化一些将在处理程序“运行”过程中使用的类。它工作了一次 - 但随后服务停止并且当处理程序循环在 20 秒后再次启动时应用程序崩溃(可能是因为服务停止时消除了类?)。所以也许解决方案是让服务在处理程序运行时保持运行,或者丢弃代码并做对?

希望可以有人帮帮我。

public class Fadenzieher extends IntentService{

 private Handler handler = new Handler();

 private Runnable timedTask = new Runnable(){

      @Override
      public void run() {

    // My functions get called here... 
            // class1member.getDBWorkdone(); 

       handler.postDelayed(timedTask, 20000); 
       handler.obtainMessage();

      }};

public Fadenzieher() {
    super("Fadenzieher");

}

@Override
  protected void onHandleIntent(Intent intent) {

    // SOME INITIALISING
    // I have to init some vars & functions here that 
            // will also be used inside the handler loop
            // Class1 class1member = new Class1();
    // class1member.startUpDB();

          handler.post(timedTask); }

非常感谢您提前!!!

----所以这是现在更新的代码(2011 年 11 月 14 日)

public class Fadenzieher extends Service{
  private static final long UPDATE_INTERVAL = 60000;
Context context = this;
private Timer timer = new Timer();
DbHelper dbHelper;

public void onCreate(){
dbHelper = new DbHelper(context);
runTheLoop();
}

 protected void runTheLoop() {

    timer.scheduleAtFixedRate(new TimerTask(){
        @Override
        public void run() {

        dbHelper.dosomethings();
        Toast.makeText(context, "CALL", Toast.LENGTH_LONG).show();
        }}, 0, UPDATE_INTERVAL);

  }

@Override   
public int onStartCommand(Intent intent, int flags, int startId) {
    Toast.makeText(this, "Starte Service“, Toast.LENGTH_SHORT).show();

   return super.onStartCommand(intent,flags,startId);
}

public void onDestroy() {
    super.onDestroy();
    dbHelper.close();
    Toast.makeText(this, "Stoppe Service“, Toast.LENGTH_LONG).show();

}

// We return the binder class upon a call of bindService
@Override
public IBinder onBind(Intent arg0) {
    return mBinder;
}

public class MyBinder extends Binder {
    Fadenzieher getService() {
        return Fadenzieher.this;
    }
}

}

整个应用程序立即崩溃。

4

1 回答 1

4

如何在 intentservice 中每 20 秒运行一次任务?

这不是IntentService. 请使用普通Service的。

它工作一次 - 但随后服务停止并且当处理程序循环在 20 秒后再次启动时应用程序崩溃

IntentService返回时关闭onHandleIntent(),这就是为什么这对您不利。请使用普通Service的。

还:

  • 请允许用户配置轮询周期
  • 确保当用户不再希望它运行时,该服务将关闭
于 2011-11-12T12:29:32.563 回答