2015-09-01 2 views
-4

Всем известно, что когда вы манипулируете с помощью базы данных, вы должны сделать это в другом Thread. Но я не понимаю, что это действительно необходимо, когда вы просто вставляете один элемент, например, или когда это происходит, когда пользователь открывает Activity или Fragment, и данные просто загружаются из базы данных, которую пользователь будет ждать загрузки, заканчивая что угодно. Возможно, он даже немного приостанавливает приложение, создавая новый поток. Как вы думаете, что «должно быть» для создания новых тем?Android еще одна тема

+0

Если ваш основной поток остается занятым в другом месте и не обслуживает новые обновления экрана пользовательского интерфейса, пользовательский интерфейс будет заикаться. Кроме того, если Android обнаруживает, что UI замерзает слишком много (скажем, более 5 секунд), система будет показывать ошибку ANR (приложение не отвечает). Итак, оставьте основной поток свободным для обслуживания пользовательского интерфейса. –

ответ

1

Поток должен использоваться в длительном процессе, который блокирует пользовательский интерфейс от обновления. Если вам понадобится больше секунды или два, вы можете поместить его в фоновый поток и уведомить пользователя с помощью диалога или счетчика или чего-то еще. Если вы заблокируете поток пользовательского интерфейса более 5 секунд, пользователю будет предложена опция «убить» или «ждать» ОС.

1

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

Время, затрачиваемое на создание нового потока, намного меньше времени, затраченного на выполнение запроса или запроса HTTP или других тяжелых работ. Возможно, на вашем телефоне это короткое время, но на телефоне низкого уровня может потребоваться больше времени. После 5s Android показывает пользователю аллерт, чтобы спросить, хочет ли пользователь убить приложение или ждать, это не хорошо.

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

Я могу понять, что отправлять сообщения beetwen потоков не так просто, как это сделать в основном потоке, но если вы используете автобус, как OTTO автобус (http://square.github.io/otto/) и расширить класс шины таким образом

общественный класс AndroidBus распространяется автобус {

private final Handler mainThread = new Handler(Looper.getMainLooper()); 

@Override 
public void post(final Object event) { 
    if (Looper.myLooper() == Looper.getMainLooper()) { 
     super.post(event); 
    } else { 
     mainThread.post(new Runnable() { 
      @Override 
      public void run() { 
       post(event); 
      } 
     }); 
    } 
} 

}

Таким образом, и можно Исло отправлять сообщения beetwen потоков

Смежные вопросы