zoukankan      html  css  js  c++  java
  • android 多线程

    AsyncTask类在子线程对UI进行操作

    继承AsyncTask类时指定三个参数:<Params, Progress, Result>

    Params 传入的泛型参数

    Progress 整形

    Result 反馈结果

    class RecyclerViewTask extends AsyncTask<Void, Integer, String> {

    //后台任务开始执行前调用,用于界面的初始化操作

    onPreExecunte(){}

    //这个方法的代码会在子线程中运行,在这里处理耗时任务。任务完成后,通过return语句返回结果。这个方法不能进行UI操作

    doInBackground(){}

    //

    }

    使用AsyncTask

    package com.test.admin.test;
    
    import android.app.ProgressDialog;
    import android.os.AsyncTask;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void onClick(View view){
            new pro().execute();
        }
        //
        class pro extends AsyncTask<Void,Integer,Boolean>{
    
            ProgressDialog progressDialog=new ProgressDialog(MainActivity.this);
            //在后台任务开始执行前调用,用于进行一些界面的初始化,如显示进度条对话框等
            @Override
            protected void onPreExecute() {
    
                progressDialog.setTitle("正在升级");
                progressDialog.setMessage("loading");
                //是否能用回退键取消界面
                progressDialog.setCancelable(true);
                progressDialog.show();
            }
            //里面所有的代码都会在子线程执行,处理所有的耗时任务,完后成通过retrun返回执行结果。
            //如果AsyncTask第三个参数是void,则不可返回结果。
            //这个方法不能进行UI操作,如需要更新UI元素,当前任务进度,可调用publishProgress(Progress...)完成
            @Override
            protected Boolean doInBackground(Void... params) {
                for(int i=1;i<=100;i++){
                    try {
                        //延迟
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    publishProgress(i);
                    if (i==100){
                        break;
                    }
                }
                return true;
            }
            //在后台任务中调用了publishProgress(Progress...)方法后会调用该方法,在此方法中进行UI操作。
            @Override
            protected void onProgressUpdate(Integer... values) {
                progressDialog.setMessage("Downloaded"+values[0]+"%");
            }
            //当后台任务执行完毕并通过retrun语句进行返回时,这个方法会被调用返回的数据作为参数传到此方法。
            // 可利用该参数进行UI操作,如提醒任务执行结果,关闭进度条等
            @Override
            protected void onPostExecute(Boolean aBoolean) {
               if (aBoolean){
                   progressDialog.dismiss();
                   Toast.makeText(MainActivity.this,"下载成功",Toast.LENGTH_SHORT).show();
               }
            }
        }
    }

     运行结果

    水平进度条的显示

    onPreExecute方法里添加

    // 设置水平进度条
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    // 设置提示的title的图标,默认是没有的
    //progressDialog.setIcon(R.mipmap.ic_launcher);
    //设计进度条最大值,默认100
    //progressDialog.setMax(1000);

    onProgressUpdate里添加

    //更新进度条进度,1是1倍增量
    progressDialog.incrementProgressBy(1);
    //二级进度条更新方式
    //progressDialog.incrementSecondaryProgressBy(2);

    1是一级进度条,2是二级进度条

  • 相关阅读:
    vs2008 当前上下文不存在名称xxx 解决办法
    SQL Server 2008故障转移集群+数据库镜像配置实例之一
    通过JavaScript获取页面大小
    使用JavaScript判断浏览器类型
    sql2008安装图解sql2008安装全过程
    Sqlserver中对时间类型的字段转换
    SQL Server 2008故障转移集群+数据库镜像配置实例之三
    这年头口罩都成时尚品
    一位软件工程师的6年总结[转]
    MS SQL Server查询优化方法[转]
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/8830167.html
Copyright © 2011-2022 走看看