我可以在服务中使用此代码来调用延迟方法,或Handler()
只能在UI
线程中使用吗?
在service
内调用延迟方法的最佳方法是什么?
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 10000ms
socket.emit("CancelTravel");
}
}, 10000);
答案 0 :(得分:3)
Handler()
只能在UI线程中使用?
是 Handler()
仅在UI
主题上有用,如果您想在普通主题上使用,则需要实施looper
示例代码
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 10000ms
socket.emit("CancelTravel");
}
}, 5000);
您也可以使用Timer
线程的工具,用于在后台线程中安排将来执行的任务。任务可以安排为一次性执行,也可以定期重复执行。
示例代码
new Timer().schedule(new TimerTask() {
@Override
public void run() {
//Do something after 10000ms
socket.emit("CancelTravel");
}
}, 10000);
在服务中调用延迟方法的首选方法是什么?
答案 1 :(得分:1)
您可以在服务中使用延迟:
private Handler handler = null;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
...
handler = new Handler();
...
}
...
// from inside your child thread
handler.post(new Runnable() {
@Override
public void run() {
//your code goes here
}
});
答案 2 :(得分:1)
//此代码可用于设置延迟10秒。是的,可以使用
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 10000ms
socket.emit("CancelTravel");
}
}, 10000);
答案 3 :(得分:0)
你可以确保你已经在主线程上使用了处理程序实例,这样你就可以在主线程上运行post()runnable。
只需对代码进行一些修改即可实现,如下所示。
final Handler handler = new Handler(Looper.getMainLooper());