をService
登録していますContentObserver
。変更を検出すると、ContentObserver
Service のboolean
変数を true に設定します。私はまたThread
、しばらくの間スリープし、ウェイクアップしてその変数をチェックするサービスを実行しています。
ProgressDialog
変更を検出すると、他のコードを処理するのに時間がかかるため、遅延中に表示する必要があります。これどうやってするの?
をService
登録していますContentObserver
。変更を検出すると、ContentObserver
Service のboolean
変数を true に設定します。私はまたThread
、しばらくの間スリープし、ウェイクアップしてその変数をチェックするサービスを実行しています。
ProgressDialog
変更を検出すると、他のコードを処理するのに時間がかかるため、遅延中に表示する必要があります。これどうやってするの?
あなたの質問の本質は、あなたのサービスがあなたの UI に何らかのメッセージを送信することです (読み込みダイアログを表示するため)。
これには 4 つ (またはそれ以上) の方法があります。
これらのオプションは見覚えがあるかもしれません: Android サービスがアクティビティと通信する方法
これらのオプションを読んで、選択する必要があります。
AsyncTask
代わりに使用する必要があります。
ライブラリへのリンクはこちらです。それはかなり簡単です:
1) onPreExecute()
= 表示ProgressDialog
2) doInBackground()
= コードを実行する
3) onPostExecute()
= 却下ProgressDialog
終わり :-)
AsyncTask は良い代替手段ですが、スレッドを使用することにした場合でも、UI に ProgressDialog を表示するにrunOnUiThread()
は、アクティビティのメソッドを呼び出す必要があります。
Inside your Thread from Serviceに ProgressDialog を表示したい場合は、次のMainActivity.
ようにする必要があります。
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
// Display ProgressDialog here
}
});
回答ありがとうございます。これらの手順を使用して問題を解決します-変数が変更されたときにインテントをブロードキャストします-インテント用の BroadcastReceiver を作成します(アクティビティ内)-BroadcastReceiver のメソッド onReceive 内で、アクティビティの runOnUiThread を呼び出します