2

メインスレッドでいくつかのタスクを実行する単純なアプリケーションを作成しています。プロセスを印刷してNSLogいるので、プロセスが実行されているかどうかを理解できます。

プロセスを開始せずにホームボタンを押すと(ボタンをタップするとプロセスが開始されます)、アプリケーションがバックグラウンドに入り、両方のメソッドが呼び出されますapplicationDidEnterBackgroundapplicationWillResignActive

しかし、最初にボタンをタップすると、メインスレッドでプロセスが開始され、その後ホームボタンを押すと、これら2つのメソッドのいずれも呼び出されません。したがって、私のアプリケーションは、そのアプリがバックグラウンドで入力されたかどうかを知ることができません。

その後もアプリを再度アクティブにすると、ステータスバーのみの黒い画面が表示されます。

  1. なぜこれが起こっているのですか?
  2. アプリがバックグラウンドに入らないのはなぜですか?
  3. アップルのメソッドが呼び出されないのはなぜですか?
  4. それを解決する方法はありますか?

UPDATE これが私のappdelegateクラスコードです

- (void)applicationWillResignActive:(UIApplication *)application
{

}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{

}

- (void)applicationDidBecomeActive:(UIApplication *)application
{

}

すべてのメソッドには実装がありません。

前もって感謝します。

4

3 に答える 3

4

メインスレッドでいくつかのタスクを実行する単純なアプリケーションを作成しています。

メイン スレッドで実行時間の長い操作を実行しないでください。

デリゲート コールバックはメイン スレッドで発生します。メインスレッドがビジーの場合、「実行ループ」に戻るまでコールバックは発生しません。

アプリをフォアグラウンドにすると、OS は実際にスクリーンショットを表示し (利用可能な場合)、起動イメージ (Default.png) にフォールバックします。スクリーンショットは-applicationDidEnterBackground:返品後に取得されるため、保存する内容をカスタマイズできます (セキュリティ上の理由でこれを行うか、再起動時に表示する意味がない UI 要素 (カウントダウン タイマーなど) を非表示にする必要がある場合があります)。

黒い画面はおそらく、アプリに起動イメージがないためです。アプリがバックグラウンドに入るのに約 10 秒以上かかる場合 (メイン スレッドがブロックされているため、バックグラウンドに入る場合)、そのアプリは強制終了されます。ただし、デバッガーが付属していて SIGKILL をキャッチするため、Xcode を監視していない限り見逃すのは簡単です。

于 2013-01-19T01:19:55.413 に答える
2

いくつかのケースがあります

UIApplicationExitsOnSuspendアプリの で key が true に設定されている場合Info.plist、ユーザーがホーム ボタンを押したときに applicationWillResignActive メソッドは呼び出されません。他の何かがあるかもしれません。ここでキーを確認してくださいAppleキーそして、plistに何か新しいものを追加したかどうかを確認してください。また、デリゲート メソッドが呼び出されていないと言うケースは他にありません。また、プロジェクトが適切に動作するために、しばらく時間がかかる場合があります。プロジェクトをクリーンアップして再構築してみてください。

于 2012-05-21T05:18:55.063 に答える
0

これは奇妙に聞こえるかもしれませんが、それらにとっては役に立ちます。同じ問題が発生し、プロジェクトをクリーンアップすると、再び機能し始めました。

于 2013-01-19T00:48:41.457 に答える