Android:在意图服务中的特定时间停止处理程序
我有一个启动处理程序的intentService,但在一段时间后,我需要停止处理程序。我不知道该怎么做。我有下面的类,但我不确定一旦到达时间,或者当某个小时/分钟的时间过去时,如何停止处理程序。我希望这是尽可能有效的请Android:在意图服务中的特定时间停止处理程序,android,performance,android-handler,Android,Performance,Android Handler,我有一个启动处理程序的intentService,但在一段时间后,我需要停止处理程序。我不知道该怎么做。我有下面的类,但我不确定一旦到达时间,或者当某个小时/分钟的时间过去时,如何停止处理程序。我希望这是尽可能有效的请 public class RedirectService extends IntentService { private Handler handler; private Runnable runnable = new Runnable() { @Ov
public class RedirectService extends IntentService {
private Handler handler;
private Runnable runnable = new Runnable() {
@Override
public void run() {
foobar();
handler.postDelayed(this, 2000);
}
};
public LockedRedirectService() {
super("RedirectService");
}
@Override
protected void onHandleIntent(Intent redirectIntent) {
// Gets data from the incoming Intent
int hour = redirectIntent.getIntExtra("hour", 0);
int min = redirectIntent.getIntExtra("minute", 0);
handler.postDelayed(runnable, 2000);
handler.removeCallbacks(runnable);
}
}
启动一个新线程并等待。时间到了,停止并移除runnable。 或者使用处理程序发布另一个延迟的runnable以停止并删除工作runnable
public class RedirectService extends IntentService {
private Handler handler;
private boolean mRun = false;
private Runnable runnable = new Runnable() {
@Override
public void run() {
if (mRun) {
foobar();
handler.postDelayed(this, 2000);
}
}
};
public LockedRedirectService() {
super("RedirectService");
}
@Override
protected void onHandleIntent(Intent redirectIntent) {
// Gets data from the incoming Intent
final int hour = redirectIntent.getIntExtra("hour", 0);
final int min = redirectIntent.getIntExtra("minute", 0);
mRun = true;
handler.postDelayed(runnable, 2000);
//handler.removeCallbacks(runnable);
new Thread(new Runnable() {
@Override
public void run() {
Thread.currentThread();
try {
Thread.sleep((hour * 60 + min) * 60 * 1000);
} catch (Exception ignore) {}
mRun = false;
handler.removeCallbacks(runnable);
}
}).start();
/* or use handler
handler.postDelayed(new Runnable() {
@Override
public void run() {
mRun = false;
handler.removeCallbacks(runnable);
}
}, (hour * 60 + min) * 60 * 1000);
*/
}
}