2009-09-11 11 views

Respuesta

9

iPhone OS no le permite agregar procesos en segundo plano.

+3

Esto cambiará con iPhone OS 4.0. Ahora puede solicitar el sistema operativo para mantener su aplicación en funcionamiento durante unos minutos más, o registrarse para algunos eventos (cambio de ubicación) para reactivar su aplicación. – Rudi

2

Desafortunadamente, no puede crear un proceso en segundo plano utilizando el iPhone SDK. Solo podrá subir datos mientras se ejecuta la aplicación.

6

Lo que es más probable es que, al salir, guarden el estado, luego al iniciar el currículo que transfieren.

0

Si los datos tienen que ser enviados, esperaría hasta que la transferencia se haya realizado en la aplicación WillTernimate :. Por lo que yo sé, la aplicación no se cerrará si bloquea el hilo en applicationWillTerminate. (Corrígeme si estoy equivocado). Pero tenga cuidado, si los datos son enormes o la velocidad de Internet del usuario es mala, debe salir de todos modos y reanudar la transferencia la próxima vez. Configure un temporizador para verificar el tiempo de espera.

Atención: esto puede ser rechazado por App Store.

+0

Apple se reserva el derecho de finalizar la aplicación si el hilo se bloquea en 'applicationWillTerminate:' durante más tiempo que una cierta cantidad de tiempo (generalmente unos cinco segundos más o menos). Además, si bloqueas más tiempo que eso y la aplicación * no * muere, pierde las aplicaciones de transición fade-out cuando dejan de funcionar normalmente; en su lugar, parece un choque para el usuario (la aplicación simplemente desaparece y el dispositivo presenta el trampolín de nuevo). – Tim

+0

Hacer cualquier cosa en ApplicationWillTerminate: eso puede tomar un tiempo significativo es una mala idea. –

5

Hilo de bloque en applicationWillTerminate: no se eliminará en un corto tiempo, pero SERÁ rechazado por App Store. Para no AppStore o aplicaciones personales, aquí está el código:

@interface MyApplication : UIApplication 
{ 
    BOOL _isApplicationSupposedToTerminate; 
} 
@property (assign) BOOL isApplicationSupposedToTerminate; 
- (void)_terminateWithStatus:(int)status; 
@end 


@implementation MyApplication 
@synthesize isApplicationSupposedToTerminate = _isApplicationSupposedToTerminate; 
- (void)_terminateWithStatus:(int)status 
{ 
    if (self.isApplicationSupposedToTerminate) { 
     [super _terminateWithStatus:status]; 
    } 
    else { 
     return; 
    } 
} 
@end 

En main.m

int retVal = UIApplicationMain(argc, argv, @"MyApplication", nil); 

Delegado:

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    [(MyApplication*)application setIsApplicationSupposedToTerminate:!kIsTransferDone]; 
} 

Esto detendrá la aplicación de la terminación de menos que su traslado se realiza . Configurar un temporizador para el tiempo de espera de verificación es importante. Y en applicationDidReceiveMemoryWarning :, renuncie a su aplicación por:

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { [(MyApplication*)application setIsApplicationSupposedToTerminate:YES]; [application terminateWithSuccess]; }

Esto debería ser capaz de hacer que termine su trabajo. Para jailbreak solo.

+1

Buen método, pero no funciona muy bien para mí. Simplemente permite que la aplicación viva entre 1 y 20 segundos más, después de lo cual seguirá matando con una advertencia en los registros: no pudo finalizar a tiempo.
TinkerTank

1

El servicio Deamon es el mejor servicio en lugar de otros servicios o concepto para el procesamiento de fondo en iphone. Visite el siguiente enlace
http://chrisalvares.com/blog/?tag=iphone-daemon.

+0

'De la Parte I:" Tendrá que hacer las siguientes cosas antes de que podamos comenzar. 1) Asegúrese de que su iPhone esté roto "- no es muy útil .... – jww

Cuestiones relacionadas