如何在另一个线程中同步运行一个函数,这意味着主UI线程有一个函数调用另一个在另一个线程上工作的函数,等待新线程完成并返回值:
int mainFunction() //this function is on the main UI thread
{
return doWorkOnNewThread();
}
int doWorkOnNewThread()
{
//do work on new thread
}
答案 0 :(得分:2)
您可以使用Async任务,即使它是异步的。您可以使用回调onPostExecute和onProgressUpdate根据需要更新值。我还应该注意到你可能不希望这样做同步,因为它会阻止你的UI线程,这可能会导致应用程序没有响应警报,具体取决于计算所需的时间。
答案 1 :(得分:0)
在单独的线程中执行代码的方法很少。 您可以阅读有关此here
的信息我认为AsyncTask会做你想做的事。
protected void onPreExecute () {
// you can show some ProgressDialog indicating to the user that thread is working
}
protected Type doInBackground(String... args) {
doWorkOnNewThread()
// do your stuff here
}
protected void onPostExecute(Type result) {
// here you can notify your activity that thread finished his job and dismiss ProgressDialog
}
答案 2 :(得分:0)
你有两种方式: 1.Asyntask 2.处理程序
答案 3 :(得分:0)
public static <T> T runSynchronouslyOnBackgroundThread(final Callable<T> callable) {
T result = new Thread() {
T callResult;
@Override
public void run() {
try {
callResult = callable.call();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
T startJoinForResult() {
start();
try {
join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return callResult;
}
}.startJoinForResult();
return result;
}