Я много читал о нитках, обработчиках, петлях и т. Д., И я очень запутался. В моем приложении я хочу иметь первую активность начать фоновой работник. Этот фон фон будет постоянно запрашивать данные из розетки TCP и (надеюсь) опубликовать новую информацию в потоке пользовательского интерфейса, поскольку данные поступают. Если пользователь переходит на новую активность, фон должен продолжать делать это, но только отправлять разные сообщения в тему пользовательского интерфейса, чтобы он мог соответственно обновить новую макет.
Вот то, что у меня до сих пор ... это в моем главном файле активности
public class MyTCPTest extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set the layout
setContentView(R.layout.main);
// create a handler to handle messages from bg thread
Handler handler = new Handler();
BgWorkerThread bgw = new BgWorkerThread();
bgw.start();
}
в другом файле, я определяю мою фоновую рабочую нить, как это ...
public class BgWorkerThread extends Thread {
@Override
public void run(){
while(true)
{
try {
// simulate a delay (send request for data, receive and interpret response)
sleep(1000);
// How do I send data here to the UI thread?
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
, если интернет-интерфейс на другой вид Тема остается бегом? Кроме того, как эта поток знает, какую деятельность отправить сообщение? Очевидно, я хочу, чтобы он всегда отправлял данные на активность, которая в настоящее время активна. Это происходит автоматически?
Наконец, когда интернет-интерфейс пользовательских интерфейсов должен быть уведомлен, что BGWorker должен быть уведомлен, чтобы он мог начать запрашивать данные, относящиеся к новой макете деятельности. Какой лучший способ сообщить рабочему изменению? Разве я не мог просто создать общественный метод в классе BGWorkerTread, который можно назвать, когда нагрузка на действия?