我試了很多建議,但沒有任何作品!當我在後臺線程中調用Thread.sleep()方法,主線程還用於凍結此時(動畫幀丟棄):(Android Thread.sleep()在AsyncTask凍結UI
版本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);
}
版本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();
}
同樣的事情:(當Thread.sleep(500)到達動畫凍結:(
我做錯了什麼?
更新減慢UI線程1
找到重的地方:
我有一個存儲175個ChannelRect意見水平的LinearLayout。當我打電話動畫(啓動AlphaAnimation一切還好,但是當我SETVALUE()來ChannelRect就必須改變自己的尺寸:
public void setValue(int value)
{
_value = value;
setOpacity((byte)255);
CurrentLayoutParams.height = (int)((-110 - value) * ycoeff * -1);
requestLayout();
}
這是緩慢起伏主UI線程爲什麼setValue方法會影響這個LinearLayout中只有一個看法?不是所有的... PS去除requestLayot()行刪除放緩,但ChannelRect大小沒有變化:(
問題沒有與此相關的代碼 – Blackbelt
存在channelRect.setValue無重碼(價值)或在channelRect.Animate() –
我從來沒有說過它在那裏。 – Blackbelt