ho dovuto aggiungere Looper al seguente codice:Capire cosa Looper è circa in Android
public class MyRunnable implements Runnable
{
@Override
public void run()
{
Looper.prepare();
final Looper looper = Looper.myLooper();
new Handler().postDelayed(
new Runnable()
{
@Override
public void run()
{
try
{
}
catch (Exception ex)
{
}
finally
{
looper.quit();
}
}
}, 100);
Looper.loop();
}
}
Si noti che ho un eseguibile all'interno di un eseguibile. Il runnable nidificato viene eseguito tramite un gestore. Inizialmente non avevo Looper, ma Android si è lamentato del fatto che dovevo chiamare Looper.prepare prima di eseguire un altro thread.
Ho letto su Looper ma sembra ancora un po 'criptico. Sembra comportarsi come una sorta di pipeline di messaggistica interna. Non mi è chiaro il motivo per cui ciò è necessario, dal momento che non ci sono messaggi che vanno dal mio percorso esteriore al mio gestibile interiore. Anche se questo è vero, sembra che Android stia semplicemente facendo la regola che se chiami un thread da un thread, DEVI chiamare anche Looper.prepare. Anche se accetto che così com'è, non aiuta ancora a capire perché devo chiamare looper.loop e looper.quit. Se ometto Looper.loop, il mio gestore non funziona mai e questo è ciò che non è chiaro. Che cosa fa Looper.loop che consente al mio gestore di funzionare?
possibile duplicato di [android: qual è lo scopo di Looper e come utilizzarlo?] (Http://stackoverflow.com/questions/7597742/android-what-is-the-purpose-of-looper-and -come usarlo). Sì, se si desidera utilizzare Looper, è necessario chiamare Looper.prepare(). Le alternative all'utilizzo di Looper includono solo la creazione di thread normali (paralleli) o l'utilizzo di AsyncTasks. Leggi il link SO che ho citato per un po 'più di background. 'Spero che questo aiuti ... – paulsm4
Una sorta di spiegazione. Il problema più grande che vedo è riferirsi a Runnables come "messaggi". Questi non sono "messaggi" nel senso tradizionale del mondo della programmazione poiché un Runnable è un pezzo di codice eseguibile piuttosto che semplici dati contenenti un messaggio. Inoltre, l'esempio che hai indicato non include nemmeno looper.quit che è richiesto, né indica che Looper.loop bloccherà indefinitamente fino a quando looper.quit viene chiamato. Looper dovrebbe essere definito come nient'altro che una coda per l'esecuzione di più Runnables. – AndroidDev