【发布时间】:2011-09-08 09:17:43
【问题描述】:
我想在用户执行某些操作(例如长按)后立即暂停“事件线程”/活动,并在用户执行某些其他操作(简单单击)时取消暂停。问题是,在我长按后,事件线程进入等待队列。所以当一个简单的点击时,不会被拦截。我如何实现这一目标?请注意,我不想通过显示一些进度对话框等来暂停活动,我想在前台保留我的活动并暂停。这是我尝试过的:/
final Thread t = new Thread(new Runnable() {
@Override
public void run() {
synchronized(this){
try {
this.notify();
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
vg.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
try {
synchronized(this){
this.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return true;
}
});
vg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
synchronized(this){
t.start();}
}
});
【问题讨论】:
-
所有 Ui 事件都发生在一个线程中,因此在该线程上调用 wait 将导致所有事件在队列中等待。因此,您的应用程序将进入死锁。我看不出有任何方法可以完成这项工作。
-
@userSeven7s :我想我不会称之为死锁,它只是让主线程等待,并且有人应该对该对象调用通知,有人可能是另一个非事件或后台线程也是如此,所以它不是死锁。在我的情况下,我将主线程发送为(某种)睡眠状态,它不能听“任何东西”..
-
如果您的应用在 5 秒内没有响应,那么操作系统将显示一个带有抱歉消息的对话框,这只是说它的处理方式不可靠。而且它对用户不友好,它会让用户感到沮丧。我认为没有必要这样做。
-
您可以在此上方创建一个不可见的活动并捕获点击! while pause 后面的活动被暂停!当点击发生时,您将返回上一个活动。如果这是一个答案,请告诉我发布它..还有一件事!要创建空活动,请检查 sherifandroid.blogspot.com/2011/08/creating-global-dialogs.html 我已经做到了
-
@ntc 我有这样做的要求,它由用户操作(单击/长按)触发/未触发,因此用户可以控制它。
标签: android