0

在我的 Android 应用程序中,我在按钮的 onclick 中启动了一个线程。线程工作正常。

我想防止用户在收到第一个响应之前再次单击相同的按钮。它导致另一个线程的启动。请帮助我处理android中的线程和事件。

4

3 回答 3

0

您可以添加一个布尔变量,例如

isFirstThreadEnded = false;

并添加一个方法

public void onFirstThreadEnded {
isFirstThreadEnded = true;
}

并让线程在他完成第一轮时调用此方法。并在 onClick 事件上检查该值是否在运行之前为真。

这只是一个罪孽,你应该在第一个线程加载之前处理第一次点击更复杂一点,但这是一般的想法

一个例子:

在你的线程中:

private IntentService myIntentService;

public MyThread (IntentService intentService) {
 myIntentService = intentService;
}

@Override
public void run()
{
//do your thread stuff
//when finished call onFirstThreadEnded inside myIntentService
somecode()
myIntentService.onFirstThreadEnded();
}

在您的 IntentService 中:

private boolean isFirstThreadEnded = false;

public void startThread()
{
  button.setOnClickListener(new View.OnClickListener() {

   @Override
   public void onClick(View v) {
    if (isFirstThreaEnded)
            new MyThread(this).start();
  });
}

public void onFirstThreadEnded()
{
 isFirstThreadEnded = true;
}

它应该是这样的......但你仍然需要处理第一个运行的线程,因为 isFirstThreadEnded 的默认值为 false;

于 2012-09-17T09:38:52.693 回答
0

当用户单击按钮时,使用禁用按钮,button.setEnabled(false)并在线程结束时使用启用按钮button.setEnabled(true)

希望这可以帮助你

于 2012-09-17T09:43:56.700 回答
0

您还可以确保只能打开线程的“一个”实例。为此,您必须执行以下操作。

public class ThreadClass{
    private static ThreadClass instance;

    public static ThreadClass getInstance(){

        if(instance == null){
            instance = new ThreadClass();
        }

        return instance;
    }

    private ThreadClass(){
    //Set the constructor to private
    }
}

然后你可以访问踏面实例

private newThread= ThreadClass.getInstance();

因此也确保了该线程只存在一个实例。

于 2012-09-17T09:47:52.970 回答