如果另一个相同的开始,如何停止线程

时间:2011-06-18 17:33:08

标签: android multithreading

每次用户按下按钮时,都会执行以下代码。

new Thread() {
    @Override
    public void run() {
        aA = new albumArt(foo.getField("albumArt"),albumArt.GLOSSY_1, albumart,getBaseContext());
        runOnUiThread(new Runnable() {
            public void run() {
                    aA.placeAlbumArt();
            }
        });
    }
}.start();

这有一个问题:

例如: 用户按下按钮=>图像A开始下载。 用户按下按钮(在图像A完成之前)=>图像B开始下载。

图像B完成(在图像A 之前)下载然后显示(使用aA.placeAlbumArt())。 图像A完成并替换图像B。

如果图像B稍后完成,我怎么能避免它取代图像B?

我的意思是,如果在第一个完成之前另一个(图像B)开始,我有什么方法可以取消一个线程(图像A)?

这也有助于不排队大量点击并无用地完成整个过程。我的意思是,如果用户在图像A完成之前按下按钮,则完成处理图像A是没有意义的。如果用户在图像A完成之前按下按钮5次,则下载图像A,B,C和D.它应该只下载E(第五次点击)。

3 个答案:

答案 0 :(得分:2)

如果您使用AsyncTask,那么可以cancel。你应该能够在没有太多麻烦的情况下将你的线程换成AsyncTask。

答案 1 :(得分:0)

我认为您可以禁用按钮上的单击,直到下载图像A,然后再次启用clic以便让用户下载第二张图像B,依此类推。

在下载图像A或B或...等时,您可以显示一个甜蜜的信息告诉用户等待,例如:等待......等等

答案 2 :(得分:0)

简单解决方案:将您的线程放在Thread类型的静态变量中。如果在创建之前它不为空,则中断它。