效果描述:

点击按钮后,按钮切换为不可点击状态,6个任务依次执行(线程池实现),待6个任务全部执行完成之后,按钮状态切换可用,可在此执行前述操作。

 

public class UpgradeUI implements Runnable {    // 调用任务进度    protected void onProgress(int value){    }    // 任务结束调用    protected void onFinish(Object ... args){    }    @Override    public void run() {        int i=0;        while(i<100){            i++;            try {                // 模拟任务耗时                Thread.sleep(20);            } catch (InterruptedException e) {                e.printStackTrace();            }            // 通知任务进度            onProgress(i);        }        // 通知任务结束        onFinish();    }}
public class TestSubThreadActivity extends AppCompatActivity {    private static final String TAG = "TestSubThreadActivity";    private EditText editText;    private ProgressBar progressBar;    private LinearLayout lp;    int index = 0;    static CountDownLatch countDownLatch = new CountDownLatch(6);    // 使用handler更新UI    Handler handler = new Handler() {        @Override        public void handleMessage(@NonNull Message msg) {            progressBar.setProgress(msg.arg1);        }    };    // handler message    UpgradeUI upgradeUI = new UpgradeUI() {        @Override        protected void onFinish(Object... args) {            countDownLatch.countDown();        }        @Override        protected void onProgress(int value) {            Message message = new Message();            message.arg1 = value;            handler.sendMessage(message);        }    };    // 使用runOnUiThread    UpgradeUI upgradeUI1 = new UpgradeUI() {        @Override        protected void onFinish(Object... args) {            countDownLatch.countDown();        }        @Override        protected void onProgress(int value) {            runOnUiThread(new Runnable() {                @Override                public void run() {                    progressBar.setProgress(value);                    editText.setText("使用runOnUiThread");                }            });        }    };    // 使用rhandler.post    UpgradeUI upgradeUI2 = new UpgradeUI() {        @Override        protected void onProgress(int value) {            handler.post(new Runnable() {                @Override                public void run() {                    progressBar.setProgress(value);                    editText.setText("使用rhandler.post");                }            });        }        @Override        protected void onFinish(Object... args) {            countDownLatch.countDown();        }    };    // 使用handler postDelay延时1s更新    UpgradeUI upgradeUI3 = new UpgradeUI() {        @Override        protected void onFinish(Object... args) {            countDownLatch.countDown();        }        @Override        protected void onProgress(int value) {            handler.postDelayed(new Runnable() {                @Override                public void run() {                    progressBar.setProgress(value);                    editText.setText("使用handler postDelay延时1s更新");                }            }, 1000);        }    };    // 通过view.post    UpgradeUI upgradeUI4 = new UpgradeUI() {        @Override        protected void onFinish(Object... args) {            countDownLatch.countDown();        }        @Override        protected void onProgress(int value) {            progressBar.post(new Runnable() {                @Override                public void run() {                    progressBar.setProgress(value);                    editText.setText("通过view.post");                }            });        }    };    // by syncTask    UpgradeUI upgradeUI5 = new UpgradeUI() {        @Override        protected void onFinish(Object... args) {            countDownLatch.countDown();        }        @Override        protected void onProgress(int value) {            AsyncTask asyncTask = new AsyncTask() {                @Override                protected Object doInBackground(Object[] objects) {                    return null;                }                @Override                protected void onPostExecute(Object o) {                    progressBar.setProgress(value);                    editText.setText("by syncTask");                    super.onPostExecute(o);                }            }.executeOnExecutor(executor);        }    };    // 线程池,每次执行一个线程,可设置    Executor executor = Executors.newSingleThreadExecutor();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_test_sub_thread);        Toolbar toolbar = findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        editText = findViewById(R.id.editText);        progressBar = findViewById(R.id.progressBar);        lp = findViewById(R.id.lp);//        progressBar.animate().start();        FloatingActionButton fab = findViewById(R.id.fab);        fab.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)                        .setAction("Action", null).show();            }        });    }    public void confirm(View view) {        // 设置按钮不可点击        view.setClickable(false);        editText.setText("handle message!");        executor.execute(upgradeUI);        executor.execute(upgradeUI1);        executor.execute(upgradeUI2);        executor.execute(upgradeUI3);        executor.execute(upgradeUI4);        executor.execute(upgradeUI5);        // 所有的更新UI线程执行结束,按钮恢复点击        new AsyncTask(){            @Override            protected Object doInBackground(Object... objects) {                try {                    countDownLatch.await();                } catch (InterruptedException e) {                    e.printStackTrace();                }                return null;            }            @Override            protected void onPostExecute(Object o) {                super.onPostExecute(o);                view.setClickable(true);            }        }.execute();    }}

 

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. android之ThreadLocal详解
  3. 自定义datePicker的实现
  4. 【干货】快速理解Android(安卓)中的 Handler机制
  5. Android(安卓)单选按钮RadioButton的使用
  6. EventThread线程对VSync的接收
  7. Android环境搭建_
  8. 使用Handler在子线程中更新UI
  9. Android(安卓)动态添加按钮,并获取id,添加事件

随机推荐

  1. Android编译系统入门(二)
  2. android shape用法(xml文件)
  3. 从零开始学android开发-adt-bundle-eclip
  4. android材料设计语言
  5. android 调用js中的方法
  6. Android 应用启动闪白一下处理方法
  7. 2011.07.06——— android 安装apiDemos
  8. Android Talker(1)MAC Environment
  9. Android获取OAID设备标识
  10. Android 获取imei号码,获取手机型号和系统