在我的 Android 应用程序中,我在按钮的 onclick 中启动了一个线程。线程工作正常。
我想防止用户在收到第一个响应之前再次单击相同的按钮。它导致另一个线程的启动。请帮助我处理android中的线程和事件。
在我的 Android 应用程序中,我在按钮的 onclick 中启动了一个线程。线程工作正常。
我想防止用户在收到第一个响应之前再次单击相同的按钮。它导致另一个线程的启动。请帮助我处理android中的线程和事件。
您可以添加一个布尔变量,例如
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;
当用户单击按钮时,使用禁用按钮,button.setEnabled(false)
并在线程结束时使用启用按钮button.setEnabled(true)
希望这可以帮助你
您还可以确保只能打开线程的“一个”实例。为此,您必须执行以下操作。
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();
因此也确保了该线程只存在一个实例。