我需要编写静态方法来显示ProgressDialog,在线程中运行worker,并且worker完成后ProgreesDialog必须取消并且我的方法返回worker所做的操作。这是我的代码:
public static TOut execute(final Context c, final String title, final String message, final IProgressWorker worker, final TIn param) { final ValueHolder result = new ValueHolder(); final ProgressDialog progress=new ProgressDialog(c,R.layout.progress_impl_layout); Thread main = new Thread(new Runnable(){ @Override public void run() { Looper.prepare();//creating new Looper to show progressDialog immediately final Looper looper=Looper.myLooper(); AsyncTask async = new AsyncTask(){ @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); isDone=true; looper.quit();//quit Looper.loop progress.dismiss(); } @Override protected void onPreExecute() { super.onPreExecute(); progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progress.setTitle(title); progress.setMessage(message); progress.show(); } @Override protected Boolean doInBackground(Integer... params) { IProgressImpl progressImpl=new MyProgressImpl(progress); worker.execute(progressImpl, param); return true; } }; async.execute(0); if(!isDone){ Looper.loop();//show progressDialog immediately } } }); main.start(); try { main.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result.value; }
一切正常,但ProgressDialog不会取消。我怀疑looper.quit()做了什么坏事,但我需要停止looper.loop()。我调用loop(),因为我需要立即显示ProgressDialog。
首先,存储在main
变量中的线程不是主(也称为UI)线程。
对于runonuithread()
,您可以在UI线程上创建一个处理程序,post(Runnable r)
和postdelayed(Runnable r,long delaymilis)
将替换runonuithread()
。[或者,您的函数已经有一个上下文参数;您可以要求它是一个activity。]
还要注意,在Android2中,在UI线程以外的线程上初始化AsyncTask类会导致错误。
最后,如果您正在使用AsyncTask,为什么需要一个单独的线程?或者,如果您已经有一个辅助线程,为什么要使用AsyncTask?你绝对不需要这两个。
我建议您不要在AsyncTask
中使用looper
,而是使用activity.runonuithread()更新ProgressDialog
方法的UI,如show()
和dismiss()
。
示例:
runOnUiThread(new Runnable() {
@Override
public void run() {
progress.dismiss();
}
});
如果您的上下文C
是activity
上下文,则可以使用它访问RunonUithRead()
:
c.runOnUiThread()...
您可能必须通过各种方法使activity
可用于处理类,例如将其传递到execute()
方法或使用Androidapplication
实例。
否则,您可以使用常规的context
,但必须在线程或任务中执行上面相同的runnable
。
我的makefile中的一个目标是一个非常耗时的CPU任务。但是我可以分割工作负载并并行运行任务几次,以加快整个过程。 我的问题是make不会等待所有过程完成。 考虑一下这个简单的脚本,名为“代码> MyTask.SH <代码>: 现在,让我们从bash脚本调用它,并使用等待所有任务完成: 产出如预期: 但是在Makefile中尝试相同的方法时: 它不起作用: 当然,我可以创建多个目标,这些目标可
我试图定期: 从ajax调用获取数据 将数据与div的内容进行比较 如果是数据!=div的内容:隐藏div、更改数据、显示div 这是我的密码: 问题在于,在div被完全隐藏之前,div内容被新数据替换,即使回调函数replace()被提供给hide()函数。 如何让hid()函数等待它的完成(在这个例子中是400毫秒),然后再调用替换()函数? 我还尝试了delay()和setTimeout()
本文向大家介绍python Popen 获取输出,等待运行完成示例,包括了python Popen 获取输出,等待运行完成示例的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,直接上代码吧! 以上这篇python Popen 获取输出,等待运行完成示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
如果一个worker奔溃,所有分配给它的未完成的任务必须被重新分配。第一个要求就是给master能够检测worker奔溃的能力。master必须能够检测到何时一个worker奔溃了,同时也能确定哪些worker能够执行它的任务。当一个worker奔溃时,它可能最终部分的执行了任务,或者完全执行完了任务但是还未来得及上报结果。如果计算还有副作用的话,为了清理状态某些恢复步骤可能就很有必要了。
问题内容: 我想编写一个后台作业(EJB 3.1),该作业每分钟执行一次。为此,我使用以下注释: 工作正常。 但是,有时该工作可能需要一分钟以上。在这种情况下,计时器仍会触发,从而导致线程问题。 如果当前执行未完成,是否可以终止调度程序? 问题答案: 如果可能只有一个计时器同时处于活动状态,则有两种解决方案。 首先,应该在。在Singleton中,方法默认情况下是写锁定的,因此,当容器中仍有活动时
JavaScript旨在在单线程环境中运行,这意味着多个脚本无法同时运行。 考虑一种情况,您需要处理UI事件,查询和处理大量API数据以及操作DOM。