2012-01-19 19 views
2

私たちには、終了が必要な特定の目的を持つアプリがあります。終了後、一定時間、または終了するまで、バックグラウンドでプロセスを実行する必要があります。私たちは、プログラムがプロセスを継続して実行できるバックグラウンドに入るようにプログラムで強制する方法を知る必要があります。これについてのどんな助けも素晴らしいでしょう!前もって感謝します!アプリを終了してバックグラウンドで実行する

更新:プログラムを強制的にバックグラウンドで終了してバックグラウンドタスクを実行するようなプログラム的な方法はないようです。 exit(0)を使用してアプリを強制終了することができます。しかし、これはすべて一緒にアプリを殺す。しかし、この質問の大部分は、バックグラウンドでタスクを実行することに関するものでした。私たちは、アプリケーションがデータの処理を開始し、ユーザーが処理するためにセットアップしたタスクを処理できるようにするソリューションを発見しました。ここに必要なコードです。これは、アプリケーションデリゲートに追加する必要があり、デバイス/ IOSではマルチタスクが必要です。アプリは任意のクリーンアップを行うに終了したときに

- (void)applicationDidEnterBackground:(UIApplication *)app{ 
    // Check that IOS supports multitasking 
    if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]){ 
     // Check that the device supports multitasking 
     if ([[UIDevice currentDevice] isMultitaskingSupported]) { 
     // Custom setting to allow users the freedom to enable or disable background tasks 
     BOOL enabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"backgroundTasksEnabled_key"]; 
      if (enabled){ 
       //Get the shared application instance 
       backGroundApp = [UIApplication sharedApplication]; 
       background_task = [backGroundApp beginBackgroundTaskWithExpirationHandler:^{ 
        [backGroundApp endBackgroundTask: background_task]; 
        background_task = UIBackgroundTaskInvalid; 
       }]; 

       // Run in background 
       dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

        NSLog(@"\n\nProcess background tasks!\n\n"); 

        // Do your work here 

       }); 
      } 
     } 
    } 
} 
+0

解決策を探している人には、誰がプライベートAPIを使用できますか[この回答を参照](http:// stackoverflow。 com/a/15997772/119114)。 – Nate

答えて

2

SafariのWebサイトURLなど、別のアプリに登録URLを送信することで、強制的にiOSアプリをバックグラウンドに追加できます。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: myWebsiteURL ]]; 

URLを処理するためにSafariを呼び出す多くのアプリはAppleによって承認されています。

バックグラウンドでいつでもアクセスできるようにするには、許可されたバックグラウンドモード(オーディオ、位置、またはVoIP)のいずれかを使用してアプリを適切に設定する必要があります。またはアプリケーションは、バックグラウンドでバックグラウンドで余分な時間を要求することができます。beginBackgroundTaskWithExpirationHandlerメソッドを呼び出すことによって、一時停止されます。

+0

私が投稿した上記のコードは、おそらく2〜3分のバックグラウンド処理を処理するための適切な解決策であると思いますか?私はこれがAppleの承認された方法だと理解していますが、おそらくあなたは確認できますか?どうもありがとう。 – mejim707

0

あなたは、プロセス実行中のiOSでバックグラウンドで(仕事をしている)を持つことはできませんが、あなたは数秒を取得し、それはそれです!

-1

アプリケーションをバックグラウンドに強制することはできません。アップルのガイドラインでは、アプリケーションをバックグラウンドで実行することが禁止されています。あなたのアプリは、フォアグラウンドではなく、バックグラウンドでしか行えないことがありますか?

+0

さて、フォアグラウンドでプロセスを実行することができず、バックグラウンドが必要ではないということではありません。ユーザーは自分がしなければならないことを実行できるようにしておきます。仕事や遊びなど何でも。プロセスが完了するのを待つことなく、すぐに素早く出入りすることができます。私たちは、アプリを閉じたり、背中に押し込んだりするのは良い考えではないと多くの人が話しています。それは私は、すべてのプロセスが完了した後に確認を取得するプロセスを実行して、それを立てると自動的に自動終了します。ただし、ホームボタンがヒットした場合、プロセスは一時停止します。 TX – mejim707

+1

アプリは絶対に強制的に閉じるべきではありません。アプリケーションを閉じるユーザーに応答し、それがあなた自身で発生することはありません。また、Appleのマルチタスクガイドを見て、必要に応じてバックグラウンドプロセスを指定できるようにする必要があります。 – Seventoes

関連する問題