Java 由onclicklistener生成的重复线程
我有一个带有onclicklistener的按钮,可以从internet下载图片并在UI线程中更新进度条。当用户第一次点击按钮时,它工作正常,但是如果用户点击按钮几秒钟&。。。当下载未完成时,会发生重复的过程。如何解决此问题Java 由onclicklistener生成的重复线程,java,android,multithreading,duplicates,Java,Android,Multithreading,Duplicates,我有一个带有onclicklistener的按钮,可以从internet下载图片并在UI线程中更新进度条。当用户第一次点击按钮时,它工作正常,但是如果用户点击按钮几秒钟&。。。当下载未完成时,会发生重复的过程。如何解决此问题 Button btnDownload = (Button) findViewById(R.id.btndownload); final TextView txtcaption = (TextView) findViewById(R.id.txtcaption
Button btnDownload = (Button) findViewById(R.id.btndownload);
final TextView txtcaption = (TextView) findViewById(R.id.txtcaption);
final ProgressBar progress = (ProgressBar) findViewById(R.id.progress);
btnDownload.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
new Thread(new Runnable() {
OnProgressDownloadListener listener = new OnProgressDownloadListener() {
@Override
public void progressDownload(final int percent) {
new HANDLER.post(new Runnable() {
@Override
public void run() {
progress.setProgress(percent);
txtcaption.setText(percent + " %");
if (percent >= 100) {
txtcaption.setText("completed");
Toast.makeText(activity.this, "download completed", Toast.LENGTH_SHORT).show();
}
}
});
}
};
@Override
public void run() {
//my download manager
FileDownloader.download("address/file", DIR + "/file");
}
}).start();
}
});
}
在类中有一个初始化为NULL的线程变量。在onClickListener中,检查该变量的值。如果为null,则启动一个新线程并将该线程的值保存在变量中。如果不是,请忽略按钮的按下或弹出一个下载的祝酒词。记住在线程完成时将变量设置回null
我强烈建议使用AsyncTask而不是线程,这样会更干净。一个简单的方法是: 首先,首先声明一个线程。。。
Thread
然后创建一个简单的方法,其中包含您希望在按下按钮时执行的线程
private void getPicture()
{
myThread = new Thread()
{
public void run()
{
// Place thread code here...
}
};
myThread.start();
}
然后,您可以在按下按钮时进行简单检查,如果线程处于活动状态,则不要调用getPicture
方法…buttonDownload.setOnClickListener(new View.OnClickListener())
一旦开始下载,请禁用该按钮,或者在开始下载时设置一个标志。是什么让这不够“好”
{
@Override
public void onClick(View view)
{
if (myThread.isAlive())
{
// Thread is alive, do not launch again
}
else
{
// Thread is not running so call method...
getPicture();
}
}
});