Обновление активности пользовательского интерфейса в теме - PullRequest
2 голосов
/ 05 октября 2011

вот моя проблема. Я программирую приложение для Android, которое должно отображать время, когда оно выполняется. Для этого я создал новую тему, которая вызывается из действия. Однако, когда я запускаю приложение в эмуляторе, кажется, что активность никогда не загружается. Может быть, вы, ребята, можете помочь мне здесь. Вот соответствующий код:

public class ActivityStartTracker extends ActivityBasic {
    TimerThread timer;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.start);
        timer = new TimerThread();
    }

    protected void onResume() {
        super.onResume();
        registerReceiver(broadcastReceiver, new IntentFilter(
                ServiceLocator.BROADCAST_ACTION));
        timer.run();
    }

    protected void onPause() {
        super.onPause();
        unregisterReceiver(broadcastReceiver);
        if (timer.isRunning()) {
            timer.interrupt();
        }
    }

    class TimerThread extends Thread {
        boolean isRunning = false;

        public TimerThread() {
        }

        @Override
        public void run() {
            int seconds = 0;
            isRunning = true;
            while (isRunning) {
                try {
                    Log.d(TAG, "Timer is running for : " + seconds);
                    seconds++;
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    isRunning = false;
                }
            }
        }

        public boolean isRunning() {
            return isRunning;
        }
    }
}

Как я уже сказал, это соответствующие фрагменты кода. Проблема в том, что если я запускаю это, Activity остается черным - я просто получаю заголовок с названием приложения, вот и все. С помощью регистрации я могу подтвердить, что поток запущен, но больше ничего не отображается.

Не могли бы вы помочь мне, я довольно плохо знаком с Android.
Большое спасибо - уже заранее.

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Вызов таймера # run () сделает это, вызовет метод #run () в потоке пользовательского интерфейса. Вам нужно начать свой поток, вызвав вместо него #start () - новый поток будет делать то, что вы ожидаете.

Далее: Никогда не вызывайте Thread # start () дважды, он фактически не перезапустит поток, просто вылетит приложение. Если вы намереваетесь запустить поток из своего onResume, вам нужно разместить там новый поток.

Кстати, рассмотрите возможность использования AsyncTask.

Br, Jens

0 голосов
/ 05 октября 2011

Имейте в виду, что единственный поток, который может обновлять пользовательский интерфейс - это UIThread.

Так что, если вы хотите изменить пользовательский интерфейс в другом потоке, вы должны метод: runOnUIThread()

, но когда у вас есть поток, который будет обновлять пользовательский интерфейс, лучше всего использовать AsyncTask; см. это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...