我有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