5

qik.com や ustream.com のように、iPhone からサーバーにコンテンツをアップロードするときは、デーモン経由で動作します。そのため、 exit でアプリを終了しても、タスクはバックグラウンド デーモンで引き続き実行されます。同じ方法でデーモンプロセスを実装できる方法はありますか? ありがとう !!!

4

7 に答える 7

5

Block thread at applicationWillTerminate: won't get killed in a short time, but WILL be rejected by App Store. For non-AppStore or personal applications, here is code:

@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

In main.m

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

Delegate:

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

This will stop application from terminating unless your transfer is done. Setup a timer for check timeout is important. And in applicationDidReceiveMemoryWarning:, quit your app by:

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

This should be able to make you finish your job. For jailbroken only.

于 2009-09-14T13:23:31.430 に答える
1

Apple のバックグラウンドでのコードの実行も参照してください。

于 2011-04-01T06:43:17.747 に答える
1

Deamon サービスは、iPhone でのバックグラウンド処理の他のサービスや概念よりも優れたサービスです。次のリンク
http://chrisalvares.com/blog/?tag=iphone-daemonにアクセスしてください。

于 2010-02-23T14:48:09.820 に答える
0

データを送信する必要がある場合は、applicationWillTernimate:で転送が完了するまで待ちます。私の知る限り、applicationWillTerminateでスレッドをブロックしても、アプリケーションは終了しません(間違っている場合は訂正してください)。ただし、データが膨大な場合やユーザーのインターネット速度が遅い場合は、とにかく終了して、次回転送を再開する必要があります。タイムアウトをチェックするタイマーを設定することをお勧めします。

重要:これはAppStoreによって拒否される場合があります。

于 2009-09-12T04:00:32.430 に答える