Нет ничего плохого в том, чтобы использовать потоки Java в Android, но немного излишне использовать его только для отправки периодических сообщений. Рекомендуемый способ сделать это - использовать Handler.postDelayed . В этой статье предлагается следующий метод: поместите весь ваш код обновления в Runnable
и добавьте postDelayed
вызов в конец run()
этого Runnable, чтобы запланировать его снова. Этот подход устраняет накладные расходы на наличие фонового потока.
Однако Handler легко использовать для отправки сообщений из другого потока. Как я понимаю, вы пытаетесь отправить сообщения на какой-либо компонент пользовательского интерфейса, чтобы он мог обновляться сам.
В моем приложении я столкнулся с подобной проблемой. Я объявил обработчик внутри компонента пользовательского интерфейса и передал этот обработчик фоновому потоку в параметре конструктора.
Часть пользовательского интерфейса выглядит так:
class MyActivity extends Activity {
Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
// update UI according to a content of msg from background thread
// ...
}
};
private Thread mBackgroundWorker = new BackgroundThread(mHandler);
protected void onCreate(Bundle savedInstanceState) {
// ...
mBackgroundWorker.start();
// ...
}
protected void onDestroy() {
// we created the thread in this activity
// so we should manage its lifecycle here
mBackgroundWorker.interrupt();
}
}
А фоновый поток реализован как
class BackgroundThread extends Thread {
private final mHandler;
public BackgroundThread(Handler h) {
mHandler = h;
}
public void run() {
// do some processing...
mHandler.sendMessage(/*some message to update an UI*/);
// ...
}
}