Я пытался выяснить, как сделать нестандартный хронометр с точностью до одной сотой секунды. Я посмотрел на множество других подобных вопросов и решил попробовать его, используя поток и обработчик.
Это мой пользовательский метод handleMessage:
public void handleMessage(Message msg) {
String timeText = msg.getData().getString("time");
watch.setText(timeText);
}
Объект наблюдения - это просто TextView, который инициализируется в onCreate ().
И это основная часть моего метода запуска:
while(true) {
long timeElapsed = System.currentTimeMillis() - startTime;
int hundreths = (int)((timeElapsed % 1000) / 10);
int seconds = (int)((timeElapsed % 60000) / 1000);
int minutes = (int)(timeElapsed / 60000);
Bundle bundle = new Bundle();
bundle.putString("time", String.format("d:%02d.%02d", minutes, seconds, hundreths));
Message msg = handler.obtainMessage();
msg.setData(bundle);
handler.handleMessage(msg);
}
Я понимаю, что вся идея использования обработчика заключается в том, что только поток пользовательского интерфейса может обновлять элементы на экране, но я все еще получаю CalledFromWrongThreadException с сообщением, что только исходный поток, который начал создавать иерархию представления, может вызывать методы в теме. Я не понимаю, что именно я делаю не так.