在我们开发中,我们常常会使用多线程来实现很多需求功能,譬如,在网络中访问数据,然后在界面中展示响应数据,在APP首页实现个轮播效果的viewpager,亦或是实现一个定时器的效果,定时的刷新我们的界面。。。今天我们这里稍作整理下,把能实现上述效果的可行方案归纳起来,总结如下四种方式:
方式一: AsyncTask
谷歌提供的异步工具,刷新UI神器,也是我们最常用的方式之一,很多网络请求框架也是基于它的,使用起来也很简单,贴一下代码
其中的doInbackground()方法是在子线程中调用,我们这里定义一个整形progress 然后用publishProgress()发消息给主线程,完成我们的的UI刷新,最后让线程休眠一秒钟,实现定时器的功能
private MyAsyncTask task = null;
private boolean running = true;
public class MyAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
while (running) {
try {
// 处理耗时操作。我们这边线程休眠1秒实现秒表的效果
progress++;
publishProgress();//类似于发消息给主线程,更新UI
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgre