편도이 작업을 수행하려면 루프의 어느 곳에서나 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"));
}
}
}
일부 지역에서는 Android 소켓 프로그래밍에 대한 자습서를 보았습니다. 나는 그들이 AsyncTask를 사용했다고 생각하지 않지만, Thread 나 Service를 사용한다고 생각한다. –