温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

异步加载AsyncTask小谈+实例

发布时间:2020-07-27 17:53:06 来源:网络 阅读:277 作者:JustMetU 栏目:移动开发

AsyncTask是Android解决异步加载的一种方案,它比Handler和Message的方式更加轻量级。



一般的使用步骤:

  1. 自定义一个继承AsyncTask的类。自定义时可以传入AsyncTask的3个泛型参数,即Params,Progress和Result。Params是需要传入的参数,Progress是进程执行的百分比,Result是最终返回的结果。

  2. 实现从AsyncTask继承下来的方法。

  主要有onPreExecute()、doInBackground(Params...)、onProgressUpdate(Progress...)和onPostExecute(Result)四种方法。

  其中,

    onPreExecute():执行实际后台操作之前被调用。

    doInBackground(Params...):紧跟onPreExecute()之后进行的实际后台操作,一般进行比较耗时                      的操作,更新实时任务进度,可以调用publishProgress()。

    onProgressUpdate(Progress...):运行与UI线程,可更新实时进度。

    onPostExecute(Result):运行于UI线程,其参数就是doInBackground()的返回值。

3.在主线程中创建AsyncTask对象,并调用execute()方法。



具体示例来展示AsyncTask异步加载:



MainActivity代码:

public class MainActivity extends Activity {


private TextView textview;

private Button button;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textview=(TextView)findViewById(R.id.text);

button=(Button)findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {

public void onClick(View arg0) {

// TODO Auto-generated method stub

LoadTask task=new LoadTask();

task.execute();

}

});

}

private class LoadTask extends AsyncTask<Void,Integer,String>{


private ProgressDialog progressdialog;

protected String doInBackground(Void... params) {

// TODO Auto-generated method stub

int sum=1;

while(sum<=10){

try {

Thread.sleep(1000);

publishProgress(sum);

sum++;

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return "加载完成。";

}

//紧跟onPreExecute()之后紧跟的操作,进行耗时操作,利用publishprogress()更新。


@Override

protected void onPreExecute() {

// TODO Auto-generated method stub

progressdialog=progressdialog.show(MainActivity.this, "AsyncTask Demo", "载入中...",true);

}

        //在doinbackground之前调用,创建一个对话框。

protected void onProgressUpdate(Integer...values){

textview.setText(values[0]*10+"%");

}

//运行于ui线程,更新实时进度。

protected void onPostExecute(String result){

progressdialog.dismiss();

textview.setText(result);

}

//运行于ui线程,返回值就是doInBackground()的返回值。

}

}


xml代码:



 <TextView

        android:id="@+id/text"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="--" />


    <Button

        android:id="@+id/button"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_below="@+id/text"

        android:layout_marginTop="24dp"

        android:text="开始载入" />





点击按钮,即可实现异步加载。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI