Представления пользовательского интерфейса не должны быть изменены из не-пользовательского потока.Единственным потоком, который может касаться представлений пользовательского интерфейса, является «основной» или «пользовательский интерфейс», который вызывает onCreate()
, onStop()
и другие подобные функции жизненного цикла компонента.
Поэтому, когда ваше приложение пытаетсяИзменив представления пользовательского интерфейса из потока, не являющегося пользовательским интерфейсом, Android выдает раннее исключение, чтобы предупредить вас, что это запрещено.Это связано с тем, что пользовательский интерфейс не является поточно-ориентированным, и такое раннее предупреждение на самом деле является отличной функцией.
ОБНОВЛЕНИЕ:
Вы можете использовать Activity.runOnUiThread()
обновить пользовательский интерфейс.Или используйте AsyncTask
.Но поскольку в вашем случае вам необходимо непрерывно читать данные с Bluetooth, AsyncTask
не следует использовать.
Вот пример для runOnUiThread()
:
runOnUiThread(new Runnable() {
@Override
public void run() {
//this will run on UI thread, so its safe to modify UI views.
_txtArea.setText("Changed");
}
});