2010-06-09 11 views
10

Desde que salió la primera versión beta, he estado tratando de averiguar si la multitarea "real" es posible, es decir, ¿puedes poner un programa en segundo plano y esperar a una conexión de red indefinidamente?¿iOS 4 pone "Real Multitarea" disponible para desarrolladores de terceros?

Estoy pensando en aplicaciones de IM o IRC, por ejemplo. He compilado una aplicación yo mismo en iOS 4, y sin cambiar nada, apareció para seguir funcionando en segundo plano, pero por lo que sé, simplemente se había suspendido en la memoria.

Los documentos dicen que lo mejor que puede hacer es solicitar hasta 10 minutos, pero en la presentación del desarrollador mostraron Skype sentado en segundo plano y luego notificaron al usuario que recibía una llamada. ¿Alguien sabe con certeza cómo esto todo funciona?

+2

Tengo 0 experiencia en iOS, por lo que puede no ser útil. Sin embargo, ¿por qué no hace que haga algo mientras se ejecuta en segundo plano para ver si realmente se está ejecutando (por ejemplo, actualizar un contador cada segundo)? – Cam

+0

¡Buena idea! Voy a intentarlo ahora ... –

+0

Acabo de configurar un temporizador para disparar cada segundo y hacer ping a mi servidor web. Efectivamente, el temporizador dejó de disparar cuando la aplicación quedó en segundo plano, aunque cuando regresó regresó al estado en que estaba cuando se suspendió. –

Respuesta

10

Parece que la respuesta es no. La API para Skype es un caso muy especial, llamado el modo "voip", y requiere un comportamiento especial, como marcar el socket en uso para VoIP.

Puede recibir notificaciones de alarma en segundo plano (como el tiempo transcurrido). La cantidad de tiempo que está en el estado de funcionamiento en segundo plano está severamente limitado por el sistema operativo.

El modelo de fondo de Android está completo y en muchos aspectos es mucho más agradable.

Apple tiene una guía llamada "Apoyo a la multitarea en sus aplicaciones" que debería poder localizar.

+9

El modo de fondo totalmente operativo es más fácil de manejar para los desarrolladores, pero brutal en la duración de la batería. Esa es la compensación de diseño que Apple ha hecho aquí. No se trata de un apologista de Apple, pero puede comprender la opción de diseño si piensa como un usuario en lugar de como un desarrollador. –

+2

Lo quiero como usuario. Quiero aplicaciones adecuadas de IRC y chat, y quiero que los desarrolladores tengan la libertad de hacer lo que deben hacer para crear las aplicaciones que yo quiero. Tal vez soy un usuario geek, y no típico, pero todavía estoy pensando como un usuario. –

+3

@pkulak y, por el contrario, quiere una vida útil que solo es buena por un par de horas para lo que desea. Los usuarios finales reales que no son desarrolladores, quieren un teléfono que dure todo el día y haga lo que necesitan, no les importa cómo lo hace. Si parece hacer lo que "quiere" pero no lo hace, ¿cómo cree que debería hacerse? ¿Cuál es la diferencia? –

1

Las aplicaciones iOS 4 pueden ser ejecutando o suspendidas. El sistema operativo intentará mantener tantas aplicaciones solicitadas como sea posible en la memoria, mientras que todas las demás aplicaciones se suspenderán.

aplicaciones que se ejecutan en el fondo puede acceder a características como la navegación, audio, y VOIP (pero NO mensajería instantánea). Entonces parece que no tienes suerte.

- PC World Multitasking on Apples iPhone 4

0

Le puede interesar this blog post que describe cómo funciona la "multitarea" en sistemas como el iPhone OS 4 y Android.

+1

Tenga en cuenta que Android no tiene los mismos límites en servicios como iOS. Es bastante posible tener un servicio conectado a la red ejecutándose continuamente en segundo plano, a diferencia de iOS. El servicio puede iniciarse y detenerse por la aplicación (o por uno mismo), y el servicio puede lanzar intentos (mucho más flexible que la contraparte de iOS). Las notificaciones mencionadas se denominan "transmisiones" en Android y no requieren un servicio en ejecución. –

