-1

Service登録していますContentObserver。変更を検出すると、ContentObserverService のboolean変数を true に設定します。私はまたThread、しばらくの間スリープし、ウェイクアップしてその変数をチェックするサービスを実行しています。

ProgressDialog変更を検出すると、他のコードを処理するのに時間がかかるため、遅延中に表示する必要があります。これどうやってするの?

4

5 に答える 5

2

あなたの質問の本質は、あなたのサービスがあなたの UI に何らかのメッセージを送信することです (読み込みダイアログを表示するため)。

これには 4 つ (またはそれ以上) の方法があります。

  • インテント: サービスにインテントをアクティビティに送信させます
  • AIDL
  • サービス オブジェクト自体を使用する (シングルトンとして)
  • アクティビティをブロードキャスト レシーバーにする

これらのオプションは見覚えがあるかもしれません: Android サービスがアクティビティと通信する方法

これらのオプションを読んで、選択する必要があります。

于 2012-08-03T14:33:37.340 に答える
2

AsyncTask代わりに使用する必要があります。

ライブラリへのリンクはこちらです。それはかなり簡単です:

1) onPreExecute()= 表示ProgressDialog

2) doInBackground()= コードを実行する

3) onPostExecute()= 却下ProgressDialog

終わり :-)

于 2012-08-03T14:26:11.193 に答える
1

AsyncTask は良い代替手段ですが、スレッドを使用することにした場合でも、UI に ProgressDialog を表示するにrunOnUiThread()は、アクティビティのメソッドを呼び出す必要があります。

Inside your Thread from Serviceに ProgressDialog を表示したい場合は、次のMainActivity.ようにする必要があります。

MainActivity.this.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        // Display ProgressDialog here
    }
});
于 2012-08-03T14:31:51.873 に答える
1

回答ありがとうございます。これらの手順を使用して問題を解決します-変数が変更されたときにインテントをブロードキャストします-インテント用の BroadcastReceiver を作成します(アクティビティ内)-BroadcastReceiver のメソッド onReceive 内で、アクティビティの runOnUiThread を呼び出します

于 2012-08-06T15:11:21.180 に答える