Android学习之异步任务AsyncTask
2016-02-29 15:58
561 查看
Android中有几种实现异步任务的方式,比如Handler,比如AsyncTask,Handler比较复杂,今天就不写了,相信不少童鞋都使用过AsyncTask,当然也有不少童鞋还不知道怎么用AsyncTask,今天就写下AsyncTask。AsyncTask和Handler有一些区别,简单来说就是单个异步任务时使用AsyncTask比较简单,多个异步任务时使用Handler比较方便。
AsyncTask有几个重要的是方法,来讲下常用的几个方法,以下是Demo:
第一个参数用在doInBackground()中,这个参数的值由execute()传入。
第二个参数用在onProgressUpdate()中,这个参数的值由doInBackground()中的publishProgress()传入。
第三个参数用在onPostExecute()中,这个参数的值由doInBackground()返回的值传入。
doInBackground()中不能执行UI相关的操作,不能在主线程执行,这些操作用在onProgressUpdate()、onPreExecute()和onPostExecute()中,doInBackground()是AsyncTask用来执行异步任务的核心,这里面可以做一些耗时的操作。
onPreExecute()用在异步任务执行前,onPostExecute()用在异步任务执行后,onProgressUpdate()用在异步任务执行时。
好,大概就是这样,最后是效果图:
AsyncTask有几个重要的是方法,来讲下常用的几个方法,以下是Demo:
/** * 主界面 * * @author yuzhentao */ public class MainActivity extends Activity { private FrameLayout fl; private ProgressBar pb; private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(); initView(); } private void setContentView() { setContentView(R.layout.activity_main); } private void initView() { fl = (FrameLayout) findViewById(R.id.framelayout_activity_main); pb = (ProgressBar) findViewById(R.id.progressBar_activity_main); tv = (TextView) findViewById(R.id.textview_activity_main); findViewById(R.id.button_activity_main).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new AsyncTask<Integer, Integer, String>() { @Override protected void onPreExecute() { super.onPreExecute(); fl.setVisibility(View.VISIBLE); tv.setText("0%"); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); fl.setVisibility(View.INVISIBLE); Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show(); } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); String progress = values[0] + "%"; pb.setProgress(values[0]); tv.setText(progress); } @Override protected String doInBackground(Integer... params) { int i; for (i = 0; i <= 100; i += 10) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } publishProgress(i); } return "异步任务执行完成"; } }.execute(); } }); } }
AsyncTask有3个参数
AsyncTask<Params, Progress, Result>
第一个参数用在doInBackground()中,这个参数的值由execute()传入。
第二个参数用在onProgressUpdate()中,这个参数的值由doInBackground()中的publishProgress()传入。
第三个参数用在onPostExecute()中,这个参数的值由doInBackground()返回的值传入。
doInBackground()中不能执行UI相关的操作,不能在主线程执行,这些操作用在onProgressUpdate()、onPreExecute()和onPostExecute()中,doInBackground()是AsyncTask用来执行异步任务的核心,这里面可以做一些耗时的操作。
onPreExecute()用在异步任务执行前,onPostExecute()用在异步任务执行后,onProgressUpdate()用在异步任务执行时。
好,大概就是这样,最后是效果图:
相关文章推荐
- 【android开发】手写签名系统的设计与实现
- Calendar和Date-Android Day09
- Android 使用代码进入Recovery模式自动升级指定固件包
- android studio快捷键
- Android组件——使用DrawerLayout仿网易新闻v4.4侧滑菜单
- android 调用系统相册和系统拍照功能的Demo
- 以一个着色游戏展开讲解Android中区域图像填色的方法
- Android APK反编译就这么简单 详解(附图)
- Android studio下如何使用断点调试功能
- android动态换肤系列2——android.view.LayoutInflater.Factory的使用
- Android 广播机制 详解
- Android事件分发机制完全解析,带你从源码的角度彻底理解dispatchTouchEvent,onInterceptTouchEvent
- android 一键锁屏实现
- android Services
- android电池充电以及电量检测驱动分析
- Android控件— — —ImageView
- 隐藏android中EditText的下划线
- 详解Android中App的启动界面Splash的编写方法
- Android 使用百度鹰眼实现运动轨迹功能
- android camera2 API流程分析