반응형
Greensky0026
삽질러의 대환장 공사판
Greensky0026
전체 방문자
오늘
어제
  • 분류 전체보기 (241)
    • Language (56)
      • JAVA (13)
      • Swift (38)
      • Kotlin (4)
      • Dart (0)
      • PHP (0)
      • JavaScript (1)
    • IDE & Framework (92)
      • Spring (10)
      • Android (48)
      • iOS (8)
      • NodeJS (1)
      • CodeIgniter (3)
      • Flutter (1)
      • 분류중 (18)
    • Infra (8)
    • Database (12)
    • VCS (4)
    • Debug Log (34)
      • java (7)
      • swift (3)
      • Android (9)
      • Web (7)
      • 삽질기 (7)
    • Others (19)
      • 코딩테스트 풀이 (0)
      • IT 이야기 (18)
    • 쉼터 (2)
    • 개발공부 (14)
      • Network (1)
      • 자료구조와 알고리즘 (2)
      • Code design (8)
      • ETC (1)
      • 아카이브 (1)

블로그 메뉴

    공지사항

    • 프로그래머스 코딩 테스트 관련글 비공개 처리

    인기 글

    태그

    • 예제
    • 프로그래밍
    • JSP
    • Android
    • 타입
    • swfit
    • swift
    • kotlin
    • IT
    • reduce
    • map
    • 공부
    • 개발
    • ios
    • Java
    • xcode
    • 코딩테스트
    • level1
    • 구축
    • 프로그래머스

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    Greensky0026

    삽질러의 대환장 공사판

    비동기(Async)통신과 동기(Sync)통신의 차이 feat. retrofit
    IDE & Framework/Android

    비동기(Async)통신과 동기(Sync)통신의 차이 feat. retrofit

    2021. 5. 8. 00:12
    반응형

    * 2020.7.20에 작성한 포스트입니다.


     

    간단히 줄이자면, 아래와 같다.

    동기 : 요청과 결과가 동시에 일어남. 요청시 시간이 얼마나 걸리던 결과를 받아야 함.
            설계가 간단하고 직관적이지만, 결과가 반환될때까지 대기해야 한다.

    비동기 : 요청한다고 바로 결과가 주어지지 않음
               설계가 비교적 복잡한 편이지만, 멀티테스킹이 가능함

     

     retrofit2을 사용해서 통신하다가 삽질을 좀 했다.. 범인은 아래와 같다

        public boolean retrofit(final String email){
        	final int PASSED_PROCESS = 0
        	
            RetrofitService rs = RetrofitService.retrofit.create(RetrofitService.class);
            Call<String> call = rs.authEamilSend(email);
            call.enqueue(new Callback<String>() {
                @Override
                public void onResponse(Call<String> call, Response<String> response) {
                    if (!response.isSuccessful()) {
                        Toast.makeText(con, "fail to get response. try again",
                                Toast.LENGTH_SHORT).show();
                    }
                    if (!response.body().equals("")) {
                        Toast.makeText(con, "통신성공", Toast.LENGTH_SHORT).show();
                        PASSED_PROCESS = 1
                    }
                    else{
                        Toast.makeText(con, "통신실패", Toast.LENGTH_SHORT).show();
                    }
                }
    
                @Override
                public void onFailure(Call<String> call, Throwable t) {
                    Toast.makeText(con, "Connection error : " + t.toString(),
                            Toast.LENGTH_SHORT).show();
                }
            });
            
            if(PASSED_PROCESS = 1)
            	return true;
                
            return false;
        }

    머리가 빈 상태로 저런식으로 모자라게 코드를 짰었는데... 아우.. 멍청이...ㅋㅋㅋㅋㅋㅋ

    내 머릿속 : 헤헤 call.enqueue 수행하고 통신이 성공하면 참값을 리턴하겠지?
    현실 : 어림도없지 enqueue 콜백 안기다리고 바로 거짓 리턴 ㅎㅎ

     Retrofit2는 기본적으로 OkHttp를 네트워킹 계층으로 활용하여 그 위에 구축하므로...
    call.enqueue 대신 call.excute를 사용할수도 있다.

    Call<String> StringData = call.execute().body():

    아숑하면 StringData 변수 안에 동기적으로 데이터가 들어가게 된다.

     

    근데 재활용 필요없이 해당 작업만 사용해서 쓸꺼면 이렇게 쓰는거보다 AsyncTask가 훨씬 편리하고 쉬운거 같다...ㅎㅎ 

    private class DownloadFilesTask extends AsyncTask {
      @Override
      protected void onPreExecute() {
        super.onPreExecute();
        //작업전 실행되는 메서드 (다이얼로그를 띄운다던지..)
      }
    
      @Override
      protected String doInBackground(URL... urls) {
        //받은 URL을 통해 할 작업
        return total;
      }
    
      @Override
      protected void onProgressUpdate(Integer... progress) {
        //경과에 따른 페센테이지 작업
      }
    
      @Override
      protected void onPostExecute(String result) {
        //백그라운드 작업이 종료되고 받은 결과값으로 할 작업 입력
      }
      
    }

    하지만 deprecated 되었으니... ㅠㅠ

    반응형
    저작자표시 (새창열림)

    'IDE & Framework > Android' 카테고리의 다른 글

    Custom ListView 만들기(1/2) - 설계  (0) 2021.06.05
    LayoutInflater는 무엇일까?  (0) 2021.06.05
    margin과 padding 차이  (0) 2021.05.08
    Android Activity 수명주기란?  (0) 2021.05.07
    Manifest 파일이란?  (0) 2021.05.07
      'IDE & Framework/Android' 카테고리의 다른 글
      • Custom ListView 만들기(1/2) - 설계
      • LayoutInflater는 무엇일까?
      • margin과 padding 차이
      • Android Activity 수명주기란?
      Greensky0026
      Greensky0026
      점이 모여 선이 된다. 내 삽질도 언젠간 거대한 지하 도시가 되겠지!

      티스토리툴바