quero simplesmente dar um “throw exception” no método doInBackground, após lançar esta exceção,
poderei trata-la na classe activity (classe que esta chamando o método doInBackground).
Não é possível fazer isso, a AT é uma Thread separada da Thread de UI, logo a exception ficará apenas no escopo desta thread.
O que você pode fazer é gerar uma callback para notificar a activity que uma exception foi disparada ou implementar uma UncaughtExceptionHandler (não lembro se android tem suporte a isso)
[quote=fabriciov]Não é possível fazer isso, a AT é uma Thread separada da Thread de UI, logo a exception ficará apenas no escopo desta thread.
O que você pode fazer é gerar uma callback para notificar a activity que uma exception foi disparada ou implementar uma UncaughtExceptionHandler (não lembro se android tem suporte a isso)
Eu colocaria como retorno do método doInBackGround um Object, e nos blocos catch, eu atribuiria a referencia da MinhaException que foi capturada
e analisaria no método onPostExecute qual é minha referencia, é um Boolean, é null é uma Exception e tal.
Android suporta UncaughtExceptionHandler sim, mas se for utilizar na Thread principal (log provavelmente) é necessario guardar a referencia do antigo e avisa-lo após tratar que irá causar o “The app has stoped.”
@Henrique.tenorio
Também acho essa a melhor solução, que inclusive é a que uso nas tasks com umas classes wrappers como:
private static class GrabResult {
private final Result result;
private Throwable error;
GrabResult(Result result){ this.result = result; }
GrabResult(Result result, Throwable error){ this.result = result; this.error = error; }
}