网友通过本文主要向大家介绍了android asynctask,android中asynctask,android.os.asynctask,asynctask优缺点,asynctask的缺点等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
再谈Android AsyncTask的优缺点,androidasynctask
导语:之前做习惯了Framework层的开发,今天在武汉斗鱼公司面试APP客户端的开发,其中一道题是讲述Asynctask的优缺点,我靠,我只是知道有这么一个东西,会用而已,看来之前的生活太过于安逸,这么基础的东西都不会,特意回家总结下。
转载请注明原文链接:http://www.cnblogs.com/yanyojun/p/6414919.html
1、Asynctask简介
1.1 使用方法简介
Asynctask作为Android的基础之一,怎么使用就不多讲解了,网上到处都是教程,建议查看Android官方API文档:https://developer.android.google.cn/reference/android/os/AsyncTask.html
这里只实现一个小Demo程序,供大家赏玩:
界面:
这个程序其实特别简单,就是两个按钮,点击分别用来测试AysncTask和Handler两种模式的实现,点击后会有相应的Log提示。
功能简介:
Asynctask的实现:
private class IAsyncTask extends AsyncTask<String, Integer, String> { protected String doInBackground(String... args1) { Log.i(TAG, "doInBackground in:" + args1[0]); int times = 10; for (int i = 0; i < times; i++) { publishProgress(i);//提交之后,会执行onProcessUpdate方法 } Log.i(TAG, "doInBackground out"); return "over"; } /** * 在调用cancel方法后会执行到这里 */ protected void onCancelled() { Log.i(TAG, "onCancelled"); } /** * 在doInbackground之后执行 */ protected void onPostExecute(String args3) { Log.i(TAG, "onPostExecute:" + args3); } /** * 在doInBackground之前执行 */ @Override protected void onPreExecute() { Log.i(TAG, "onPreExecute"); } /** * 特别赞一下这个多次参数的方法,特别方便 * @param args2 */ @Override protected void onProgressUpdate(Integer... args2) { Log.i(TAG, "onProgressUpdate:" + args2[0]); } }
点击第一个按钮后会执行这里,点击按钮的写法如下:
mBtnSyncTask.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new IAsyncTask().execute("yanlog test"); } });
执行结果的Log如下:
1 02-19 21:55:12.179 10824-11010/com.plbear.asynctasktest I/AsyncTaskTest: doInBackground in:yanlog test//doInbackground是在10824进程,11010线程中执行 2 02-19 21:55:12.179 10824-11010/com.plbear.asynctasktest I/AsyncTaskTest: doInBackground out 3 02-19 21:55:12.184 10824-10824/com.plbear.asynctasktest I/AsyncTaskTest: onProgressUpdate:0//剩下的都是在10824线程中执行,Android特别好的是,主线程的线程号跟进程号是一致的 4 02-19 21:55:12.184 10824-10824/com.plbear.asynctasktest I/AsyncTaskTest: onProgressUpdate:1 5 02-19 21:55:12.184 10824-10824/com.plbear.asynctasktest I/AsyncTaskTest: onProgressUpdate:2 6 02-19 21:55:12.184 10824-10824/com.plbear.asynctasktest I/AsyncTaskTest: onProgressUpdate:3 7 02-19 21:55:12.184 10824-10824/com.plbear.asynctasktest I/AsyncTaskTest: onProgressUpdate:4 8 02-19 21:55:12.184 10824-10824/com.plbear.asynctasktest I/AsyncTaskTest: onProgressUpdate:5 9 02-19 21:55:12.184 10824-10824/com.plbear.asynctasktest I/AsyncTaskTest: onProgressUpdate:6 10 02-19 21:55:12.184 10824-10824/com.plbear.asynctasktest I/AsyncTaskTest: onProgressUpdate:7 11 02-19 21:55:12.184 10824-10824/com.plbear.asynctasktest I/AsyncTaskTest: onProgressUpdate:8 12 02-19 21:55:12.184 10824-10824/com.plbear.asynctasktest I/AsyncTaskTest: onProgressUpdate:9 13 02-19 21:55:12.184 10824-10824/com.plbear.asynctasktest I/AsyncTaskTest: onPostExecute:over
Handler+Message实现:
主要代码如下:
1 private class IHandler extends Handler{ 2 @Override 3 public void handleMessage(Message msg){ 4 switch(msg.what){ 5 case 1: 6 Log.e(TAG,"handler:"+msg.obj); 7 break; 8 default: 9 break; 10 } 11 } 12 }
其中,调用地方如下:
1 mBtnHandlerTest.setOnClickListener(new View.OnClickListener() { 2 @Override 3 public void onClick(View v) { 4 final Handler handler = new IHandler(); 5 new Thread(new Runnable() { 6 @Override 7 public void run() { 8 for (int i = 0; i < 10; i++) { 9 Message msg = new Message(); 10 msg.what = 1; 11 msg.obj = new Integer(i); 12 Log.e(TAG, "post message:" + i); 13 handler.sendMessage(msg); 14 } 15 } 16 }).start(); 17 } 18 });
可以看到Log打印结果如下:
1 02-19 22:25:17.689 9234-9319/com.plbear.asynctasktest E/AsyncTaskTest: post message:0 //可以看到提交是在9319号子进程中提交 2 02-19 22:25:17.689 9234-9319/com.plbear.asynctasktest E/AsyncTaskTest: post message:1 3 02-19 22:25:17.689 9234-9319/com.plbear.asynctasktest E/AsyncTaskTest: post message:2 4 02-19 22:25:17.689 9234-9319/com.plbear.asynctasktest E/AsyncTaskTest: post message:3 5 02-19 22:25:17.689 9234-9319/com.plbear.asynctasktest E/AsyncTaskTest:
您可能想查找下面的文章:
- AsyncTask注意事项,面试技巧和注意事项
- 再谈Android AsyncTask的优缺点,androidasynctask
- Android中AsyncTask分析--你所不注意的坑,androidasynctask
- AsyncTask基础(笔记)
- Android中AsyncTask基本用法与源码剖析(API 23)
- android源码解析之(二)--)异步任务AsyncTask
- AsyncTask源码探究,asynctask源码
- android:异步任务asyncTask介绍及异步任务下载图片(带进度条)
- Android线程操作对象AsyncTask线程机制
- AsyncTask.cancel()的结束问题,asynctaskcancel