![]() |
|
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
«
Tema Anterior
|
Siguiente tema
»
|
Herramientas |
#1
|
||||
|
||||
Descarga de archivos en android 4.1
public
boolean DescargaArch(String NArch ) { try { URL url = new URL(NArch); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod( "GET"); urlConnection.setDoOutput(true); //al llegar aqui marca error y se sale de la app urlConnection.connect(); ... ... Estoy programando con eclipse , si alguien me puede ayudar ya que en un emulador con la versión 2.3 funciona correctamente y al probarlo con la versión 4.1 falla. Gracias
|
|
#2
|
||||
|
||||
Es porque estás bloqueando el hilo principal y no recuerdo a partir de que versión (3.0 o 4.0) si bloqueas el hilo principal la app peta.
Tienes que ejecutar la descarga en un AsyncTask o en un Thread |
#3
|
||||
|
||||
desde la version 2.3.3 android tiene un gestor de descargas. va muy bien.
;) |
#4
|
||||
|
||||
"Tienes que ejecutar la descarga en un AsyncTask o en un Thread "
Si me puedes explicar a que se refiere esto por favor. "desde la version 2.3.3 android tiene un gestor de descargas. va muy bien." Y en cuanto al gestor yo quisiera hacer las descargas desde la app. Gracias |
#5
|
||||
|
||||
Un AsyncTask es un hilo que se ejecuta independientemente del hilo principal y de forma paralela, de forma que estás ejecutando un código concreto pero sin bloquear el hilo principal, de forma que puedes seguir usando la app sin esperar a que una actividad bloqueante finalice. En tu caso, el código que se debería ejecutar de forma paralela y que es bloqueante es la descarga de la imagen:
http://developer.android.com/referen...AsyncTask.html |
#6
|
||||
|
||||
Cita:
Viene siendo como los que tienen los navegadores, gestiona las descargas en segundo plano. Hace todo el trabajo el sólito. Por algo lo incluyeron en el Android desde esa versión No es una chapuza... El AsyncTask es un hilo especial de Android, se ejecuta en segundo plano. Desde versiones 3 de Android ya no deja hacer en el hilo de la Activity cosas que pueden ralentizar la app. Si pones a descargar en la activivy se te puede bloquear el móvil un rato. Para evitar eso Google decidió que en vez de funcionar la app de un error y rompa. Para que no pase hazlo en un hilo de ejecución paralelo al hilo principal (el de la activity). Busca en google AsyncTask, hay mil turoriales. Escapa de hacer otro tipo de hilos, el propio de android es el AsyncTask, es muy completo haces casi todo y es muy facl. ;) |
#7
|
||||
|
||||
Todo programa esta compuesto de hilos, incluso cuando piensas que no tienes ninguna tienes un hilo principal, en android a este hilo principal tambien se le llama hilo UI, o hilo de interfaz puesto que es el unico hilo que puede modificar la interfaz, cualquier otro hilo que la intente modificar hara que la app no funcione, y en tu caso si el hilo UI o hilo main tiene que hacer una operacion que dure mas de 5segundos la app se bloqueara y le mostrara al usuario un mensaje de que la aplicacion esta tardando mucho en responder, y si quiere esperar o cerrar la app, a lo que la mayoria de usuarios le dara a cerrar, por lo que normalmente las descargas se hacen en hilos aparte y le pones una progressbar para mostrarle al usuario como va la descarga.
Aqui te dejo algunos tutoriales pero vamos que ahi muchos por ahi, y estos no tienen porque ser los mejores: Thread: http://www.inforjmr.es/?p=551 AsyncTask: http://www.inforjmr.es/?p=556 Jugando con Threads: http://inchoo.net/mobile-development...droid-threads Y esta que esta muy bien, 3 formas de trabajar con hilos http://androideity.com/tag/threads Edit: Lo que te comenta Celtium es que si solo programas para android mires solo el AsyncTask que es el propio de Android y por lo tanto mas eficiente para este, aunque yo estoy haciendo el ciclo de DAM y por lo tanto nos enseñaron hace poco los hilos en java, que son los threads y runnable, y ya en android no nos han llegado a explicar en clase AsyncTask por no tener el suficiente tiempo para todo. Si miras los hilos en java intenta hacerlo por Runnable que parece ser que es mas efectivo puesto que Thread es una clase y Runnable una interfaz y como java no acepta la herencia multiple conviene usar la mayoria de veces el Runnable. Última edición por set92 Día 07/11/12 a las 10:09:38 |
#8
|
Respuesta |
![]() |
||||||
|
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 19:00:05 (GMT +2)
HTCMania: líderes desde el 2007