我的代码有一个奇怪的问题,在过去几天无法解决。让我这样说吧:我有一个由两个线程组成的数组,它们从两个单独的流中检索图像,并且我正在用每个流更新我屏幕上的两个图像视图。因此,stream1 更新 imageview1,stream2 更新 imageview2。但是,当我这样做时,流会不时地交换图像。也就是说,stream1 图像在 imageview2 上进行,反之亦然。我已经调试了代码以根据线程索引将图像保存在两个不同的文件夹中,并查看保存的图像根本没有混淆。我的代码太长,无法在此发布,但我会尝试缩小范围并列出重要部分。哦,我还添加了日志以查看它们是否继续交换,但看到代码完美运行并且日志证明了这一点。
更新
调用两个线程
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)
{
}
}
更新用户界面
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;
}
}