• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 再谈Android AsyncTask的优缺点,androidasynctask

再谈Android AsyncTask的优缺点,androidasynctask

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了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: 



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • AsyncTask注意事项,面试技巧和注意事项
  • 再谈Android AsyncTask的优缺点,androidasynctask
  • Android中AsyncTask分析--你所不注意的坑,androidasynctask
  • AsyncTask基础(笔记)
  • Android中AsyncTask基本用法与源码剖析(API 23)
  • android源码解析之(二)--)异步任务AsyncTask
  • AsyncTask源码探究,asynctask源码
  • android:异步任务asyncTask介绍及异步任务下载图片(带进度条)
  • Android线程操作对象AsyncTask线程机制
  • AsyncTask.cancel()的结束问题,asynctaskcancel

相关文章

  • 2017-05-26自定义Toast的显示位置和显示内容,自定义toast
  • 2017-05-26linux设备驱动程序之时钟管理(2)----又见结构
  • 2017-05-26Android之使用Bundle进行IPC,androidbundleipc
  • 2017-05-26对YUV数据进行裁剪,YUV数据进行裁剪
  • 2017-05-26Android开发学习——SQLite数据库与单元测试,androidsqlite
  • 2017-05-222.3.3 Button(按钮)与ImageButton(图像按钮)
  • 2017-05-26Activity的生命周期,Activity生命周期
  • 2017-05-26Postgresql通过fdw_JDBC连接查询DB2\Oracle表
  • 2017-05-26Android学习笔记-ImageView(图像视图),android-imageview
  • 2017-05-26AndroidStudio项目打包成jar,androidstudiojar

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 根据布局自动生成代码实例化的网站,布局自动生成
    • Android 手机卫士--是否有密码区分对话框类型,android卫士
    • android.view.WindowLeaked的解决办法,androidwindowleaked
    • Android Studio的SVN Performing VCS Refresh/Commit 长时间不结束,androidsvn
    • 实现在矩形框中输入文字,可以显示剩余字数的功能,矩形字数
    • 使用Android studio创建的AIDL编译时找不到自定义类的解决办法,androidaidl
    • AlertDialog创建6种对话框的用法
    • Android,androidstudio
    • 使用GNU parallel
    • 电商常用的正则表达式,字符串,地址操作,电商正则表达式

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有