1 java multithreading android fragment android-fragments
我有一个带有 ListView 的 Fragment 的应用程序。我 ping 网络上的 IP 地址,当我收到响应时,我将 IP 地址添加到列表中。完成对 IP 地址的 ping 操作后,我将回复我的 ping 的 IP 地址列表放入 ListView。
我想要做的是在我 ping 的时候更新这个 ListView,而不是在我 ping 所有的 IP 地址之后更新。为了 ping IP 地址,我使用了一个 AsyncTask,然后调用一个 Runnable 线程。当我找到 IP 地址时,如何告诉 Fragment 从该 Runnable 类更新 UI?
我的课程的粗略布局如下。
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
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
尝试这个....
getActivity().runOnUiThread(new Runnable(){
@Override
public void run(){
// Do whatever you want
}
});
Run Code Online (Sandbox Code Playgroud)