3

前回アプリが予期せず終了した場合 (クラッシュ、強制終了)、アプリの起動時に何かをしたいのですが、どうすればわかりますか?

4

3 に答える 3

7

これを行うには、アプリの起動時とアプリがフォアグラウンドに入ったときに NSUserDefaults にBOOLtoを設定します。YES

NOアプリがバックグラウンドに入るときに、これと同じ値を設定します。

の開始時didFinishLaunchingWithOptions(フラグを YES に設定する前) に、フラグが現在 に設定されているかどうかを確認しYESます。である場合YES、アプリが不正にクラッシュしたことがわかります。

ただし、これは、アプリがバックグラウンドで (OS またはユーザーによって) 強制終了されたかどうかを確認しません。

アプリがバックグラウンドに入ったときにフラグを設定し、アプリがフォアグラウンドに入ったときにフラグをクリアすることで、バックグラウンドで (OS またはユーザーによって) 強制終了を処理できます。didFinishLaunchingWithOptions次に、メソッドでこのフラグを確認します。このフラグが設定されている場合は、バックグラウンドでアプリが強制終了されたことがわかります。

バックグラウンドでの強制終了は、実際には「予期しない終了」と見なされるべきではないことに注意してください。それは実際にはかなり期待されています。

于 2013-03-15T01:29:16.407 に答える
3

はい、できます。最も簡単な方法は、<Application_Home>/Documents/ディレクトリ内に既知の名前のファイルを作成し、「通常の」終了時にそのファイルを削除することです。起動時にファイルが存在する場合は、以前の終了が「通常の」終了ではなかったことがわかります。

ファイルの内容を定期的に更新して、現在のタイムスタンプをタイマーに毎分書き込むことができます。このようにして、異常終了がいつ発生したかをおおよそ知ることができます。

于 2013-03-15T01:27:24.260 に答える
2

今後の参考のためにこれを投稿します。

追加のカバレッジについては、次のアクティビティ状態を確認してください

  • (void)applicationDidBecomeActive:(UIApplication *)アプリケーション
  • (void)applicationWillResignActive:(UIApplication *)アプリケーション

次に、nsuserdefaults を使用してステータスを追跡します

バックグラウンド チェックの主な違いは、アプリがまだフォアグラウンドで実行されているときに、ユーザーがアプリ スイッチャーを介してアプリをすぐに閉じるというエッジ ケースをカバーすることです。また、これはバックグラウンド対応アプリにも役立ちます

クラッシュとこれらの強制終了の間のカバレッジが広がる可能性があると思います...バッテリー切れのテストはしていませんが

于 2014-10-09T18:14:28.713 に答える