나는 ListView가있는 조각이있는 앱을 가지고 있습니다. 네트워크상의 IP 주소를 핑 (ping)하고 응답을 받으면 IP 주소를 목록에 추가합니다. 일단 IP 주소를 ping하고 나면, 핑 (ping)에 응답 한이 IP 주소 목록을 ListView에 넣습니다.조각에서 백그라운드 스레드에서 UI를 업데이트하는 방법
내가하고 싶은 일은 모든 IP 주소를 핑 (ping) 한 후에 핑 (ping)하고 있기 때문에이 ListView를 업데이트하는 것입니다. IP 주소를 Ping하려면 AsyncTask를 사용하여 Runnable Thread를 호출합니다. IP 주소를 찾으면 그 Runnable 클래스에서 UI를 업데이트하도록 Fragment에 어떻게 알리는가?
내 수업의 대략적인 레이아웃은 다음과 같습니다.
public class FinderFragment extends ListFragment {
private void CallFind(){
new Find().execute();
}
private class Find extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
SearchNetwork searchNetwork = new SearchNetwork(ipAddress);
try {
searchNetwork.StartFind();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
UpdateDeviceList();
}
}
}
public class SearchNetwork {
public void StartFind() throws InterruptedException {
Thread t[] = new Thread[20];
for(int i=0; i<02; i++){
t[i] = new Thread(new FindDevices(i*5));
t[i].start();
}
for(Thread thread : t){
thread.join();
}
}
class FindDevices implements Runnable{
@Override
public void run() {
//Ping the IP addresses here
//I want to update UI from here
}
}
당신이'getActivity(). runOnUiThread'을 시도했습니다 오버라이드 (override) 방법으로 그것을 잡을? –
대신 핸들러를 사용하십시오. google sample.https의 threadSample 예제를 참조하십시오. //developer.android.com/training/multiple-threads/communicate-ui.html – mcd