2011-07-01 2 views
0

私はUIThreadとバックグラウンドスレッドを持つアプリケーションを作成しています。バックグラウンドスレッドは、基本的にタイマーとして使用されています。毎秒UIを更新するためにUIThreadにメッセージを送信します。ユーザーがバックボタンを押してアプリを終了すると、スレッドは引き続き実行されます。私はタイマーがカウントダウンを続けている間、ユーザーが別のアプリを開きたいかもしれないので、これが起きたいと思っています。Androidスレッドに接続する

私の質問は、ユーザーが自分のアプリに戻ったときです。私はアプリの現在の状態を表示するために実行されているそのバックグラウンドスレッドに接続したい - どのくらいの時間が残っているなど私の質問はバックグラウンドで実行されているスレッドに戻ってフックする方法です。私は、スレッドとAsyncTaskを使用してみましたが、同じ問題が発生します。

ご協力いただきありがとうございます。

+0

ユーザーにUIが表示されない場合は、それをなぜ更新していますか?私が主張しているものの、ユーザが戻るまで、指数関数的な更新のバックオフに従事することは少なくとも新鮮であれば大抵の場合、個々の更新がすばらしく速くなければならないので、これは無駄な努力であるとにかく、ユーザーはアプリケーションに戻るときにそれを待つことは気にしません。 – cyngus

答えて

0

まず、あなたのタイマースレッドをサービスに変更し、関心のあるアプリをそのサービスにバインドするようにしてください。 Androidのドキュメントと提案されたアプリデザインに基づいて、にそのスレッドを依存させることはできません。は、必要と思われる場合は常にOSによって殺されます。

http://developer.android.com/guide/topics/fundamentals/services.html

1

あなたのスレッドは、まだ全くの偶然に回している - あなたのアプリケーションが実際にはまだ実行されているが、Androidはそれがリソースを必要と判断した場合、それとのスレッドがシャットダウンされます。

あなたがしたいことは、Androidで十分に提供されています。サービスを実装して、アプリケーションとは別にバックグラウンドで実行されるプロセスを持つ必要があります。起動時にサービスを開始し、アプリケーションの起動の有無に関わらず実行することさえできます。

このhttp://developer.android.com/reference/android/app/Service.htmlには、あなたが知る必要があるものがほとんどあります。サービスと前景アクティビティとの間で通信するには、サービスインターフェイスにバインドする必要がありますが、これは非常に簡単です。

+0

また、まだサービスを使用している場合は、アクティビティonResumeにBroadcastReceiverを登録し、サービスからメッセージを送信することができます。 – Marmoy

0

アンドロイドシステムは毎分ブロードキャストイベントを提供します。TIME_TICKです。

あなたはする必要があります

  • は、サービスを作成します。これは、アプリの一部をバックグラウンドで実行するための推奨方法です。
  • TIME_TICKイベントを聞きます。これにより、バッテリの消費が少なくなります。
  • アラームを追加する(必要に応じて電話機をスリープ解除する)
  • UIとサービスがやりとりするようにしてください。(It won't wake the phone, though、アラームも使用してください) callback via rpcが必要です(apiページの最後のコールバックの例を参照してください)

また、電話機がタイムフレーム中にスリープできることを確認する必要があります。したがって、状態を常に更新するのではなく、出発点と現在の間のデルタとして状態を計算することができます。

+0

ああ、しないでください。なぜあなたはTIME_TICKを使用して、AlarmManagerを使用して、それを将来設定することができますか?また、毎分電話をスリープ状態にしないでください。この場合、特に、電話機が目に見えないUIを更新するために目を覚ます場合、これは無駄な作業である。 – cyngus

+0

あなたはtime_tickはあなたの携帯電話を目を覚ますことはありません読むのですか?さらに、UIはカウントダウン後に通知を送信することがあります。その場合は、電話機をスリープ状態にする必要があります。アクティビティのタスクに応じて、システムを時々復帰させて何らかの作業をしたい場合がありますが、一般的な例はネットワークプルです。デルタ計算+アラームが最適な解決策になるかもしれませんが、質問から分かりにくいです。 – treffer

関連する問題