2016-09-19 8 views
2

多くのサブスクリプションでUIを更新していますが、View Controllerの一部を起動して更新しているため、アプリケーションがバックグラウンドで実行されたときに一時停止したいと考えています。UIアップデートのサブスクリプションをバックグラウンドで一時停止し、フォアグラウンドで再起動しますか?

これを処理して、バックグラウンドでメモリや不要なUIのアップデートを意識するのに最適な方法は何ですか?

答えて

0

私はあなたのアプリがバックグラウンドで何をしているのかによって異なります。

多分それはです:

  • はそれがいっていることtimer/intervalです。
  • まだ返されていない、またはWebSocketに接続されているネットワークリクエストのObservable
  • Observable画面の向きが変わるなどのシステムイベントを聴いています。

Observableに応じて、別の方法で処理することができます。ネットワークリクエストの場合は、キャンセルするか、キャンセルしてフォアグラウンドで再起動することができます。向きが変わるようなシステムイベントの場合は、フォアグラウンドで現在の値を取得するだけです。

いずれにしても、どうしてあなたはメモリに心配しているのですか?私は、iOSにシステムメモリの問題を扱わせてもらいたいと思います。あなたのアプリを殺すことを決定した場合は、Disposableを正しく掃除する必要があります(DisposeBagを正しく使用している場合)。それで、あなたはアプリケーションが十分な状態を維持していることを心配するだけで、中断した場所(正しいページなどにある)を拾うことができます。 iOSの代わりに最適化を試みることはお勧めしません。 iOSができる限りあなたのアプリを稼働させましょう。あなたのユーザーはちょうど1秒間何か別のアプリにジャンプしているかもしれません。

func applicationDidEnterBackground(application: UIApplication) { 

    // Do something to notify your services to unsubscribe 
} 

func applicationWillEnterForeground(application: UIApplication) { 

    // Do something to resubscribe for notification and also catch up for anything you missed while in the background 
}  

それはおそらくまで読む価値があります:

+0

問題はmですRxはバックグラウンドで起動してUI要素を更新しています。UIがRxからの要求を満たすために追いついているので、フォアグラウンドに来るとアプリがフリーズします。だから、私はUIを更新しているオブザーバーを一時停止するべきだと思っています。 – TruMan1

+0

それでは、問題のObservablesを中断するための適切な方法は何かの問題になります。すべてのイベントを無視し、最後をバッファリングします。必要に応じて、新しいバックグラウンド/フォアグラウンド演算子と組み合わせ演算子を使用できます。 – solidcell

0

UIApplicationDelegate(つまり、あなたのAppDelegate.swift)ことを実装する価値があるいくつかの有用な方法は、あなたが

探しているものこれらを実装しようとするあなたが近づくことがありますUIApplicationDelegateにもう一度、「アクティブ」や「非アクティブ」などのすべての可能性のある状態について学習しますが、これは正しい方向に進むようにします。 https://developer.apple.com/reference/uikit/uiapplicationdelegate

関連する問題