ho provato molti suggerimenti ma niente funziona! Quando chiamo Thread.sleep() in filo di fondo, thread principale congela anche per questa volta (animazione drop frame) :(Android Thread.sleep() in blocco AsyncTask UI
Versione 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);
}
Versione 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();
}
E ho provato la stessa cosa con Post e Handler.La stessa cosa :(Quando Thread.sleep (500) arriva l'animazione si blocca :(
Cosa sto facendo male?
UPDATE 1
Trovato luogo pesante che rallenta thread UI:
ho LinearLayout orizzontale che memorizza 175 viste ChannelRect. Quando chiamo animate (che inizia AlphaAnimation tutto bene, ma quando ho setValue() per ChannelRect deve cambiare la sua dimensione:
public void setValue(int value)
{
_value = value;
setOpacity((byte)255);
CurrentLayoutParams.height = (int)((-110 - value) * ycoeff * -1);
requestLayout();
}
Si tratta di rallentamenti principale thread UI Perché setValue colpisce solo un punto di vista in questo LinearLayout.? non è tutto ... ps rimozione() linea requestLayot rimuovere rallentamenti ma non ChannelRect dimensioni modifiche :(
il problema non è in relazione con questo codice – Blackbelt
non esiste un codice pesante in channelRect.setValue (valore) o in channelRect.Animate() –
Non ho mai detto che fosse lì. – Blackbelt