我在AsyncTask中使用了while循环。程序正在等待套接字请求,如
while(true) {
in = readLine();
...
}如何从AsyncTask的这个循环更新主UI。通常情况下,更新主线程是被禁止的,而且在doPostExecute中这样做并不能解决问题,因为这样我就不得不离开while循环。
发布于 2016-11-22 06:32:52
实现这一点的一种方法是在循环中的某个地方调用publishProgress(object)。这反过来调用方法onProgressUpdate(Object[]),您可以在该方法中更新主线程中的视图。
在下面的示例中,mTextView是AsyncTask所在类的成员变量。例如。
public class NewtworkActivity extends AppCompatActivity {
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.text_view);
....
}
private class MySyncTask extends AsyncTask {
....
@Override
protected Object doInBackground(Object[] objects) {
....
while (true) {
while ((lineFromServer = mFromServer.readLine()) != null) {
Object object[] = { lineFromServer };
publishProgress(object);
}
}
}
....
@Override
protected void onProgressUpdate(Object[] values) {
super.onProgressUpdate(values);
if (values.length > 0) {
mTextView.append(values[0]+System.getProperty("line.separator"));
}
}
}https://stackoverflow.com/questions/40077951
复制相似问题