Обработчик и поток / Runnable - PullRequest
0 голосов
/ 08 марта 2020

Может кто-нибудь сказать мне, почему это не работает? Я пытаюсь выяснить, как использовать поток / Runnable. Поток не делает много, но только для l oop и позволяет основному потоку знать, чтобы обновить текст. Я не знаю, что я пропустил, centertext не обновляется. Большое спасибо.

public class MainActivity extends AppCompatActivity {

    TextView centerText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        final SysTimeObj sysTimeObj = new SysTimeObj();
        centerText = findViewById(R.id.centerText);
        Handler stHandler = new Handler(getMainLooper()){
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage(msg);
                centerText.setText("thread updated");
            }
        };

        startThread(sysTimeObj, stHandler);
    }

    public void startThread(SysTimeObj sysTimeObj, Handler handler){
        clockThread rc = new clockThread(sysTimeObj, handler);
        Thread t1 = new Thread(rc);
        t1.start();

    }
}

public class clockThread implements Runnable {
    //private String sysTime;
    private Handler handler;
    SysTimeObj sysTimeObj;

    public clockThread(SysTimeObj sysTimeObj, Handler mHandler){
        //sysTime = GregorianCalendar.getInstance().getTime().toString();
        this.sysTimeObj = sysTimeObj;
        handler = mHandler;
    }

    @Override
    public void run() {
        sysTimeObj.setTime();
        handler.postDelayed(this, 100);
    }
}

1 Ответ

0 голосов
/ 08 марта 2020

Вы хотите что-то сделать в потоке Main / UI через определенное время? На Android вам не нужна новая тема.

Основная тема имеет очередь сообщений, в которую вы можете отправить . Эта очередь сообщений очищается на регулярной основе. Отправленные сообщения можно настроить так, чтобы они выполнялись позднее (что, как вам кажется, нужно).

Чтобы отправлять сообщения, вам нужно создать Handler для целевой цепочки. Это Handler позволит вам отправлять сообщения в эту ветку. Затем Публикация a Runnable в этой теме с использованием одного из доступных методов публикации (здесь postDelayed).

В итоге вы получите что-то вроде этого:

public class MainActivity extends AppCompatActivity {

    private TextView yourTextView;

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

        yourTextView = findViewById(R.id.yourTextView);

        Handler handler = new Handler(getMainLooper());
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                yourTextView.setText("Updated after 100 ms");
            }
        }, 100);
    }
}

Если темы действительно то, что вы хотите, я предлагаю вам взглянуть на AsyncTasks . Вы также можете посмотреть официальную документацию о Process and Threads на Android Developpers.

...