1

我想创建一个服务,它在 10 秒后一遍又一遍地运行一个方法,直到我停止它。它不起作用。有人可以帮助我吗?

package com.example.tauben;


import java.util.Timer;
import java.util.TimerTask;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

public class Reminder extends Service {


@Override
public IBinder onBind(Intent arg0) {
    return null;
}
@Override
public void onCreate() {
    TimerTask task = new TimerTask() {
        public void run(){
            f();
        }
    };
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(task, 0, 10000);
}
public void f(){
    Toast t = Toast.makeText(this, "Service is still running", Toast.LENGTH_SHORT);
    t.show();
}

}

这就是我启动服务的方式。

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d(Log_TAG,"_____________RESTART__________");

    Intent i= new Intent(this, Reminder.class);
    startService(i); 
}
4

2 回答 2

1

好吧,我可以想到您在这里要实现的目标的 2 个替代方案。

1-TimerTask在集合中使用一个重复任务,该任务将每 10 秒调用一次所需的方法。

2- 的使用setRepeating方法AlarmManager

这两种选择都更好。您可以谷歌搜索两者的示例以获得更好的理解。

快乐编码:)

编辑:-我似乎让您的原始代码使用Handler'spostDelayed()

package com.example.tauben;


import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.widget.Toast;

public class Reminder extends Service {

Handler mHandler;

@Override
public IBinder onBind(Intent arg0) {
    return null;
}
@Override
public void onCreate() {
    mHandler = new Handler();
    Runnable r = new Runnable() {
        @override 
        public void run() {
            f();
            mHandler.postDelayed(this, 10000);
        }
    };
    mHandler.postDelayed(r, 10000);
}
public void f(){
    Toast t = Toast.makeText(this, "Service is still running", Toast.LENGTH_SHORT);
    t.show();
}

}
于 2013-10-25T13:21:10.870 回答
0

您需要做的是绑定到服务并声明服务客户端可以停止服务的方法。在该方法中,您必须调用 handler.removeCallbacksAndMessages(null) 来取消所有可运行的任务。

于 2013-10-25T13:22:53.973 回答