Как элегантно получить доступ к Android Views из другой ветки? - PullRequest
3 голосов
/ 20 июля 2010

Я использую Twitter4j в асинхронном режиме. Когда я получаю ответ в Слушателе, я хочу иметь возможность изменить некоторые Представления в моей Деятельности, но это приводит к CalledFromWrongThreadException.

Я знаю, что могу использовать метод runOnUiThread, но какое самое элегантное решение для этого, кроме встраивания Runnable Classes?

Часть моей деятельности:

    TwitterListener listener = new TwitterAdapter() {

        @Override
        public void gotUserDetail(User user) {
            super.gotUserDetail(user);

            fillInUserProfileDetails(user); 

1 Ответ

3 голосов
/ 15 марта 2011

Не думаю, что есть более "элегантное" решение, чем Activity.runOnUiThread(Runnable) или View.post(Runnable). Вы, наверное, уже видели обсуждение потоков в документации для Android:

EDIT: http://android -developers.blogspot.com / 2009/05 / безболезненным-threading.html

Как там указано, инструментарий пользовательского интерфейса Android не является поточно-ориентированным, поэтому все взаимодействие с ним должно происходить в одном потоке, а именно в потоке пользовательского интерфейса приложения; и если вы собираетесь передавать работу из одного потока в другой, вам потребуется объект Runnable, чтобы инкапсулировать выполняемую работу.

Я знаю, что анонимные внутренние классы могут выглядеть довольно грязно, но они довольно распространены в Java, поскольку они наиболее близки к замыканиям , доступным в языке. Итак, IMO лучше всего стиснуть зубы и использовать Activity.runOnUiThread(Runnable) и напомнить себе, что элегантность в глазах программиста.

...