A palestra discute conectar aplicativos Android a outros sistemas, incluindo o uso de threads para não bloquear a interface do usuário, AsyncTask para executar tarefas em segundo plano, trabalhar com JSON e fazer conexões com a web, e armazenar dados em cache para melhorar o desempenho.
19. Pera, o que?
extends AsyncTask<Params, Progress, Result>
protected Result doInBackground(Params... params)
protected void onProgressUpdated(Progress... progress)
protected void onPostExecute(Result result)
protect final publishProgress(Progress.. progress)
protected void onPreExecute()
20. As regras
●
A instância da task precisa ser criada na UI Thread.
● O método execute precisa ser chamado na UI Thread.
●
Não chame na mão os métodos “especiais”.
●
Uma task só pode ser executada uma vez, uma
execção será lançada se tentar executar uma
segunda vez.
21.
22. Paralelização entre as tasks?
●
Desde a versão 3 do android as tasks são executadas
numa única thread.
Se quiser execuções verdadeiramente paralelas, chame:
MyAsyncTask.
executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, Params params.
37. Public class ExampleApp extends Application{
Private Map<String,Image> cache;
Public void cache(Image image, String name){
Cache.put(name,image);
}
Criando a class
Android irá matar o aplicativo se não respeitarmos o limite de tempo da UI Thread. Autalmente 5 segundos
Dessa forma criamos outra thread e temos tempo “infinito” para fazermos o que acharmos melhor.
O código parecia ser bonito, mas não podemos alterar a tela do usuário por uma thread que não seja a UI thread. Então temos que fazer algumas “gambiarras” para conseguirmos isso. http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29
A classe AsyncTask tem 3 métodos abstrados que devemos definir comportamento. Dbackground que fará o trabalho. ProgressUpdated para mostrar algum tipo de progresso na tela do usuário. E por fim postExecute que já tem o resultado final. PostExecute é chamado automaticamente, enquanto que o ProgressUpdated precisa ser chamado manualmente via publishProgress. “ Forma de reutilizar o mesmo código com diferentes inputs” – Oracle docs
Base class for those who need to maintain global application state. You can provide your own implementation by specifying its name in your AndroidManifest.xml's <application> tag, which will cause that class to be instantiated for you when the process for your application/package is created.