在Java中重新启动handler.postDelayed
我试图在调用OnCreate方法时运行处理程序。然后,我想取消处理程序,并在收到用户交互时再次调用它(重新启动处理程序) 我该怎么做在Java中重新启动handler.postDelayed,java,android,android-handler,Java,Android,Android Handler,我试图在调用OnCreate方法时运行处理程序。然后,我想取消处理程序,并在收到用户交互时再次调用它(重新启动处理程序) 我该怎么做 提前感谢您可以使用布尔对象,例如: @Override public void onUserInteraction() { Handler handler = new Handler(); handler.postDelayed(new Runnable () { public void run() { fi
提前感谢您可以使用布尔对象,例如:
@Override
public void onUserInteraction() {
Handler handler = new Handler();
handler.postDelayed(new Runnable () {
public void run() {
finish();
}
}, 5000);
handler.removeCallbacks(null);
}
}
或者你可以做这样的东西:
@Override
public void onUserInteraction() {
isStarted = true;
Handler handler = new Handler();
handler.postDelayed(new Runnable () {
public void run() {
if(isStarted){
finish();
}
}
}, 5000);
可以使用布尔对象,例如:
@Override
public void onUserInteraction() {
Handler handler = new Handler();
handler.postDelayed(new Runnable () {
public void run() {
finish();
}
}, 5000);
handler.removeCallbacks(null);
}
}
或者你可以做这样的东西:
@Override
public void onUserInteraction() {
isStarted = true;
Handler handler = new Handler();
handler.postDelayed(new Runnable () {
public void run() {
if(isStarted){
finish();
}
}
}, 5000);
将runnable和handler存储在字段中并重用它们
Runnable myRunnable = new Runnable() {
@Override
public void run() {
finish();
}
};
public static Handler myHandler = new Handler();
private static final int TIME_TO_WAIT = 5000;
@Override
public void onUserInteraction() {
restart();
}
public void start() {
myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}
public void stop() {
myHandler.removeCallbacks(myRunnable);
}
public void restart() {
myHandler.removeCallbacks(myRunnable);
myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}
将runnable和handler存储在字段中并重用它们
Runnable myRunnable = new Runnable() {
@Override
public void run() {
finish();
}
};
public static Handler myHandler = new Handler();
private static final int TIME_TO_WAIT = 5000;
@Override
public void onUserInteraction() {
restart();
}
public void start() {
myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}
public void stop() {
myHandler.removeCallbacks(myRunnable);
}
public void restart() {
myHandler.removeCallbacks(myRunnable);
myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
}
创建处理程序并将其引用保留为全局变量
Handler handler;
Runnable runnable = new Runnable () {
public void run() {
finish();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handler = new Handler();
handler.postDelayed(runnable, 5000);
}
@Override
public void onUserInteraction() {
handler.removeCallbacks(null);
handler.postDelayed(runnable, 5000);
}
和用户交互
private Runnable runnable;
private Handler newHandler;
newHandler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
try {
//update UI
newHandler.postDelayed(runnable,100);
} catch (Exception e) {
e.printStackTrace();
}
}
};
newHandler.post(runnable);
创建处理程序并将其引用保留为全局变量
Handler handler;
Runnable runnable = new Runnable () {
public void run() {
finish();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handler = new Handler();
handler.postDelayed(runnable, 5000);
}
@Override
public void onUserInteraction() {
handler.removeCallbacks(null);
handler.postDelayed(runnable, 5000);
}
和用户交互
private Runnable runnable;
private Handler newHandler;
newHandler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
try {
//update UI
newHandler.postDelayed(runnable,100);
} catch (Exception e) {
e.printStackTrace();
}
}
};
newHandler.post(runnable);
在我使用Handler的
removecallbacksandsessages(对象令牌)
方法之前,它对我不起作用
论科特林
@Override
public void onUserInteraction() {
super.onUserInteraction();
newHandler.removeCallbacks(runnable);
//Do some task
if(//task done){
newHandler.postDelayed(runnable,100);
}
}
在我使用Handler的
removecallbacksandsessages(对象令牌)
方法之前,它对我不起作用
论科特林
@Override
public void onUserInteraction() {
super.onUserInteraction();
newHandler.removeCallbacks(runnable);
//Do some task
if(//task done){
newHandler.postDelayed(runnable,100);
}
}
谢谢。这适用于触发处理程序代码,但是当我获得另一个用户交互时,我如何取消它并再次调用它呢?基本上,我希望在收到用户交互5秒后关闭应用程序,但如果在5秒之前还有其他交互,则计时器将重新开始为YouTunkyou编辑答案!(但我不需要启动或停止,所以我只使用了重新启动)谢谢。这适用于触发处理程序代码,但是当我获得另一个用户交互时,我如何取消它并再次调用它呢?基本上,我希望在收到用户交互5秒后关闭应用程序,但如果在5秒之前还有其他交互,则计时器将重新开始为YouTunkyou编辑答案!(但我不需要启动或停止,所以我只使用了restart)这部分工作正常,但是userinteraction不会取消名为oncreate的处理程序。这意味着即使用户正在与应用程序交互,应用程序也会在5秒钟后关闭app@hinch我抄了你的电话。尝试使用
handler.removeCallbacksAndMessages(null)代码>这部分起作用,但是userinteraction不会取消名为oncreate的处理程序。这意味着即使用户正在与应用程序交互,应用程序也会在5秒钟后关闭app@hinch我抄了你的电话。尝试使用handler.removeCallbacksAndMessages(null)代码>它说newHandler和runnable没有被分配到哪里会出现错误?在开始或内部UserInteraction方法中?它的工作代码..应该可以正常工作,任何方式更新的代码..立即检查它说newHandler和runnable没有分配到哪里出现错误?在开始或内部UserInteraction方法中?它的工作代码..它应该可以正常工作,任何方式更新的代码..立即检查因为您使用kotlin检查因为您使用kotlin检查