35

iOS4.0 以前は、iPhone のホーム ボタンをクリックするとアプリケーションが終了し、Apple のガイドでは、プログラムによるアプリケーションの終了は受け入れられないと記載されていました。

現在、iOS4.0 ではすべてが変更されており、ホーム ボタンをクリックするとアプリがサスペンド モード (マルチタスク) になります。終了ボタンのように、ユーザーがアプリを終了する明確な方法が必要だと思います。

アップルで大丈夫ですか?どうすればそれを行うことができますか?

4

11 に答える 11

50

Info.plist キー UIApplicationExitsOnSuspend を設定して、アプリが完全に終了していることを確認できます。

于 2010-06-23T01:04:37.467 に答える
24

いいえ、まだこれを行うべきではありません。

さまざまな段階のハンドラーがあるため、これがその方法です。手動で終了しても意味がありません。アプリを再起動する場合、理想的には中断したところから開始されるため、これは再開するか、古い状態を開始してロードすることによって行われます。

退会理由なし。

編集

これが再びポップアップし続けるので: iOS ヒューマン インターフェイス ガイドラインには、「プログラムで終了しないでください」と書かれています。また、exit() を呼び出すアプリが過去に多数報告されています。

もちろん、Info.plist ファイルに適切なキーを設定して中断する代わりに終了することはまったく問題ありませんが、これは専用の UI ボタン​​ではなく、ホーム ボタンによるプログラム終了のアプリケーション固有の実装です。

于 2010-06-22T21:30:01.037 に答える
8

プログラムによって呼び出されるのには理由がありますexit()

起動時に常に開始され、メモリ警告が発生した場合など、システムによって強制終了されたときに再起動される voip アプリがあるとします。voip TCP ソケットを維持するためにバックグラウンドで実行する必要があるため、通常はこれが推奨される動作です。

ただし、アプリが複数の動作モードをサポートしている場合 (a) TCP を使用してバックグラウンドで実行する、b) バックグラウンドで実行せずに PUSH 通知を受け入れた後にのみ開始するなど)、ユーザーがアプリを b) モードで使用する場合は、アプリが他のアプリに使用できるメモリを消費しているとは思いません。

exit(0)したがって、アプリがバックグラウンドで開始され、ユーザーがアプリを b) モードで適切に実行して自動的に再起動しないようにしたい場合、アプリが開始時にチェックできると便利です。

于 2012-08-29T12:51:42.993 に答える
6

iOS Debugging Magic (Technical Note TN2239)も参照してください。

iOS アプリケーションのライフサイクルはユーザーの制御下にあることに注意してください。つまり、iOS アプリケーションはただ終了するべきではありません。リリース ビルドは、とにかくクラッシュする状況でのみ中止を呼び出す必要があります。また、中止の呼び出しにより、ユーザー データへの損傷を防止したり、問題をより簡単に診断したりできます。

早期終了の原因を特定するというトピックについては、iPhone OS アプリケーション クラッシュ レポートの理解と分析 (テクニカル ノート TN2151)が興味深いかもしれません。

トピックから少し外れて申し訳ありませんが、それは早期終了と診断に関連しています。

ジェフ

于 2011-03-19T01:30:16.280 に答える
3

私はこれに本当に問題がありました。手動またはプログラムで終了することには大きなポイントがあります。

以前のiPhoneOSでは、アプリが終了したときに、その状態(1回目または2回目以降など)をplistに書き込んでいました。ユーザーが戻ってきたとき、plistを読んでさまざまなことを示したかったのです。また、ユーザーが終了後に戻ってくるたびに最初の画面を表示したかったのです。

iPhone OS4でアプリがバックグラウンドで一時停止されると、アプリは中断したところに戻り(つまり、ユーザーがどこにいても同じ画面を表示し)、applicationWillTerminateが呼び出されないため、アプリの状態が変更されることはありません。

これはほとんどの場合(アプリを一時的に終了したときに続行できるようにするために)望ましい動作であるため、選択できる方法、つまりアプリを一時停止するか終了する方法が必要です。

UIApplicationExitsOnSuspend = YESを設定すると、一方向しか得られないため(つまり、HOMEが押されると常に終了します)、これは私が探している解決策ではありません。

シーケンスが一時停止されただけではなく、一連のステップ全体が完了したらアプリに通知し、適切なタイミングで終了するようにします。

これを行うには、使用がシーケンス全体を完了したら、アプリを終了して状態を書き出すことができる必要があります。それ以外の場合は、アプリを一時停止したいだけです。

HOMEボタンを2回タップすると、一時停止中のアプリが表示されます。アプリを長くタッチして表示される(-)記号をタッチすることで、アプリを削除(終了)できますが、これはユーザーにとって直感的ではなく、手順が多すぎます。

もう1つのオプションは、アプリのナビゲーションタブの1つとして[終了]ボタンを使用することですが、それは醜いです。今のところ、私の唯一のオプションはUIApplicationExitsOnSuspend=YESを設定することを選択しているようです。

于 2010-07-05T03:19:35.953 に答える
3

いつでもご利用いただけますexit(1)。これは、コード/理由の整数を使用したそのままの/強制終了です。終了したいときのシミュレーションモードのように、開発中にこれを使用できます。今のように。

于 2011-08-17T16:29:40.630 に答える
3

@Joost Schuur; の回答の手順は次のとおりです。

  1. info.plistファイルを開きます

  2. キーUIApplicationExitsOnSuspend を追加するか、バックグラウンドで実行されないアプリケーションを選択します

  3. 新しいキーをYESに設定するか、チェックボックスに入力します

ブレークポイントがapplicationWillResignActiveあり、applicationWillTerminateそれが機能することが示されます。

于 2012-12-11T05:56:02.573 に答える
1

あなたはこれをするべきではありません。ユーザーがアプリを終了したい場合は、HOME ボタンを押します。

ユーザーがホームボタンを押すと、UIApplicationWillResignActiveNotification通知が届きます。その通知を使用して、すべてのリソースを破棄します。

基本的に、ユーザーがホーム ボタンを押したとき、アプリは「隅に隠れる」(できるだけ少ないメモリを消費する) 必要があります。ただし、取り壊すほど、ユーザーが元に戻ったときにアプリが再び表示されるまでに時間がかかるため、トレードオフがあります (すべてのリソースをリロードする必要があります)。

于 2013-04-07T02:10:43.223 に答える
-4

次のプライベート コマンドを使用して、アプリをプログラムでバックグラウンドに配置できます。

(ただし、アプリを使用すると拒否されます)

[[UIApplication sharedApplication] suspend];
于 2011-07-16T18:05:58.773 に答える