0

我的代码有一个奇怪的问题,在过去几天无法解决。让我这样说吧:我有一个由两个线程组成的数组,它们从两个单独的流中检索图像,并且我正在用每个流更新我屏幕上的两个图像视图。因此,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;
    }
    }
4

2 回答 2

0

对的人,我设法解决了我的问题,这是我的代码中的一个错误......刚刚意识到我的愚蠢程度以及我试图修复它的时间。基本上我试图通过处理一些位图来进行一些内存管理,其中有一个全局位图变量我用作中间变量,由两个线程共享,这导致了问题。

于 2013-08-01T09:24:31.060 回答
-2

我很确定你应该使用 Handler 。(http://developer.android.com/reference/android/os/Handler.html

于 2013-07-30T16:18:56.690 回答