我的代碼有一個奇怪的問題,在過去的幾天裏無法解決。讓我這樣說:我有兩個線程的數組,從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 –