Android:如果已经运行,则停止方法将被调用两次

Android:如果已经运行,则停止方法将被调用两次,第1张

概述我试图防止我的应用程序在双击或两次或几乎同时在用户快速按下不同按钮的情况下两次调用相同方法.我有可单击的视图,充当按钮,它们调用相同的方法但传递不同的参数.这是电话:startTheSearch(context,getState(),what,where);在此方法内部,我正在创建一个新的线程,因为它在We

我试图防止我的应用程序在双击或两次或几乎同时在用户快速按下不同按钮的情况下两次调用相同方法.

我有可单击的视图,充当按钮,它们调用相同的方法但传递不同的参数.这是电话:

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() {@OverrIDepublic 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上尝试过,在将其设置为blocked = true之前,第二个请求已被批准.那么,有什么方法可以阻止被调用的方法(如果它已经在运行),或者如果线程已经启动,因此不会创建新的方法?

解决方法:

您可以使用互斥锁来研究而不是使用“阻止的”布尔值.它们是针对此类问题而设计的.

总结

以上是内存溢出为你收集整理的Android:如果已经运行,则停止方法将被调用两次全部内容,希望文章能够帮你解决Android:如果已经运行,则停止方法将被调用两次所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1082351.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存