Может ли кто-нибудь объяснить, когда я поставил поток спать в течение 30 миллисекунд, он обновляет пользовательский интерфейс из фонового потока. но когда я укладываю сон на 300 миллисекунд, он падает, говоря, что вы не можете касаться вида из другого потока. Я ожидаю, что он потерпит крах в обоих случаях, но как-то работает в 30 миллисекунд. Требуется некоторое разъяснение по этому вопросу.Обновление пользовательского интерфейса из другой темы
public class HandlerDemo extends Activity implements Handler.Callback{
private static final String TAG = "FFFF";
private Handler mHandler = null;
private Handler mUIHandler = null;
private HandlerThread backgroundThread = null;
public static final int BACKGROUND_OPERATION = 10;
public static final int MAIN_THREAD_OPERATION = 20;
private TextView asd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
HandlerThread backgroundThread = new HandlerThread("BACKGROUND_THREAD");
backgroundThread.start();
mHandler = new Handler(backgroundThread.getLooper(), this);
mHandler.sendEmptyMessage(BACKGROUND_OPERATION);
// mUIHandler = new Handler(Looper.getMainLooper(), this);
// mUIHandler.sendEmptyMessage(MAIN_THREAD_OPERATION);
}
@Override
protected void onDestroy() {
super.onDestroy();
mHandler.getLooper().quit();
}
@Override
public boolean handleMessage(Message message) {
Log.d(TAG, Thread.currentThread() + "");
switch (message.what) {
case MAIN_THREAD_OPERATION:
try {
Thread.sleep(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
((TextView) findViewById(R.id.textview)).setText("Updating from UI Handler");
findViewById(R.id.textview).invalidate();
break;
case BACKGROUND_OPERATION:
try {
**Thread.sleep(300);**
} catch (InterruptedException e) {
e.printStackTrace();
}
((TextView) findViewById(R.id.textview)).setText("Updating from background Handler");
findViewById(R.id.textview).invalidate();
break;
default:
break;
}
// message.recycle();
return true;
}
}
он должен всегда сбоит при обновлении пользовательского интерфейса из фонового потока – Raghunandan
да действительно. но это не так. Вот в чем вопрос. –
так что если он не сбой, есть ошибка, достаточно ли этого? – pskink