Man*_*Jan 7 android android-asynctask
我正在开发一个Android应用程序,它需要使用AsyncTask进行网络连接.我从主线程调用它.因此doInBackground方法运行,然后返回onPostExecute方法.执行onPostExecute方法后,我想返回一个值回从那里它被称为活动,因为我要在那个特定的活动有一定的操作需要从onPostExecute方法的返回值.我该如何解决这个问题?如何从onPostExecute返回值?
提前致谢
正如其名称所述,AsyncTask与UI线程异步运行,当doInBackground完成时,onPostExecute方法将在未来的某个时刻被调用.我们不关心何时调用onPostExecute方法(实际上没有办法在项目构建时告诉),我们唯一关心的是onPostExecute方法,保证在未来的某个时候被底层框架正确调用.因此onPostExecute方法的目的是处理从工作线程返回的结果,这也是为什么onPostExecute方法的唯一参数是从doInBackground方法返回的结果.
我必须在该特定活动中进行一些操作,这需要从onPostExecute方法返回的值.我该如何解决这个问题?
当然,您可以在Activity类中创建一些实例变量(或使用listerner模式),并在onPostExecute方法中返回并准备好结果.问题是你永远不知道在项目构建时在onPostExecute方法之外何时准备好这个结果,因为它实际上是在app运行时确定的.除非你编写一些持续轮询结果的等待机制,否则会牺牲AsyncTask的好处,例如,内置的API AsyncTask.get()使AsyncTask与UI线程同步运行并将结果返回给Activity.
最佳做法是更改设计并将操作代码移动到onPostExecute方法,该操作代码需要从AsyncTask返回的结果.希望这可以帮助.
你可以使用getter和setter来获取价值 AsyncTask
public class MainActivity extends Activity {
public String retunnumfromAsyncTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layouttest);
new Asyntask(this).execute();
}
public class Asyntask extends AsyncTask<Void, Void, String> {
private final Context Asyntaskcontext;
public Asyntask(Context context){
Asyntaskcontext = context;
}
@Override
protected void onPostExecute(String result) {
MainActivity mainactivity = (MainActivity) Asyntaskcontext;
mainactivity.retunnumfromAsyncTask = result;
super.onPostExecute(result);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15231 次 |
| 最近记录: |