当前位置:   article > 正文

android异步任务及接口回调传输数据_android 异步任务同步返回

android 异步任务同步返回

//在安卓种,由于主界面(主线程)不可以进行耗时操作(网络下载,解析...),所以在进行耗时操作的时候,我们必须要另外开辟子线程去进行那些耗时操作,这样才不会妨碍主线程正常使用其UI

//1.首先自定义一个类继承AsyncTask,异步任务其精髓可以说是三个泛型四个方法。

 <1>三个泛型,第一个泛型指的是通过execute()传入的参数(通常是以网址为内容的String),第二个参数是进度(即中间要更新数据的类型,返回到onProgressUpdate()的参数中),第三个参数是结果(即返回到onPostExecute()的参数)。

<2>四个方法:第一个方法:onPreExecute()=====》这个方法是在异步任务开始之前会回调,所以需要在任务开始之前就准备好的东西可以写在这个方法里面,如进度条等。

   第二个方法:doInBackground()=====》此方法是异步任务在进行中调用(除了此方法在子线程中运行,其余三个方法都是在主线程中运行),所有的耗时任务都在这个方法中进行,返回的参数会到onpost中的参数去

   第三个方法:onProgressUpdate=====》此方法会任务下载如果需要更新数据时会被调用。

           第三个方法:onPostExecute=====》此方法会在异步任务完成后调用,通常用于回调数据或者给主线程设置UI。

//接口回调可看成简单的自定义监听器(这里以异步任务接口回调为例子),可在需要传数据的类中创建一个内部接口(interface OnclickLinstener),在其中构建抽象方法,把需要传哪些参数都先给其方法定义好形参(public void Onclick(XXX,XXX,XXX);),创建一个以这个接口为参数的的方法(public void SetOnclickListener(OnclickLinstener  listener){ this.listener = linstener},此方法的作用在于让传进来的监听器全局化,以达到给OnPost调用的目的),在onPost方法中调用(listener.Onclick(result))把下载完的数据作为实参传给Onclick方法,外部方法通过异步任务对象的SetOnclickListener()以多肽的方式new 一个匿名内部类便可得到方法传回来的参数。

示例代码:

Main:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

MyAsyncTask myAsyncTask = new MyAsyncTask();//下载并解析内容,开启异步任务
myAsyncTask.SetOnTaskListener(new MyAsyncTask.OnTaskListener(){

@Override
public void Onclick(String str) {
//这里传回来的参数,即为接口回调的传来的需要的参数; (str即为回传参数)

}

}

MyAsyncTask:

public class MyAsyncTask extends AsyncTask<String, Void, String> {

private OnTaskListener listener;


public interface OnClickListener{
void OnClickListener(String str);
}

public void SetOnClickListener(OnClickListener listener){
this.listener = listener;
}


@Override
protected String doInBackground(String... params) {
return " ";
}
@Override
protected void onPostExecute(List<Joke> result) {
if (result != null) {

listener.Onclick(result);
}
}

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/265061
推荐阅读
相关标签
  

闽ICP备14008679号