我试图阻止我的应用程序在双击事件中调用同一方法两次,或者用户几乎同时快速按下不同的按钮。Android:停止方法被调用两次,如果已经运行
我有点击视图,作为按钮,调用相同的方法,但传递不同的参数。这是呼叫:
startTheSearch(context, getState(), what, where);
在此方法中,我创建一个新的线程,因为它将查询结果的Web服务器:
new Thread(new Runnable() {
public void run() {
progDiag = ProgressDialog.show(ctx, null, "Searching", true);
getServerXML(context, what, where, searchIsCustom, mOffset);
handler.sendEmptyMessage(0);
}
}).start();
的问题是,在两个快速点击时,方法被激发两次,两个线程被创建,因此创建了两个新的活动。这使我的应用程序崩溃。
当方法完成后,我们有来自服务器的结果,我们所说的处理程序:
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
try {
Intent i = new Intent(Golf.this, Result.class);
Bundle b = new Bundle();
b.putString("what", mWhat);
b.putString("where", mWhere);
b.putInt("offset", mOffset);
b.putBoolean("searchIsCustom", searchIsCustom);
i.putExtras(b);
startActivityForResult(i, Activity.RESULT_OK);
progDiag.dismiss();
} catch (Exception e) {
Alerts.generalDialogAlert("Error", "settings", ctx);
}
}
};
我想有称为全局布尔变量“封锁”最初设置为false,创建条件,如:
if(!blocked){
blocked = true;
new Thread(new Runnable() {
public void run() {
但这似乎只是速度较慢的手机上工作,如G1,我试图在Nexus,并将其设置阻塞= TRUE之前,第二请求已经获得了批准。那么有没有什么办法阻止被调用的方法,如果它已经运行,或者如果线程已经启动,所以它不会创建一个新的?