【发布时间】:2010-03-03 23:46:18
【问题描述】:
我试图防止我的应用程序在双击时调用相同的方法两次,或者如果用户几乎同时快速按下不同的按钮。
我有可点击的视图,充当按钮,调用相同的方法但传递不同的参数。这是电话:
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);
}
}
};
我尝试将一个名为“blocked”的全局布尔变量最初设置为 false,从而创建如下条件:
if(!blocked){
blocked = true;
new Thread(new Runnable() {
public void run() {
但这似乎只适用于 G1 等速度较慢的手机,我在 Nexus 上尝试过,在它设置阻塞 = true 之前,第二个请求已被批准。那么有什么方法可以阻止正在调用的方法,如果它已经在运行,或者如果线程已经启动,所以它不会创建一个新的?
【问题讨论】:
标签: android multithreading methods