安卓学习-界面-事件-AsyncTask

异步任务Asynctask完成一个下载

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="23dp"
        android:layout_marginTop="14dp"
        android:text="开始下载" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/button1"
        android:layout_marginTop="45dp"
        android:ems="10"
        android:inputType="textMultiLine" >

        <requestFocus />
    </EditText>

</RelativeLayout>

MainActivity.java

public class MainActivity extends Activity {

    EditText editText1;
    Button btn1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText1=(EditText)findViewById(R.id.editText1);
        btn1=(Button)findViewById(R.id.button1);
        btn1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                MyDown down=new MyDown(MainActivity.this);
                try {
                    down.execute(new URL("http://w.x.baidu.com/alading/anquan_soft_down_normal/12350"));
                } catch (MalformedURLException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }

            }
        });
    }

    class MyDown extends AsyncTask<URL, Integer, String>{
        //下载进度
        ProgressDialog p;
        //总下载量
        int totalSize=0;
        //当前下载
        int downloadSzie=0;
        Context context;
        //下载开始时间
        Calendar date_s=Calendar.getInstance();
        //下载结束时间
        Calendar date_e;
        public MyDown(Context context){
            this.context=context;
        }

        @Override
        protected void onPreExecute() {
             p=new ProgressDialog(context);
             p.setMax(0);
             p.setTitle("任务执行中");
             p.setMessage("任务执行完成比,请等待......");
             p.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
             p.setCancelable(false);
             p.setIndeterminate(false);
             p.show();
        }

        @Override
        protected String doInBackground(URL... params) {
            StringBuffer str=new StringBuffer();
            try {
                HttpURLConnection http=(HttpURLConnection)params[0].openConnection();
                //获取总下载量
                totalSize=http.getContentLength();
                InputStream in=http.getInputStream();

                byte[] buffer =new byte[1024];
                int readSize=0;
                while ((readSize=in.read(buffer))!=-1){
                    date_e=Calendar.getInstance();
                    //计算下载的总时间,主要是用于计算  K/S
                    int a=(int)(date_e.getTimeInMillis()-date_s.getTimeInMillis())/1000;

                    //总下载数
                    downloadSzie =downloadSzie +readSize;
                    //刷新UI
                    publishProgress(downloadSzie,totalSize,a);
                }

                return str.toString();

            } catch (Exception e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }

            return null;
        }

        protected void onPostExecute(String result) {
            editText1.setText("下载完成");
            p.dismiss();
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            p.setProgress(values[0]/1024);
            p.setMax(values[1]/1024);
            int sed=0;
            if(values[2]==0) sed=1;else sed=values[0]/1024/values[2];
            p.setMessage("任务执行完成比,请等待......\n 速度 "+sed+" K/S");
        }

    }
}

时间: 2024-10-14 05:44:22

安卓学习-界面-事件-AsyncTask的相关文章

安卓学习-界面-事件-handler

安卓程序运行后,系统会产生一条主线程,如果在主线程里修改UI,则会照成冲突,因此安卓建议用handler来更改UI 1.4张图片定时变换 MainActivity.java public class MainActivity extends Activity { ImageView imageView1; int index=0; int[] pics=new int[]{R.drawable.pic1,R.drawable.pic2,R.drawable.pic3}; @Override pr

安卓学习-界面-View的自定义

android的所有UI控件,都是基于View的,因此特意重点学习了下这个,为后面学习其他控件打下基础. http://www.360doc.com/content/14/0102/12/12050012_342019150.shtml 重新时常用覆盖的方法 package com.example.ddddddd; import android.content.Context; import android.graphics.Canvas; import android.graphics.Rec

安卓学习-界面-布局-RelativeLayout

RelativeLayout相对布局,所有内部的组件都是相对的 XML属性 XML属性 函数 说明 android:gravity setGravity 内部组件的对其方式 android:ignoreGravity setIgnoreGravity 设置哪个组件不受Gravity影响 RelativeLayout.LayoutParams用来设置内部组件的对齐方式 XML属性 说明 android:layout_centerHorizontal 水平居中 android:layout_cent

安卓学习-界面-View和GroupView

所有的界面元素都是继承与View(如:ImageView .Button等),布局继承于GroupView(如:LinearLayout等) view的主要属性,这里直接是xml配置里写了,当然直接通过代码也是可以的 XML属性 相关方法 说明 android:alpha setAlpha(float alpha) alpha值是从0~1的,比如0.5相当于透明50%,并且需要注意的是3.0以下版本没有这个属性,因此只要设置了就相当于不透明,3.0版本以下可以用过view.getBackgrou

安卓学习-界面-布局-LinearLayout

1.常用的xml属性 XML属性 相关方法 说明 android:baselineAligned setBaselineAligned 看不懂什么意思,这个是网上的解释 设置为False将阻止该布局管理器于他的子元素基线对其  android:divider setDividerDrawable(Drawable divider) LinearLayout好像没效果 设置垂直布局时2个按钮之间的分隔线 android:gravity setGravity 组件内部的对齐方式,有如下几种 top

安卓学习笔记之AsyncTask机制浅析

一.相关基础 1 用途 用于快速开启异步任务,处理耗时操作.在线程池中处理异步任务,同时可以将进度和处理结果提交到主线程处理. 2 AsyncTask 泛型参数-Params, Progress, Result Params 表示传入doInBackground参数的类型 Progress 表示后台任务执行进度的类型 Result 表示后台任务执行完成后返回结果的类型 若不需要传入具体的参数,传入Void即可 3 常见方法 onPreExecute 执行任务之前,UI线程,在doInBackgr

安卓学习-界面-ui-RadioButton CheckBox

RadioButton  CheckBox 下面例子演示了2个功能,一个是RadioButton选择时的事件,还有一个是Button按钮点击查看这2个控件的属性 XML代码 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_pa

安卓学习-界面-ui-TabHost

TabHost注意点 1.界面上要放上TabHost,并添加自定义的选项卡,而且还必须用代码来设置tab,并不是xml放了就行的 2.Activity必须继承TabActivity,否则没有getTabHost函数 3.现在已经不推荐使用TabActivity了,推荐用Flagment,书上是这么说的 例子 第一个tab页登陆窗口是用另外一个activity的,其他都是XML里写的 activity_main.xml <LinearLayout xmlns:android="http://

安卓学习-界面-ui-SearchView

activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"