使用AsyncTask

AsyncTask是一个抽象类,在继承时指定三个泛型的参数,
1 Params 在后台任务中执行
2 Progress 如果需要在界面上显示当前的进度,则这里使用指定的泛型
作为进度单位
3 当任务执行完毕后,需要对结果进行返回,则这里使用指定的泛型作为返回值类型

方法的介绍
1 onPreExecute();
会在后台任务开始执行前调用,用于进行一些界面上的初始化操作,比如显示进度条
2 doInBackground(Params)
这个方法中个所以代码都会在子线程中运行,在这里进行耗时操作。任务完成后可以用return语句返回执行的结果,如果第三个泛型参数指定的是 Void,不返回执行结果。这个方法内不能不可以进行UI操作如果要更新UI元素,调用publisProgress(Progress)方法来执行。
3 onProgressUpdate(Progress)
当在后台任务调用了punlishProgress(Progress)方法后,这个方法很快会被调用,方法中携带的参数就是后台任务中传递过来的。在这个方法里可以进行UI操作,利用参数中的数值就可以对界面元素进行相应地更新
4 onPostExecute(Result) 后台任务执行完毕通过return语句进行返回,这个方法很快被调用。返回的数据会作为参数传递到此方法中,可以利用返回的数据进行一些UI操作,比如提醒任务的执行结果。以及关闭进度条对话等。
总结:
doInBackground()中执行耗时操作,onPressUpdate()方法中进行UI操作,在onPostExecute()方法中执行任务的收尾工作。

应用的实例:

package com.example.usingasynctask;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class MainActivity extends AppCompatActivity {
   TextView textView ;
    Button button ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView =(TextView) findViewById(R.id.textView);

        button =(Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ReadURL("http://www.baidu.com");
            }
        });
    }

    public  void ReadURL(String url){
        new AsyncTask<String , Void ,String>(){
            @Override
            protected String doInBackground(String...params) {
                //Java多参数方法,就是说在不清楚参数应该放多少情况下,只写一个方法就能实现。
                try {
                    URL url = new URL(params[0]);
                    URLConnection connection = url.openConnection();
                    InputStream isStream = connection.getInputStream();
                    InputStreamReader isr = new InputStreamReader(isStream);
                    BufferedReader br = new BufferedReader(isr);
                    String line;
                    StringBuilder builder = new StringBuilder();
                    while ((line = br.readLine()) !=  null ){
                        builder.append(line);
                    }
                    br.close();
                    isStream.close();
                    return builder.toString();
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e){
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPreExecute() {
                Toast.makeText(MainActivity.this,"开始读取",Toast.LENGTH_SHORT);
                super.onPreExecute();
            }

            @Override
            protected void onPostExecute(String s) {
                textView.setText(s);
                super.onPostExecute(s);
            }

            @Override
            protected void onProgressUpdate(Void... values) {
                super.onProgressUpdate(values);
            }

            @Override
            protected void onCancelled(String s) {
                super.onCancelled(s);
            }

            @Override
            protected void onCancelled() {
                super.onCancelled();
            }
        }.execute(url);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical">

   <Button
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Button"
       android:id="@+id/button"/>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            android:id="@+id/textView" />

    </ScrollView>


</LinearLayout>
  <uses-permission android:name="android.permission.INTERNET"/>


URLConnection connection = url.openConnection();
InputStream isStream = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(isStream);
BufferedReader br = new BufferedReader(isr);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值