Execute()和executeOnExecuter()有何区别

一、两个方法的区别:

1、执行execute()方法线程可以只能串行运行

2、执行executeOnExecuter()方法线程并行运行,不过同一时间只能启动五个线程

二、我做了一个小小的实例,表现他们的区别

1、创建四个progressbar和四个按钮,注意绑定id

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.myapplication.ProgressBarActivity">

    <ProgressBar
        android:id="@+id/progress_bar1"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <ProgressBar
        android:id="@+id/progress_bar2"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/download_btn1"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="下载一" />

    <Button
        android:id="@+id/download_btn2"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="下载二" />

    <ProgressBar
        android:id="@+id/progress_bar3"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <ProgressBar
        android:id="@+id/progress_bar4"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/download_btn3"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="下载三" />

    <Button
        android:id="@+id/download_btn4"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="下载四" />


</LinearLayout>

2、对布局中的控件进行创建,绑定id,监听,使用AsyncTask实现异步消息的传递前两个进度条使用execute()方法启动,后两个进度条使用executeOnexecuter()方法启动

//对布局中的控件进行创建,绑定id,监听,使用AsyncTask实现异步消息的传递
//前两个进度条使用execute()方法启动,后两个进度条使用executeOnexecuter()方法启动
public class ProgressBarActivity extends AppCompatActivity implements View.OnClickListener {

    //定义控件
    private ProgressBar bar1;
    private ProgressBar bar2;
    private ProgressBar bar3;
    private ProgressBar bar4;

    private Button btn1;
    private Button btn2;
    private Button btn3;
    private Button btn4;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_progress_bar);

        //绑定ID
        bangID();
    }

    private void bangID() {
        bar1 = findViewById(R.id.progress_bar1);
        bar2 = findViewById(R.id.progress_bar2);
        bar3 = findViewById(R.id.progress_bar3);
        bar4 = findViewById(R.id.progress_bar4);

        bar1.setMax(10);
        bar2.setMax(10);
        bar3.setMax(10);
        bar4.setMax(10);

        btn1 = findViewById(R.id.download_btn1);
        btn2 = findViewById(R.id.download_btn2);
        btn3 = findViewById(R.id.download_btn3);
        btn4 = findViewById(R.id.download_btn4);

        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btn4.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.download_btn1:
                //使用execute()方法启动子线程
                new MyasyncTask().execute(1);
                break;
            case R.id.download_btn2:
                new MyasyncTask().execute(2);
                break;
            case R.id.download_btn3:
                //使用executeOnexecuter()方法启动子线程
                new MyasyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,3);
                break;
            case R.id.download_btn4:
                new MyasyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,4);
                break;
            default:
                break;

        }
    }

    class MyasyncTask extends AsyncTask<Integer, Integer, Integer> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Integer doInBackground(Integer... integers) {
            for (int i = 0; i <= 10; i++) {
                switch (integers[0]) {
                    case 1:
                        bar1.setProgress(i);
                        break;
                    case 2:
                        bar2.setProgress(i);
                        break;
                    case 3:
                        bar3.setProgress(i);
                        break;
                    case 4:
                        bar4.setProgress(i);
                        break;
                    default:
                        break;
                }
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return integers[0];
        }

        @Override
        protected void onPostExecute(Integer integer) {
            super.onPostExecute(integer);
            switch (integer){
                case 1:
                    btn1.setText("一下载完成");
                    break;
                case 2:
                    btn2.setText("二下载完成");
                    break;
                case 3:
                    btn3.setText("三下载完成");
                    break;
                case 4:
                    btn4.setText("四下载完成");
                    break;
                default:
                    break;

            }
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
        }
    }
}

效果展现:

1)可以看到使用execute()方法启动的进度条一个结束后才能启动另一个进度条

2)使用executeOnexecuter()启动的进度条同时下载

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

intoSunshine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值