1. 程式人生 > >Android學習(28)AsyncTask_非同步執行緒

Android學習(28)AsyncTask_非同步執行緒

Android學習(28)AsynTask_非同步執行緒

AsyncTask是android提供的輕量級的非同步類,可以直接繼承AsyncTask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度(可以通過介面實現ui進度更新),最後反饋執行的結果給ui主執行緒。

1.新建一個Net.java模擬網路執行緒,讓程式延遲5秒

public class Net {
    public void net(){
        try {
            Thread.sleep(5000);
        }catch (InterruptedException e){
            e.printStackTrace();
        }

    }
}

2.新建一個MyAsyncTask.java,繼承AsyncTask,實現執行緒非同步

public class MyAsyncTask extends AsyncTask {
    //一個獨立的執行緒
    @Override
    protected Object doInBackground(Object[] objects) {
        //例項化Net
        Net net = new Net();
        //呼叫net方法使程式延遲5秒
        net.net();
        return null;
    }
}

3.在xml中佈局兩個按鈕,分別執行兩個操作——延遲程式和輸出語句

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation
="vertical" tools:context="com.example.test.androidtest.AsyncTaskActivity">
<Button android:id="@+id/btnAT1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="開始執行緒"/> <Button android:id="@+id/btnAT2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="執行非同步操作"/> </LinearLayout>

這裡寫圖片描述

4.在Activity中呼叫

public class AsyncTaskActivity extends AppCompatActivity implements View.OnClickListener{

    private Button btn1,btn2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_async_task);
        btn1 = (Button)findViewById(R.id.btnAT1);
        btn2 = (Button)findViewById(R.id.btnAT2);
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnAT1:
                //若不執行AsyncTask操作,直接呼叫Net.net(),另一個執行緒會在Net執行完之後執行
                //Net net = new Net();
               // net.net();
                //若執行AsyncTask操作,在MyAsyncTask中呼叫Net.net(),另一個執行緒會直接執行
                MyAsyncTask myAsyncTask = new MyAsyncTask();
                myAsyncTask.execute();
                break;
            case R.id.btnAT2:
                System.out.println("666666666666666");
        }
    }
}

宣告: 1.知識點來源於《網易雲課堂》——《Android基礎視訊教程》 2.本文只用於本人自身學習記錄,如有侵權,請立即通知我更改或刪除