Tôi đã thử nhiều đề xuất nhưng không có gì hoạt động! Khi tôi gọi Thread.sleep() trong sợi nền, chủ đề chính cũng đóng băng cho thời gian (khung thả Animation) này :(Android Thread.sleep() trong AsyncTask đóng băng UI
Phiên bản 1:
public void UpdateChannels(final ArrayList<Channel> channels)
{
new AsyncTask<ArrayList<Channel>, Object[], Void>()
{
@Override
protected Void doInBackground(ArrayList<Channel>... arrayLists)
{
for(Channel channel : arrayLists[0])
{
Integer chid = new Integer(channel.arfcn);
ChannelRect channelRect = Channels.get(chid);
publishProgress(new Object[] {channelRect, channel.dBm});
try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Object[]... values)
{
ChannelRect channelRect = (ChannelRect) values[0][0];
int value = (Integer)values[0][1];
channelRect.setValue(value);
channelRect.Animate();
}
}.execute(channels);
}
Version 2:
public void UpdateChannels(final ArrayList<Channel> channels)
{
new Thread(new Runnable()
{
@Override
public void run()
{
for(final Channel channel : channels)
{
int chid = new Integer(channel.arfcn);
final ChannelRect channelRect = Channels.get(chid);
if(channelRect != null)
{
CurrentActivity.runOnUiThread(new Runnable()
{
@Override
public void run()
{
channelRect.setValue(channel.dBm);
channelRect.Animate();
}
});
try
{
Thread.sleep(500);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
}).start();
}
Và tôi đã thử điều tương tự với bài viết và xử lý Cùng một điều :(Khi Thread.sleep (500) đến hoạt hình đóng băng: (
Tôi đang làm gì sai?
CẬP NHẬT 1
Tìm thấy nơi nặng làm chậm thread UI:
Tôi có LinearLayout ngang mà các cửa hàng 175 lần xem ChannelRect. Khi tôi gọi animate (bắt đầu AlphaAnimation tất cả okay, nhưng khi tôi SetValue() để ChannelRect nó phải thay đổi kích thước của mình:
public void setValue(int value)
{
_value = value;
setOpacity((byte)255);
CurrentLayoutParams.height = (int)((-110 - value) * ycoeff * -1);
requestLayout();
}
Đây là nguyên nhân gây chậm chính thread UI Tại sao setValue chỉ ảnh hưởng đến một cái nhìn trong LinearLayout này.? không phải tất cả ... ps loại bỏ requestLayot() dòng loại bỏ chậm nhưng kích thước ChannelRect không thay đổi :(
vấn đề không liên quan với mã này – Blackbelt
không có mã nặng trong channelRect.setValue (giá trị) hoặc trong channelRect.Animate() –
Tôi chưa bao giờ nói nó ở đó. – Blackbelt