sis*_*sko 28 android return-value android-asynctask
我的Android应用程序连接到我的网站以检索和上传信息,因此我使用AsyncTask线程.
在一个实例中,我需要我的线程将true或false值返回给我的主线程.
有没有办法从AsyncTask执行函数获取此返回值?
当我执行以下操作时:
Toast.makeText(Locate.this, "Testing : "+locationUpdate.execute(location), Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)
我只是得到了很多胡言乱语.
我认为我需要的是暂停主线程直到第二个线程完成的方法.第二个线程调用主线程中的函数来设置我的返回值.所以当第二个线程完成时,主线程可以取消暂停并访问第二个线程设置的返回值. 如果这个逻辑是合理的,请提供建议......谢谢!
Ido*_*lon 40
您可以使用AsyncTask get()方法.它等待计算完成所需,然后检索其结果:
Toast.makeText(Locate.this, "Testing : " + locationUpdate.execute(location).get(), Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)
但请确保不要长时间阻止主线程,因为这会导致UI和ANR无响应.
更新
我错过了关于异步网络下载/上传的问题.Web /网络操作应该被认为是一个很长的过程,因此"暂停UI线程并等到下载完成"的方法总是错误的.使用通常的结果发布方法(例如:AsyncTask.onPostExecuteService,sendBroadcast,Volley,RoboSpice,DataDroid等库).
onPostExcecute()处理程序是在方法中执行此操作的最佳方法,只需执行即可
@Override
protected void onPostExecute(Boolean bool) {
super.onPostExecute(bool);
Message msg=new Message();
msg.obj=bool;
mHandler.sendMessage(msg);
}
}
Run Code Online (Sandbox Code Playgroud)
你的消息处理程序将是
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
bool i=(String)msg.obj;
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54951 次 |
| 最近记录: |