2016-08-18 6 views
1

アプリケーションに関係なく1時間ごとにメソッドをトリガする方法はアクティブかバックグラウンドか終了します。 メソッドは1時間ごとにトリガする必要があります。アプリをアクティブ、バックグラウンド、または終了に関係なく1時間ごとにメソッドをトリガーする方法

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:60*60 target:self selector:@selector(callYourMethod:) userInfo:nil repeats:YES]; 

私はNSTimerは時間の10分後に動作しないことを聞きました。

は、局所的にこのタイプのタスクを管理する方法にiOSのObjecitve-C

+1

これを実行する確実な方法はありません。タイマーに時間制限があると言った人は誰でも、間違っている、またはコンテキストがありません。アプリが終了した場合は、プッシュキット通知などの外部トリガーを使用してアプリを再度起動する必要があります。バックグラウンドではほとんど同じですが、目を覚ますための選択肢が増えています。 PKは最も近いものの、100%信頼できるものはありません。もちろん、あなたのアプリはそれを使うためのVoIPアプリでなければなりません。 – Avi

+0

毎時間何かする必要がありますか?これはモバイルアプリのデザインが悪いためです。この方法でバッテリーを消耗します。ユーザーがあなたのアプリを殺した場合、タスクは完了しません。あなたはこのサーバー側をやって、必要に応じてプッシュ通知を使用してアプリにプッシュする方がよいでしょう。また、VOIP、オーディオ、ロケーション、アクセサリーアプリだけをバックグラウンドで実行できます。あなたのアプリをバックグラウンドで実行させるためにこれらのうちの1つを悪用すると、あなたのアプリが拒否されます。 – rckoenes

+0

タイマーはメインスレッドで動作します。アプリケーションがバックグラウンドになると、タイマーは無効になります。したがって、アプリケーションがバックグラウンドになると、同じことをすることはできません。 –

答えて

0

内のすべての1時間をトリガする方法を有効にするにはどのようにいずれかのアドバイス私は悪い考えであることができます。 NSTimerやGCDは、アプリケーションがフォアグラウンド状態にあるときに使用されるように設計されているため、NSTimerやGCDに余裕がありません。

バックグラウンドでは、iOSの裁量で、数分後にアプリがタイマーやディスパッチ方法を無効にすることができます。システムが他のアプリのメモリを解放する必要がある場合、またはバッテリー消費を最適化する必要がある場合、アプリはSuspended状態になります。

iOS 8で導入されたPushKit FrameworkのVoIP通知を使用することによってのみ、閉鎖または中断状態からのアプリの目覚めを強制することができます。このタイプの通知は、VoIPサービスを実装する場合あなたはアプリです。このフレームワークは、まずアップルだけでなく、StackOverflowのような他のサイトでも、ひどく文書化されています。私は、あなたがVoIPサービスを使用するアプリケーションの完全に機能的なデモを構築するためにステップバイステップガイドthis tutorial by Pierre-Marc Airoldiに従うことをお勧めします。 標準の通知は通知を受け取ったときに何もしないことに注意してください。AppDelegateのメソッドは、通知をクリックした場合にのみ起動されます。通知をユーザーに表示したくない場合は、メッセージなしで通知を送信します。画面には表示されませんが、受信されます。

関連する問題