2013-04-27 17 views
13

Sto imparando come usare i frammenti e ci sono un sacco di trucchi che ho incontrato finora. Il metodo di FragmentManager executePendingTransactions sembra che potrebbe avere qualche propria, proprio a causa di questa nota nella sua descrizione nella documentazione ufficiale Android:Quali sono i casi in cui NON dovrei usare FragmentManager's executePendingTransactions() (all'interno del thread principale)?

Se si desidera eseguire immediatamente tali operazioni in sospeso, è possibile chiamare questa funzione (solo dal thread principale) per farlo. Nota che tutte le callback e altri comportamenti correlati verranno eseguiti all'interno di questa chiamata, quindi fai attenzione a dove viene chiamato. http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()

suona per me come un avvertimento piuttosto criptico. In che modo queste "callback e altri comportamenti correlati" influenzano la mia applicazione? Questo può causare problemi quando si chiama questa funzione dal thread principale? Non sono riuscito a trovare esempi specifici, quindi chiedo aiuto a chiunque abbia demistificato questo avvertimento: quali sono alcuni esempi di quando dovrei non utilizzare executePendingTransactions nel thread principale e quali cose orribili accadrebbe se facessi ? O è sempre sicuro da usare fino a quando è nella discussione principale?

+0

http://stackoverflow.com/questions/6276991/android-honeycomb-how-to-determine-when-fragmenttrancaction-commit-has -finish – waqaslam

+0

Grazie a @Waqas, ho letto quella discussione prima di postarla. Tuttavia, non ha ancora risposto alla mia domanda, poiché si concentrava su un solo caso particolare. – LearningNerd

risposta

11

Non si deve chiamare questo metodo quando ci si trova in una discussione diversa da quella dell'interfaccia utente.

Si precisa nel same lines:

Se si desidera eseguire immediatamente tali operazioni in sospeso, è possibile chiamare questa funzione (solo dal thread principale) di farlo.

+4

Esatto, ho letto anche quella parte, ma quando dice "fai attenzione a dove viene chiamato" sembra che si riferisca a usarlo anche nel thread dell'interfaccia utente. Quindi la mia domanda è: quando non dovrei usare 'executePendingTransacations' nel thread dell'interfaccia utente? O è sicuro usarlo in qualsiasi circostanza purché sia ​​nel thread dell'interfaccia utente? – LearningNerd

+4

Sì, è possibile utilizzarlo in qualsiasi circostanza, purché sia ​​presente nel thread dell'interfaccia utente. –

6

non è possibile richiamarlo da una transazione già eseguita. si otterrà "Accesso ricorsivo per eseguire Transazioni pendenti"

per un esempio: si sostituisce un frammento e quindi si chiama executePendingTranstactions. e nel onCreate di quel frammento si sostituisce un altro frammento (con frammentManager dell'attività)

Problemi correlati