2

これが私が直面している問題です。私が構築しているアプリケーションの特定の部分は、さまざまなサーバー/サービスへの接続を可能にするいくつかのcネットワークソケットを開きます。ただし、アプリケーションがスリープ状態になると、これらのソケット接続は失われ、リロードしようとするとエラーになります。ですから、私がやりたいのは、基本的に、アプリが再起動したときに、アプリケーションを再起動する必要があることをユーザーに通知することです。主な質問は、アプリが拒否されることなく、exit(0)を使用してアプリを強制終了するボタンを提示できるかどうかです。

Appleは、ユーザーがいつアプリを強制終了するかを制御する必要があると言っています。この場合、ユーザーが強制終了することはわかりますが、これに関するAppleの意見はわかりません。他の誰かがこれを使用しましたか?これで拒否されましたか?アドバイスをよろしくお願いします!

編集:

みなさん、アドバイスありがとうございます。私はすべてを考慮に入れようとしていますが、アプリはできるだけ早く提出する必要があるため、別の解決策を取得できない場合、上記の提案された解決策が拒否されるかどうかを知る必要があります。

4

4 に答える 4

4

重要なイベントがアプリケーションの寿命に影響を与えると、アプリケーションデリゲートは通知を受け取ります。ユーザーにセッションの再作成を依頼するのではなく、ネットワーク操作を中止してから、アプリケーションのライフサイクルの適切なタイミングで自動的に再開する必要があります。

アプリケーションがアプリケーションデリゲートのコールバックを介してバックグラウンドを終了または開始する準備をしているときに、(とりわけ)ネットワークソケットを任意の数の場所で適切に強制終了できます。

applicationWillResignActive:
applicationWillEnterBackground:
applicationWillTerminate:

次の場所でソケットを再構築する可能性があります。

applicationDidBecomeActive
applicationWillEnterForeground
于 2012-04-21T21:29:35.013 に答える
3

アプリをバックグラウンドで実行させないようにしましたか?その後、ユーザーがホーム画面に戻るたびに強制終了されます。これは少し攻撃的かもしれませんが、問題は解決します。Appleのバックグラウンド実行のオプトアウトから:

「アプリケーションを終了したときにアプリケーションをバックグラウンドに残したくない場合は、UIApplicationExitsOnSuspendキーをアプリケーションのInfo.plistファイルに追加し、その値をYESに設定することで、バックグラウンド実行モデルを明示的にオプトアウトできます。

アプリケーションがオプトアウトすると、実行されていない状態、非アクティブな状態、アクティブな状態の間を循環し、バックグラウンド状態や一時停止状態になることはありません。

ユーザーがホームボタンをタップしてアプリケーションを終了すると、applicationWillTerminate:アプリケーションデリゲートのメソッドが呼び出され、アプリケーションは約5秒でクリーンアップして終了し、終了して非実行状態に戻ります。」

参照:iPhoneでアプリがバックグラウンドで実行されないようにする方法

于 2012-04-21T21:26:10.210 に答える
1

ドキュメントはこれについてかなり明確です、「iOSアプリケーションを正常に終了するためのAPIは提供されていません」。技術的なQ&Aを参照してください。QA1561iOSアプリケーションをプログラムで終了するにはどうすればよいですか。

率直に言って、ソケットをクリーンアップするためにアプリを終了することは、を呼び出す代わりにアプリを強制的に終了することによってメモリ管理を処理するのと同じですrelease

于 2012-04-22T00:04:23.533 に答える
0

ユーザーにアプリケーションを終了するように指示するモーダルビューコントローラーを起動するのはどうですか?このViewControllerは、閉じるボタンなしで作成できるため、ユーザーはアプリを強制終了する必要があります。

于 2012-04-21T21:25:12.447 に答える