Desde Honeycomb
e v4 Compatibility Library
é possível usar AsyncTaskLoader
. Pelo que entendi, o AsyncTaskLoader
pode sobreviver através de alterações de configuração, como inversões de tela.
É recomendável usar em AsyncTaskLoader
vez de AsyncTask
? Será que LoaderManager
obter na foto também?
Mas não encontrei bons exemplos sobre como usar corretamente o AsyncTaskLoader
. Os documentos também não fornecem exemplos. Alguém pode fornecer alguns bons exemplos.
AsyncTaskLoader
e, quando mais desenvolvedores começarem a usá-lo, mais exemplos virão.Ao comparar o AsyncTaskLoader x O AsyncTask , como você deve saber ao girar a tela do dispositivo, ele pode destruir e recriar sua atividade, para deixar claro que a imagem gire o dispositivo durante a transação de rede:
O AsyncTask será reexecutado como thread de segundo plano novamente, e o processamento anterior do thread de segundo plano seria redundante e zumbi.
O AsyncTaskLoader será apenas reutilizado com base no Loader ID registrado no Loader Manager antes, portanto, evite executar novamente a transação de rede.
Em resumo, o AsyncTaskLoader evita a duplicação de threads em segundo plano e elimina a duplicação de atividades zumbis.
fonte
O AsyncTaskLoader executa a mesma função que o AsyncTask , mas um pouco melhor. Ele pode lidar com alterações de configuração de atividade mais facilmente e se comporta nos ciclos de vida de fragmentos e atividades. O bom é que o AsyncTaskLoader pode ser usado em qualquer situação em que o AsyncTask esteja sendo usado. Sempre que os dados precisam ser carregados na memória para a Atividade / Fragmento manipular, o AsyncTaskLoader pode fazer o trabalho melhor.
Existem alguns problemas com o uso de AsyncTasks, no entanto:
Doc do AsyncTaskLoader
fonte
Algumas diferenças além das descritas em outras respostas:
Ao usar o AsyncTaskLoader sobre o AsyncTask :
O AsyncTaskLoader nos dá liberdade para carregar dados em cache antigos até que novos dados sejam retornados por
forceLoad()
Podemos definir atrasos para AsyncTaskLoader ,
setUpdateThrottle()
impedindo atualizações consecutivas no cliente (Activity / Fragment)O AsyncTaskLoader pode ser compartilhado com vários fragmentos se eles tiverem atividade pai comum e se foi iniciado a partir de
getActivity().getSupportLoaderManager()
O AsyncTaskLoader é destruído
LoaderManger
quando sua atividade vinculada não está mais disponível. enquanto precisamos destruir manualmente o AsyncTasks se a atividade do chamador destruir. Isso economiza nosso tempo de escrever todas as coisas de limpeza. O AsyncTaskLoader funciona bem com seus respectivos ciclos de vida.Portanto, o AsyncTaskLoader é muito melhor que o AsyncTask.
fonte