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);
            }
    
        }
    
    }
  • 相关阅读:
    ASP.NET Web Optimization Framework
    HearthBuddy Plugin编写遇到的问题
    HearthBuddy的plugin加载
    Unexpected ConvertTo-Json results? Answer: it has a default -Depth of 2
    HearthBuddy卡牌无法识别
    HearthstoneBot
    网络传输中的三张表,MAC地址表、ARP缓存表以及路由表
    DNS原理及其解析过程(转)
    React系列之--props属性
    react中constructor( )和super( )的具体含义以及如何使用
  • 原文地址:https://www.cnblogs.com/fangg/p/5730829.html
Copyright © 2011-2022 走看看