我的代码有一个奇怪的问题,在过去的几天里无法解决。让我这样说:我有两个线程的数组,从2个独立的流中检索图像,并且在每个数据流的屏幕上更新两个图像浏览。因此,stream1更新imageview1和stream2更新imageview2。但是,当我这样做时,流会不断交换图像。也就是说,stream1图像在imageview2上进行,反之亦然。我调试了代码,根据线索索引将图像保存在两个不同的文件夹中,并且看到保存的图像根本不会混淆。我的代码太长,无法发布,但我会尽力缩小范围并提供重要的位。哦,我还添加了日志,看看它们是否继续交换,但看到代码完美运行并且日志证明了它。Multrithreading UI更新android
UPDATE
调用两个线程
if(stream.size() >= 1)
{
try
{
splitScreenLiveThreads[0] = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
LiveImages(0);
}
});
splitScreenLiveThreads[0].start();
}catch(Exception ex){
}
}
if(stream.size() >= 2)
{
try
{
splitScreenLiveThreads[1] = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
LiveImages(1);
}
});
splitScreenLiveThreads[1].start();
}
catch(Exception ex)
{
}
}
更新UI
byte [] b = getImageBytes(thIndex);
final Bitmap bmp = latestFrames[thIndex];
switch (thIndex)
{
case 0:
{
imgView1.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
imgView1.setImageBitmap(bmp);
}
});
//latestFrame.recycle();
break;
}
case 1:
{
imgView2.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
imgView2.setImageBitmap(bmp);
}
});
//latestFrame.recycle();
break;
}
}
thIndex是流索引,而bmp是LiveImages(索引)中的局部变量,所以无论何时我调用getImageBytes [thIndex]它都将检索特定流的字节,因此我创建了一个bmp位图。 –
是否涉及ListView? – Krylez
不,我相信你在看到switch case语句时弹出了这个问题。我在这里使用它来根据threadIndex更新imageview –