Поток-пока цикл- [Android] - PullRequest
0 голосов
/ 31 июля 2011

Так что в моих дальнейших попытках реализовать цикл while в Android я придумал следующий код:

private boolean connected = false;
private Thread loop = new Thread() {
    public void run() {
        Looper.prepare();
        while (connected) {
            do_Something();
        }
        Looper.loop();
    }
};

onCreate() {
    //.....
    ok = (Button) findViewById(R.id.button1);
    ok.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (connected) {
                try {
                    loop.start();
                }
                catch (Exception e) {
                    Toast.makeText(getBaseContext(), "Exception caught", Toast.LENGTH_LONG).show();
                }
            }
            return true;
        }
    });
    stop = (Button)findViewById(R.id.button2);
    stop.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                //disconnects current connection
                connected = false;
            }
            return true;
        }
    });
}

То есть, я пытаюсь, чтобы при прикосновении к первой кнопке мой поток пользовательского интерфейса переключался на поток, который будет снова и снова делать do_something до касания второй кнопки, и в этом случае логическое значение var k отключится и полностью остановить вновь созданный поток от нажатия кнопки первой кнопки. У меня есть google'd «потоки / обработчики / Android, хотя петли», но безрезультатно. Любая помощь в том, что я пытаюсь сделать, будет высоко ценится

Проще говоря, как мне убить созданный поток нажатием второй кнопки?

1 Ответ

1 голос
/ 31 июля 2011

Вы пробовали AsyncTask? Что вы можете сделать ... запустить новый AsyncTask при первом нажатии кнопки и отменить его при втором нажатии кнопки.

//define global variable
private DoSomething doSomething;

//register firstButton onClickListener
firstButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
        //start your asynctask
        if(doSomething == null || doSomething.isCancelled()){
            doSomething = new DoSomething();
            doSomething = doSomething.execute();
        }
    }
});

//register secondButton onClickListener
secondButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
        doSomething.cancel();
    }
});

//Inner AsyncTask class
class DoSomething extends AsyncTask<Void, Void, Void>{
    @Override
    protected Void doInBackground(Void... params) {
        //doSomething();
        while(true){
            System.out.println(1);
            if(isCancelled()){
                break;
            }
        }
        return null;
    }
}

Примечание: это псевдокод ... может содержать ошибку ... просто хочу дать вам обзор. надеюсь, это поможет.

...