Вы неправильно рассчитываете оставшееся время. Обратный вызов получает количество миллисекунд до завершения задачи.
public void onTick(long m) {
long sec = m/1000+1;
tv.append(sec+" seconds remain\n");
}
должно быть
public void onTick(long m) {
long sec = m/1000;
tv.append(sec+" seconds remain\n");
}
Я никогда не использовал этот класс сам, но похоже, что вы не получите обратный вызов в тот момент, когда он начинается, поэтому кажется, что вы пропустили запись. например 10000 мс, 1000 мс за тик вы получите в общей сложности 9 обратных вызовов обновления, а не 10–9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, финиш.