我有Service
與註冊ContentObserver
。當我的ContentObserver
檢測到更改時,它將Service的boolean
變量設置爲true。我也有一個Thread
運行在睡覺一段時間的服務,並醒來檢查該變量。從服務中的線程顯示ProgressDialog
當它檢測到變化時,它需要一些時間來處理其他代碼,我需要在延遲期間顯示ProgressDialog
。我怎樣才能做到這一點?
我有Service
與註冊ContentObserver
。當我的ContentObserver
檢測到更改時,它將Service的boolean
變量設置爲true。我也有一個Thread
運行在睡覺一段時間的服務,並醒來檢查該變量。從服務中的線程顯示ProgressDialog
當它檢測到變化時,它需要一些時間來處理其他代碼,我需要在延遲期間顯示ProgressDialog
。我怎樣才能做到這一點?
您應該使用AsyncTask
代替。
Here是鏈接到圖書館。這是相當簡單:
1)onPreExecute()
=顯示ProgressDialog
2)doInBackground()
=執行代碼
3)onPostExecute()
=駁回ProgressDialog
DONE :-)
的AsyncTask是一個很好的選擇,但如果你決定使用線程,那麼爲了在UI上顯示ProgressDialog,你需要調用runOnUiThread()
活動的方法。
讓假設你想在MainActivity.
顯示ProgressDialog裏面的線程服務,你應該有這樣的事情:
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
// Display ProgressDialog here
}
});
但OP正在嘗試從服務中完成此操作,因此MainActivity.this無法正常工作,對吧? – 2013-10-08 17:23:56
你的問題的本質是,你希望你的服務發送的消息某種類型的你的用戶界面(顯示一個加載對話框)。
有四個(或更多)方法中會對此:
這些選項可能看起來熟悉:How to have Android Service communicate with Activity
你必須閱讀這些選項並選擇。
謝謝大家的解答。 我解決了使用這些步驟 問題 - 廣播意向,當我的變量改爲 - 創建廣播接收器的意圖(在活動) - 廣播接收器的方法的onReceive呼籲runOnUiThread我的活動內
我知道這是一個古老的線程但我確切地知道你需要什麼,因爲我在這裏從一個線程實現了這個。請繼續閱讀Rachit米什拉的回答了網頁談論一個進度條:
Communication between Activity and Service
我有這個在我的服務:
public void sendMessage(int state) {
Message message = Message.obtain();
switch (state) {
case 1://SHOW:
message.arg1 = 1;
break;
case 0:
message.arg1 = 0;
break;
}
try {
messageHandler.send(message);
} catch (RemoteException e) {
e.printStackTrace();
}
}
呼叫的sendMessage()的1或0,以顯示或駁回ProgressDialog在您的服務中。
這是我的主要活動:
private ProgressDialog progress;
public class MessageHandler extends Handler {
@Override
public void handleMessage(Message message) {
int state = message.arg1;
switch (state) {
case 0://HIDE
progress.dismiss();
break;
case 1://SHOW
progress = ProgressDialog.show(MainActivity.this, (getResources().getString(R.string.CONNECTING) + "..."), (getResources().getString(R.string.PLEASE_WAIT) + "!")); //show a progress dialog
break;
}
}
}
的ProgressDialog不能從服務中顯示,它必須從活動或片段被調用。我希望我添加了所有你需要的代碼,並且能夠滿足你的需求。說實話,我不知道消息處理程序是如何工作的,但它適用於我!命名可能不是最好的要麼大聲笑。抱歉。
但是OP想要從一個服務中做到這一點,所以即使在一個AsyncTask中,他也沒有合適的Context來運行ProgressDialog,對嗎? – 2013-10-08 17:24:47