zoukankan      html  css  js  c++  java
  • Android_AsyncTask_Method

    package com.example.day07_asynctask_method;
    
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    /**
    1.问题:当我们请求网络数据,解析大数据,读写大数据时 ,需要进行耗时操作---用户体验差
          当用户频繁的执行耗时操作时,会出现程序无法响应异常
        当用户进行操作(如点击屏幕),程序在5s内没有进行响应,就会出现程序无法响应异常---anr异常
        原因:阻塞了主线程
        解决: 把耗时操作放到子线程中去执行
    
    2.问题: Only the original thread that created a view hierarchy can touch its views.
       只能在主线程(ui线程)中进行ui的修改操作
    
      解决:把数据发送到主线程,让主线程去修改ui
    
    3.asyncTask 异步任务 ---  在子线程中进行耗时操作,耗时操作完后自动的将数据发送到主线程,用户在主线程进行数据操作 
        1.去继承asyncTask抽象类
        2.实现未实现的方法
        3.调用,执行该类
    
     * 
     * @author my
     *
     */
    public class MainActivity extends Activity {
    
        public static final String TAG = "MainActivity";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
        //下载图片按钮点击事件
        public void onDownLoadImg(View v){
            //执行异步任务
            new MyAsynctask().execute("需传参数");
        }
        /**
         * 方法执行顺序 onPreExecute-doInBackground--onPostExecute
         * @author my
         *
         */
        class MyAsynctask extends AsyncTask<String, Integer, Bitmap>{
            /**
             * 在主线程中执行--在doInBackground方法前执行,通常显示正在加载提示
             */
            @Override
            protected void onPreExecute() {
                // TODO Auto-generated method stub
                super.onPreExecute();
                Log.i(TAG, "MainActivity--onPreExcute--threadName  ="+Thread.currentThread().getName()+",id = "+Thread.currentThread().getId());
            }
        /*
         *     在子线程中执行--执行耗时操作,
         * 参数类型与该类泛型的第一个参数一致,与执行者的execute的参数类型也对应,execute的参数会传到doInBackground方法中
         * 返回值类型与类的第三个参数一致,与onPostExecute方法中传入的参数也一致
         * 耗时操作执行完后才能后会将结果传给onPostExecute方法
         * 
         */
            @Override
            protected Bitmap doInBackground(String... params) {
                // TODO Auto-generated method stub
                Log.i(TAG, "MainActivity--doInBackground--threadName  ="+Thread.currentThread().getName()+",id = "+Thread.currentThread().getId());
                return null;
            }
            /**
             * 在主线程中执行--用来处理结果(通常用来显示数据)
             * 会接收doInBackground传过来的数据
             */
            
            @Override
            protected void onPostExecute(Bitmap result) {
                // TODO Auto-generated method stub
                super.onPostExecute(result);
                Log.i(TAG, "MainActivity--onPostExecute--threadName  ="+Thread.currentThread().getName()+",id = "+Thread.currentThread().getId());
            }
            /**
             * 用来更新进度时调用--在主线程中执行
             * 调用需要用户去执行
             * 参数类型与该类泛型的第二个参数对应,一般表示当前的加载进度
             */
            @Override
            protected void onProgressUpdate(Integer... values) {
                // TODO Auto-generated method stub
                super.onProgressUpdate(values);
            }
    
        }
    
    }
  • 相关阅读:
    matlab练习程序(灰度图直方图均衡化)
    二叉查找树
    hadoop入门介绍
    配置虚拟机Ubuntu网络连接
    hadoop ubuntu (单节点)部署
    Thrift
    linux打包压缩命令汇总
    [转载]ubuntu 启动流程
    linux命令大全
    Linux文件查找命令find,xargs详述
  • 原文地址:https://www.cnblogs.com/fangg/p/5730829.html
Copyright © 2011-2022 走看看