36

まず第一に、私は、VoIP、オーディオ、および位置情報アプリがバックグラウンドで実行されることのみがサポートされており、オーディオが再生されている間、または位置情報サービスなどを使用している間だけ実行されることを知っています。

私が知りたいのは、バックグラウンドでアプリを完全に動作させ続ける方法があるかどうかです。バッテリーの寿命への影響は関係ありません。

そうすれば、私のアプリのユーザーは設定から​​選択して、いつでも好きな時間だけアプリを存続させることができます。たとえば、アプリの実行が必要なものを待っている場合、メッセージを受信した後、キープアライブ機能をオフにすることができます。

これが可能かどうかはわかりませんが、そう言っている投稿を読んだことがありますが、残念ながら彼らは=(

更新:このチュートリアルでは、AcrobitsのApple Storeに2つのアプリがあり、「アプリケーションを強制的に存続させ、バックグラウンドで起動させることができる」ことがわかりました。それで、これを行う方法はありますか?

4

6 に答える 6

33

iOS 7以降、アプリをバックグラウンドで実行するための新しい方法があります。Appleは現在、アプリが常にデータをダウンロードして処理する必要があることを認識しています。

これは、バックグラウンドで実行できるすべてのアプリの新しいリストです。

  1. 音楽プレーヤーアプリなど、バックグラウンドでユーザーに音声コンテンツを再生するアプリ
  2. バックグラウンドでオーディオコンテンツを録音するアプリ。
  3. ナビゲーションアプリなど、ユーザーに自分の位置を常に通知するアプリ
  4. ボイスオーバーインターネットプロトコル(VoIP)をサポートするアプリ
  5. 新しいコンテンツを定期的にダウンロードして処理する必要があるアプリ
  6. 外部アクセサリから定期的に更新を受け取るアプリ

Xコード5以降を使用して、Info.plistでアプリのサポートされているバックグラウンドタスクを宣言できます。たとえば。アプリのInfo.plistファイルにUIBackgroundModesキーを追加し、配列に「fetch」の値を追加すると、アプリはネットワークから少量のコンテンツを定期的にダウンロードして処理できます。XCode 5のアプリケーションプロパティの[機能]タブでも同じことができます(スナップショットの添付)

XCode5の[機能]タブこれについて詳しくは、Appleのドキュメントをご覧 ください。

于 2013-09-23T08:13:34.587 に答える
21

アプリケーションがバックグラウンドに移動するように指示された後、限られた時間だけタスクを実行できますが、指定された期間のみです。これより長く実行すると、アプリケーションが終了します。これを行う方法については、iOSアプリケーションプログラミングガイドの「バックグラウンドでの長時間実行タスクの完了」を参照してください。

他の人は、バックグラウンドプロセスとして生き続ける手段としてバックグラウンドでオーディオを再生することに便乗していますが、Appleは、オーディオ再生が正当な機能である場合にのみ、そのようなアプリケーションを受け入れます。Appleの公開されたレビューガイドラインの項目2.16は、次のように述べています。

マルチタスクアプリは、VoIP、オーディオ再生、位置情報、タスク完了、ローカル通知などの目的でのみバックグラウンドサービスを使用できます。

于 2010-09-21T17:30:19.563 に答える
8

バックグラウンドタスクが10分を超えて実行された場合、タスクは一時停止され、beginBackgroundTaskWithExpirationHandlerで指定されたコードブロックが呼び出されてタスクがクリーンアップされます。バックグラウンドの残り時間は、[[UIApplicationsharedApplication]backgroundTimeRemaining]で確認できます。最初にアプリがフォアグラウンドにあるとき、backgroundTimeRemainingはより大きな値に設定されます。アプリがバックグラウンドに移行すると、backgroundTimeRemainingの値が599.XXX(10分)から減少することがわかります。backgroundTimeRemainingがZEROになると、バックグラウンドタスクは一時停止されます。

        //1)Creating iOS Background Task
        __block UIBackgroundTaskIdentifier background_task;
        background_task = [application beginBackgroundTaskWithExpirationHandler:^ {

               //This code block is execute when the application’s 
               //remaining background time reaches ZERO.
          }];


        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            //### background task starts

            //#### background task ends
        });

        //2)Making background task Asynchronous
        if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)])
        {
            NSLog(@"Multitasking Supported");

            __block UIBackgroundTaskIdentifier background_task;
            background_task = [application beginBackgroundTaskWithExpirationHandler:^ {

                //Clean up code. Tell the system that we are done.
                [application endBackgroundTask: background_task];
                background_task = UIBackgroundTaskInvalid;
            }];


        **//Putting All together**
            //To make the code block asynchronous
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

                //### background task starts
                NSLog(@"Running in the background\n");
                while(TRUE)
                {
                    NSLog(@"Background time Remaining: %f",[[UIApplication sharedApplication] backgroundTimeRemaining]);
                    [NSThread sleepForTimeInterval:1]; //wait for 1 sec
                }
                //#### background task ends

                //Clean up code. Tell the system that we are done.
                [application endBackgroundTask: background_task];
                background_task = UIBackgroundTaskInvalid; 
            });
        }
        else
        {
            NSLog(@"Multitasking Not Supported");
        }
于 2013-07-09T17:27:03.390 に答える
3

在庫のiOSデバイスで実行するには、アプリをオーディオプレーヤー/レコーダーまたはVOIPアプリ、App Storeに送信するための正規のアプリ、または自分で使用する場合のみ偽のアプリにします。

これでも、アプリが「完全に機能する」ようになるわけではありませんが、限られたAPIに制限されます。

于 2010-09-21T16:35:46.077 に答える
2

それが何をするかに依存します。アプリが大量のメモリを消費する場合、またはすべきでない関数/クラスを呼び出す場合、SpringBoardはアプリを終了する場合があります。ただし、7つのバックグラウンドでの使用に従わないため、Appleによって拒否される可能性があります。

于 2010-09-21T16:35:10.617 に答える
1

リンクは、bczuがAppdelegateのコードをバックグラウンドで実行するアプリで実装する必要がある場合に役立つ可能性があります。アプリケーションクラスについてはdeveloper.apple.comサイトも参照してください。バックグラウンドでアプリを実行するためのリンクは次のとおりです

于 2011-07-21T05:12:03.627 に答える