0

我编写了以下代码以更好地理解 Handler 和 Looper。我想知道如何在发生特定条件时退出 Looper,例如,当计数器达到特定限制时。

在下面的代码中,当“what”等于10时,我想在线程T的looper上调用.quit()。根据我下面写的代码,即使“what”的内容超过10,“ handleMessage” 方法被调用...我预计当调用 .quit() 时,将不再调用“handleMessage”。

请让我知道如何正确退出 Looper。

应用程序.gradle

public class ActMain extends AppCompatActivity {

private static final String TAG = ActMain.class.getSimpleName();
private Handler mHandler = null;
private Button mBtnValues = null;
private int i = -1;

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

    this.mBtnValues = findViewById(R.id.btnValues);
    this.mBtnValues.setOnClickListener(x-> {
        Message msg = new Message();
        Bundle bundle = new Bundle();
        bundle.putString("what", "" + i++);
        Log.d(TAG, "i: " + i);
        msg.setData(bundle);
        mHandler.sendMessage(msg);
    });
    new T().start();
}

private class T extends Thread {
    private String str = "";

    public T() {}

    @Override
    public void run() {
        super.run();
        Log.d(TAG, "run method started");
        Looper.prepare();

        Log.d(TAG, "beginning of the looped section");
        final String[] cnt = {""};
        mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                String what= msg.getData().getString("what");
                str += what;
                Log.d(TAG, "new str: " + str);
            }
        };
        Log.d(TAG, "end of the looped section");
        if (i == 10) {
            Looper.myLooper().quit();
        }
        Looper.loop();
    }

}


}
4

0 回答 0