天天看點

java的回調機制執行個體講解

前言:
在開發的過程中,一些方法可能經常需要用到,但我們不可能每次都寫一遍,這時候我們需要建立一個公共的類,在這個類裡面寫上方法,然後用public static修飾,可是當這個方法執行的是耗時操作的時候,我們需要開啟子線程,可是在子線程裡又不可以使用return,這是我們就需要使用java的回調機制來解決這個問題。
操作步驟:

1.建立一個回調接口

2.建立類,編寫帶有回調的方法。

3.在java代碼中調用建立類中的方法。

效果展現:
java的回調機制執行個體講解

代碼實作:

1.建立一個回調接口
public interface SumCallbackListener {
    //建立一個回調方法
    void onfinish(int sum);
}
           
2.建立類,編寫帶有回調的方法。
public class CalculateUtil {
   //param1:傳過來的輸入的值    param2:建立回調對象
    public static void requestCalculateSum(final int number,final SumCallbackListener listener){
        //開啟子線程,在這裡隻是模拟耗時操作
        new Thread(new Runnable() {
            @Override
            public void run() {
                int result = ;
                for(int i =;i<=number;i++){
                    result+= i;
                }
                //回調onfinish()方法
                listener.onfinish(result);
            }
        }).start();

    }
}
           
3.在java代碼中調用建立類中的方法。

1.首先是我的界面布局:

<?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.networktest.Main2Activity">

    <EditText
        android:id="@+id/main_et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請輸入一個正整數"
        android:inputType="number"/>
    <Button
        android:id="@+id/main_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="0到這個數之間的所有整數和求和"/>
    <TextView
        android:id="@+id/main_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="結果"
        android:gravity="center"
        android:textSize="25sp"/>


</LinearLayout>
           

2.java代碼部分:

public class Main2Activity extends AppCompatActivity {

    private EditText inputEt;
    private Button calculateBtn;
    private TextView resultTv;

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

        bindID();

        calculateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int input = Integer.parseInt(inputEt.getText().toString());
                //調用公共類的公共方法
                CalculateUtil.requestCalculateSum(input, new SumCallbackListener() {
                    @Override
                    public void onfinish(int sum) {
                        //根據回調的内容執行具體的方法
                        resultTv.setText(sum+"");
                    }
                });
            }
        });
    }

    private void bindID() {
        inputEt = findViewById(R.id.main_et);
        calculateBtn = findViewById(R.id.main_btn);
        resultTv = findViewById(R.id.main_tv);
    }
}
           
over