как довольно лупер из рабочего потока - PullRequest
0 голосов
/ 25 ноября 2018

Я написал приведенный ниже код, чтобы лучше понять обработчик и лупер.Мне хотелось бы знать, как я могу выйти из Looper при возникновении определенного условия, например, когда счетчик достигает определенного предела.

В приведенном ниже коде я хочу вызвать .quit () для петлителяпотока T, когда «что» равно 10. Согласно коду, который я написал ниже, даже когда содержимое «что» превышает 10, вызывается метод «handleMessage» ... я ожидал, что когда .quit (), handleMessage больше не будет вызываться.

Пожалуйста, дайте мне знать, как правильно выйти из Looper.

app.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();
    }

}


}
...