마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

통신 응답이 들어 온 후에 다음 동작 실행

0 추천
안녕하세요

예를 들어 와이파이 통신에서

데이터를 전송하고 받은 걸 확인 하고 다음 동작으로 진행하고 싶습니다.

 C#에서는  Application.DoEvens가 있어 편리했는데 안드로이드는 구현 방법을 모르겠습니다.

간략하게 정리하면 하나의 함수에서

1. 데이터 전송

2. 기다림

3. 데이터 받았을 떄  flag 발생(다른 함수, flag는  전역변수)

4. 플래그 확인 후 다음 동작 수행

 

도움 부탁드립니다
myblackberry (140 포인트) 님이 2015년 6월 18일 질문
아래 답변 처럼 비동기로해야지,
동기식 절차식 프로그래밍에서 일시 적으로 제어권을 넘기는 DoEvent트릭은 다른 언어에는 없기때문입니다.

2개의 답변

0 추천
안녕하세요.^^ 폰토스입니다.

안드로이드에서는 비동기식 클래스가 존재하는데요.

재정의 클래스:

private class MyAsyncTask extends AsyncTask<String, String, String>

{

@Override

protected void onPreExecute() { .. }  <= 초기화

@Override

protected String doInBackground(String... arg0) { .. } <= 네트워크 처리

@Override

protected void onPostExecute(String result) { .. } <= 결과처리

}

사용법은 :

new MyAsyncTask().execute("");

이렇게 하면 비동기식으로 네트워크 처리를 하실 수 있습니다.

 

Thread로 처리하셔도 됩니다만 컨트롤이 조금 힘드실거예요.

처음 사용하신다면요.

 

이걸 질문하신건지는 모르겠네요. ㅋ
폰토스 (620 포인트) 님이 2015년 6월 18일 답변
0 추천
new Thread(new Runnable() {

    //1.네트워크 전송 처리

   //2. 답변 수신

  //3. 다른함수 실행이 필요 하면 실행

      (UI 처리가 들어간다면 runOnUIThread 로실 행 또는 핸들러로 처리 - 이때는 쓰레드 동기화 처리 필요 - 각기 다른 쓰레드에서 실행되는 이유...)

 

//4. 플래그 확인후 다음 동작 실행 - UI 처리가 필요하다면 runOnUIThread 사용 - UI 쓰레드 이외 다른 쓰레드에서 UI 접근 불가의 이유

}).start();

 

C#에서도 예외던가 기억이 잘 나지 않습니다만 타 쓰레드에서 UI 쓰레드를 접근 할수 있는 방법이 있는 걸로 알고 있는데

그렇게 사용하시려면 strictmode를 설정 해 주셔야 할겁니다.

C#에서는 타 쓰레드에서 UI  제어할시 델리게이트를 사용하는 것으로 알고 있습니다만 안드로이드에서는 타 쓰레드에서 UI 제어가 필요시 runOnUiThread를 사용하거나 Handler를 사용합니다.
익명사용자 님이 2015년 6월 19일 답변
...