我的 android 应用程序连接到我的网站以检索和上传信息,因此我使用 AsyncTask 线程。
在一个实例中,我需要我的线程向我的主线程返回一个真值或假值。
有没有办法从 AsyncTask 执行函数中获取这个返回值?
当我执行以下操作时:
Toast.makeText(Locate.this, "Testing : "+locationUpdate.execute(location), Toast.LENGTH_LONG).show();
我只是得到了很多胡言乱语。
我认为我需要一种暂停主线程直到第二个线程完成的方法。第二个线程调用主线程中的一个函数来设置我的返回值。 所以当第二个线程完成时,主线程可以取消暂停并访问第二个线程设置的返回值 如果这个逻辑是合理的,请提供建议...谢谢!
最佳答案
您可以使用 AsyncTask get()方法。如果需要,它会等待计算完成,然后检索其结果:
Toast.makeText(Locate.this, "Testing : " + locationUpdate.execute(location).get(), Toast.LENGTH_LONG).show();
但请务必不要长时间阻塞主线程,因为这会导致 UI 无响应和 ANR .
更新
我错过了关于异步 web 下载/上传的问题。 Web/网络操作应该被视为一个漫长的操作,因此“暂停 UI 线程并等待下载完成” 的方法总是错误的。使用通常的结果发布方法(例如:AsyncTask.onPostExecute
、Service + sendBroadcast、Volley、RoboSpice、DataDroid 等库)。
关于android - AsyncTask 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5457493/