8

Los documentos para desarrolladores iOS 4 de Apple describen todo esto muy claramente.

Cuando su aplicación se cierra o se apaga, se suspende casi de inmediato, lo que significa que el sistema operativo congela el estado de la aplicación. Cuando el usuario vuelve a su aplicación, su código se ejecuta justo donde se mantuvo. Usted no necesita para agregar cualquier código a su aplicación para hacer esto, simplemente compílelo contra OS 4.

Lo anterior es cierto en la mayoría de los casos. Hay dos razones por las cuales el modelo "suspendido" puede no aplicarse:

1) Si el dispositivo comienza a quedarse sin memoria, el sistema operativo comenzará a cancelar las aplicaciones suspendidas que no han sido conmutadas por un tiempo, sin previo aviso. Esta es la razón por la que le conviene a su aplicación recordar también su estado, por lo que si su aplicación finaliza y se vuelve a abrir, el usuario realmente no se da cuenta porque todavía regresa al lugar donde lo dejó.

2) Su aplicación utiliza una de las API de "fondo". Estos son para reproducción de audio, servicios de VoIP o servicios de ubicación.En este caso, su aplicación puede continuar ejecutándose en segundo plano, pero solo tiene acceso a esas API. Además, su aplicación puede designar ciertas tareas de larga ejecución como "tareas en segundo plano" que deben completarse antes de suspender o finalizar la aplicación, como cargar imágenes en Flickr o renderizar un video, etc.

La "tarea de fondo" El método no cubre los servidores de ping indefinidamente, ya que hay un límite de tiempo para la tarea, después de lo cual se interrumpirá por la fuerza. Se espera que las aplicaciones que necesitan ese tipo de funcionalidad implementen notificaciones push, al igual que antes.

Eso debería aclarar esto. En general, creo que es una solución bastante elegante para la multitarea en un dispositivo móvil.

1

Es posible que las aplicaciones soliciten tiempo en segundo plano. Lee los documentos. Yo diría que iOS es "multitarea controlada".

1

Puede crear una tarea de fondo de larga ejecución, creo que estas pueden incluir funciones de red. Solo tiene que establecer la bandera de la tarea de fondo en el bloque de trabajo.

https://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

el sistema operativo puede limitar exactamente cuánto tiempo que te dan ... se le dirá cuando se acabe el tiempo le da la oportunidad a la limpieza muy bien.

+0

Es importante que realice tanta limpieza como sea posible * antes * de que se mueva al fondo. Si el teléfono se está quedando sin memoria y tiene que matar tu aplicación, no recibes ninguna advertencia, simplemente te matan. – kubi

1

iOS 4 tiene multitarea "real" hasta cierto punto. Hay dos cosas que se deben tener en cuenta:

  • El bucle de eventos de IU es de tarea única. De modo que solo la aplicación frontal se ejecuta en el bucle de eventos de UI. No es gran cosa: desconecte su código principal del bucle de eventos de UI (tal vez necesite rediseñar su aplicación).
  • El sistema operativo "puede" finalizar su aplicación si se cumplen algunos criterios (por ejemplo, poca memoria).

Actualmente, uno de estos criterios es que el tiempo de ejecución se limita a 10 minutos (en tiempo real, no en tiempo de CPU). Sin embargo, espero que esto cambie y vea mejores criterios para la finalización de la aplicación en segundo plano (espero hacerlo).

Aparte de esto, puede tener timers (event loops) in background.

1

No hay multitarea real en iOS 4.2, incluso. porque a las aplicaciones solo se les permitirá finalizar la tarea relacionada con los estados ... durante un intervalo de tiempo pequeño y luego estará en estado suspendido ... Si configurará la tarea en segundo plano durante un intervalo de tiempo prolongado, entonces ... se comportará inesperadamente como no se llamará a ningún método cuando intente ejecutar la aplicación desde cualquier lugar.

0

¡Debe utilizar el marco de notificaciones de inserción para el conjunto de características que está creando!

Cuestiones relacionadas