0

毎秒トリガーされるNSTimerを使用するアプリを作成しました。

私の問題は、iPhoneがスリープモードの場合、イベントがトリガーされる前に10〜15分の遅延が発生することです。私はこれをスタックオーバーフローしてグーグルで検索しましたが、これはスリープモードのときに電話が特定のイベントのリッスンを停止するためと思われます。

一部の人々は、電話をスリープさせずにミュート音を再生することでこの問題を解決しました。

  1. 遅延の理由は何でしょうか?
  2. ミュートサウンドソリューションは非常に「汚い」もののようです。これを解決する他の方法はありますか?
  3. ミュートサウンドソリューションを使用した場合、アップルレビューに合格しますか?

コード:

timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(goAction)userInfo:nil repeats:YES];

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

-(void)goAction {
  // Here i check for some dates and then call the activateBeepAlarmView 
}
4

4 に答える 4

2

だれも私の3つの質問に答えていないので、私はそれらに答えなければなりません。

1.遅延の理由は何でしょうか?私はベンS を引用する必要があります:

アプリケーションでapplicationWillResignActiveが呼び出されると、イベントの受信を停止するだけです。デリゲートは、このメソッドを実装して、アプリケーションがアクティブ状態から非アクティブ状態に移行するときに調整を行うことができます。アプリケーションが非アクティブの場合、アプリケーションは実行されていますが、着信イベントをディスパッチしていません。これは、オーバーレイウィンドウがポップアップしたとき、またはデバイスがロックされたときに発生します。

スリープモードのポイントは、エネルギーを節約することです。そうするために、デバイスはあなたが求めているようなイベントのリッスンを停止します。NSTimerイベントは、高価な(バッテリー単位の)ハードウェア監視を必要としないため、引き続き発生します。また、アラームはNSTimerを使用して実装されるため、スリープ状態でも機能できる必要があります。そうしないと、人々は目を覚ましてiPhoneを責めないかもしれません。

2.ミュートサウンドソリューションは非常に「汚い」ソリューションのようです。これを解決する他の方法はありますか?
いいえ、現在、別の解決策は見つかりません。間違っている場合は、遠慮なく訂正してください。その方法については、このブログ投稿をご覧ください。

3.ミュートサウンドソリューションを使用した場合、アップルレビューに合格しますか? はい

于 2010-03-30T07:25:21.453 に答える
1

iPhoneがスリープ状態になると、アプリとNSTimerを実行するrunloopもスリープ状態になります。

NSTimerはある種のハードウェアベースのタイマーだと思われているようです。そうではない。それはそれを起動するアプリのソフトウェア内で完全に動作します。何があなたのアプリを目覚めさせているのかわかりませんが、それは間違いなくNSTimerではありません。

要するに、あなたがやりたいことは不可能です。スマートフォンをスリープ状態にしてから、アプリをアクティブにして実行することはできません。ミュートサウンドのテクニックは、電話を目覚めさせてアプリを実行し続けるための単なる応急修理です。

電話をスリープ状態に保つ必要がある場合は、アプリケーションidleTimerDisabledをYESに設定する必要があります。これにより、電話がスリープ状態にならず、アプリがアクティブなままになります。しかし、一度電話をスリープ状態にすると、アプリコードから目覚めることはできません。アラームまたは着信メッセージに応答してそれを実行できるのはハードウェアだけです。

于 2010-03-07T16:32:25.753 に答える
0

NSTimerが毎秒トリガーされると、アプリで何が起こりますか?タイマーの作成を示すコードと、タイマーの完了時に呼び出されるセレクターのコードを提供してください。

また、「10〜15分の遅延」とはどういう意味ですか?遅延は常にそれほど長いのですか、それともiPhoneが目覚めるのを待ってから、イベントがトリガーされるのにどれくらいの時間がかかりますか?

毎秒何をする必要があるかに応じて、さまざまな方法でこの状況に対処できます。返信してください。これを処理するよう努めます。

バート

于 2010-03-07T16:24:37.910 に答える
0

@ヤコブ、

これは「公式SDK」では不可能です。刑務所で壊れた電話用のアプリを開発している場合は、これにIOKitフレームワークを使用できます。詳細については、こちらを参照してください。

于 2010-10-06T19:44:07.213 に答える