线程和事件处理程序Android

时间:2012-09-17 09:28:04

标签: android multithreading

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

我想阻止用户在收到第一个回复之前再次点击相同的按钮。它导致另一个线程的开始。请帮我解决android中的线程和事件处理。

3 个答案:

答案 0 :(得分:0)

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

  

isFirstThreadEnded = false;

并添加方法

public void onFirstThreadEnded {
isFirstThreadEnded = true;
}

并让线程在完成第一轮时调用此方法。 并在onClick事件上检查该值是否为true,然后再运行。

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

一个例子:

在你的主题中:

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;

答案 1 :(得分:0)

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

启用该按钮

希望这有助于你

答案 2 :(得分: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
    }
}

然后您可以使用

访问tread-instance
private newThread= ThreadClass.getInstance();

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