2011-08-05 7 views
0

私はAndroidアプリを持っています。私にはボタンがある主な活動があります。ボタンをクリックすると、別のアクティビティがフォアグラウンドに表示されます。つまり、サーバーから更新をポーリングするバックグラウンドスレッドを実行したいのです。しかし、アプリがフォアグラウンド(主なアクティビティまたは2番目のアクティビティのいずれか)にある場合にのみ実行し、ユーザーがメインボタンをクリックしたり、メインアクティビティから戻るまで戻るボタンをクリックしたときにポーリングを停止する必要があります。Androidアプリがフォアグラウンドの間にスレッドを実行する

しかし、アプリがまだフォアグラウンドにあるかどうかはどうすればわかりますか?私は主なアクティビティのonPauseをキャッチすることができますが、2番目のアクティビティを開始するときにも呼び出されます。

アプリのバックグラウンドはいつわかりますか?

おかげ

答えて

0

各アクティビティのポーリングように私には最も簡単なようです。それが2つの活動の間にあるときに投票できることは非常に重要ですか?さもなければ、誰が正面にいるかを知ることに問題があります。

0

参照カウントを持つシングルトンを持つことができます。 主なアクティビティは最初の参照をonResumeに追加する必要があります。今から、新しいアクティビティ(startActivityなど)ごとに呼び出すときに参照を追加する必要があります。 各アクティビティは、そのonPauseの参照カウントを減らす必要があります。あなたは、バックグラウンドで行っている作業のためのサービスをしなければならないServices

+0

私はonResumeで+1を呼び出し、onPauseで-1を呼び出したとしましょう。つまり、最初のonPauseが2番目のonResumeの前に呼び出されているため、refカウントは0になりませんか?おそらく、アプリケーションとアクティビティを組み合わせた既知のデザインパターンがあると思いましたか?また、サービスはどのように役立つでしょうか?私はまだアプリケーションがフォアグラウンドであるかどうかを知りたいです... –

+0

この解決策は近いですが、動作しません:アクティビティAがアクティビティBを開始し、BをクリックしてBをクリックすると同じように見えます:それはAのonResumeを最初に呼び出すことなくBのonPauseを呼び出します。 –

+0

もう1つの問題:アクティビティAがアクティビティBを開始します.Cが開始します.AはonResumeで+1を行い、次にstartActivityの前にB(+2) onPauseで1。 Cの場合と同じですが、今度はrefCountで+ 1のフォアグラウンドでCになっています。ユーザーがクリックすると、refCountの0でBに戻ります –

1

別のオプションは、サービスを使用することです。

[ホーム]ボタンまたは[戻る]ボタンをクリックしたときに停止するには、それらのリスナーを作成し、いずれかを押したときにサービスを停止します。

+0

ホームを聞くことはできません http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_HOME – dten

関連する問題