2016-08-19 8 views
5

iOS用iOSアプリを構築しています。& 9、アプリがバックグラウンドに移行するとシステムが2または3分。iOSアプリがバックグラウンドでシステムを終了するのを避ける方法

私のテストは簡単です:私は私のiPhoneからのすべての実行中のアプリを殺す

  1. iPhoneを再起動します(他のアプリがメモリを使用しないように)。
  2. 私は自分のアプリを起動します。
  3. 私はアプリ内で何もしません。
  4. "ホーム"ボタンを押して、アプリをバックグラウンドに移動します。
  5. 私は何もしないで2〜3分間待っています。
  6. 私のアプリをもう一度開き、驚いて、システムはそれを終了し、今度は新しい起動として再起動しています。

いくつかのコメント:

  • は、アプリがバックグラウンドでもない他のサービスでCoreLocationを使用していません。
  • アプリをプロファイリングして、あまりにも多くのメモリを消費しているかどうかを理解しようとしました。バックグラウンドに移行すると、約25MbのRAMメモリを消費します。私は以下のスクリーンショットを添付しています。
  • この動作はiPhone 5、5s、6、6+でテストされています。
  • iPhone 6sおよび6sでは、もう少し時間がかかるようですが、それでもなお発生します。

App Allocations Profile

私の質問は:あなたは、なぜこれが起こっされるだろう知っていますか?私が考えていないか、忘れているかもしれない何か?

CoreLocationなどを使用してアプリをバックグラウンドで強制的に実行させたくありません。そして、最終的にシステムが私のアプリを殺すなら、私は大丈夫です。私が望んでいないのは、アプリをバックグラウンドに移動するたびにシステムが終了させるということです。

ご意見やご協力をいただければ幸いです。すべてのアプリケーションが自動的にApple社のドキュメントに従ってシステム

によって殺され

+0

は、メソッドにブレークポイントを追加します..今、あなたはあなたのエラーを見つけることができることができます...あなたのアプリケーションを実行する前に、

  • 、あるいはまた、それが終了しますあまりにも多くのメモリをデバッグナビゲータを選択してくださいもう一度 'didFinishLaunchingWithOptions'を呼び出すことを確認してください –

  • +0

    あなたのアプリは実際に何をしていますか?例えばOpenGLを呼び出すと、あなたのアプリが殺されます。 –

    答えて

    0

    おかげで、:

    アプリケーションの終了

    アプリはいつでも発生する、終了のために準備しなければならない ユーザーデータを保存したり他の重要なタスクを実行するのを待つべきではありません。システム起動>終了は、アプリのライフサイクルの通常の部分です。システムは通常、>メモリを回収して他のアプリのためのスペースを作る>アプリを終了させ、ユーザーによって起動されますが、システムは誤動作している、またはタイムリーにイベントに応答しないアプリを終了させることもあります。

    中断されたアプリは終了時に通知を受けません。 >システムはプロセスを強制終了し、対応するメモリを再要求します。app>が現在バックグラウンドで実行中で、中断されていない場合、システムは終了する前にそのアプリケーションデリゲートの> applicationWillTerminate:を呼び出します。 >デバイスの再起動時に、このメソッドは呼び出されません。

    アプリを終了するシステムに加えて、ユーザーはマルチタスクUIを使用して明示的にアプリを終了することができます。ユーザーが開始した終了>は中断したアプリケーションを終了するのと同じ効果があります。アプリのプロセスは強制終了され、通知はアプリに送信されません。

    https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html#//apple_ref/doc/uid/TP40007072-CH2-SW1

    あなたが位置を追跡することができますが、あなたは確かに青色のステータスバーには、そのアプリケーションを使用するGPSトラッキングを示すために表示されます。

    たぶん、あなたは「ウェイクアップ」サイレント通知にバックグラウンドでアプリが...

    システムを信頼し、生きているあなたのアプリを維持するために必要でない場合は...

    +0

    メッセージをありがとう。私はすでにこれについてほとんど気づいていました。ここで私の質問はなぜそれをすばやく終了させるのですか?もし私がこれを避けるためにできることがあれば。他のアプリと一緒に遊んでいるときには、システムによって終了するのに時間がかかることがあります。 – vilanovi

    +0

    @vilanoviあなたはそれをチェックすることができますNSLog(@ "%f"、[UIApplication sharedApplication] .backgroundTimeRemaining); –

    +0

    in applicationDidEnterBackground –

    -1

    Appsに試すことができましたバックグラウンドで動作しているバッテリー寿命がより短くなります、平均消費者がアプリのバッテリーを消耗しているとは考えていないため、アプリの代わりにデバイスの悪い認識を与えます。 したがって、iOSではアプリがバックグラウンドで数秒以上実行されることは許可されません。しかし、いくつかの例外があります。アプリはバックグラウンドタスクの開始を宣言することでこれに拡張を要求できます。詳細は

    あなたは以下のリンクをチェックすることができます:あなたのコードの内部で http://blog.dkaminsky.info/2013/01/27/keep-your-ios-app-running-in-background-forever/

    http://www.speirs.org/blog/2012/1/2/misconceptions-about-ios-multitasking.html

    +0

    バックグラウンドでのアプリの実行について質問していません。答える前に質問をお読みください。 – vilanovi

    +0

    親愛なるvilanovi、atlanduの答えのために、あなたはなぜアプリがとても早く終了したとコメントしましたか?その質問については、まっすぐ答えは、バッテリ寿命を節約することです。これを回避する方法は2番目のクエリのために、私はリンクを提供してbeginBackgroundTaskWithExpirationHandlerを使用することをお勧めします。 –

    +0

    はい、本当です。しかし、問題の本質は、アプリをバックグラウンドで実行させる方法を理解するのではなく、なぜ、いつ、システムによって殺されているのかを理解しようとする。 – vilanovi

    -1
    1. いくつかのエラー。アプリデリゲートで

    +0

    私はすでにこのような問題を認識しています。ここでは、iOSがバックグラウンドアプリをどのように管理するかをより一般的に理解することを求めています。 – vilanovi

    関連する問題