CAFE

댓글

뒤로

앱위젯 Async Task에서 리모트뷰의 처리

작성자jjang| 작성시간13.10.31| 조회수74| 댓글 5

댓글 리스트

  • 작성자 슈퍼성근 작성시간13.11.01 안녕하세요. 제 생각에는 Context의 문제 같습니다.
    Context는 각 컴포넌트의 디펜더시가 생깁니다.
    즉 Activity, Service, Receiver, Provider 등의 컴포넌트의
    생명주기가 끝나면 context는 더이상 참조하면 안되는 거죠.
    그도 당연한게 context는 각 컴포넌트가 상속받거든요.

    위젯의 경우 헷갈려하시는 분들이 많아요.
    위젯은 정확히 리시버 입니다.
    다시 강조하자면 위젯은 리시버라고 이해하는 것이 중요합니다.
  • 작성자 슈퍼성근 작성시간13.11.01 그러므로 리시버의 생명주기는 딸랑 onReceive 함수가 호출이 끝이죠.
    해당 함수가 리시버의 시작이고 곧 끝입니다.
    해당 함수를 리턴해 버리면 그다음 context를 이용하여
    레이아웃 등의 작업은 사용할 수가 없을 꺼예요.

    그렇다면 AyncTask에서 postExecute에서 어떻게 그림을 그려야 하는가가 문제죠..
    그럴때는 sendBroadcast를 이용하여 자신에게 그림을 그리도록 Broadcast를 날려야 합니다.

    위젯을 사용하실때 힌트한가지를 드린다면
    위젯이 그려야하는 페이지별로 상태값과 상태값에 해당하는
    화면 그리기 함수를 분리하세요.
    예를 들어

    initDraw()
    idleDraw()
    ...
    같이 말이죠.
  • 작성자 슈퍼성근 작성시간13.11.01 비동기로 서버의 데이터를 내려 받을 때는
    일단 한가지 일만하세요.
    1. 서버에서 데이터를 받고
    2. 내려받은 데이터를 그려야 한다면 상태를 셋팅하고
    그리는 broadcast를 보냅니다.
    3. 다시 onReceive가 호출되고
    상태 값을 본뒤 해당하는 상태의 그리는 함수를 호출하는 것입니다.

    위젯은 설계가 매우 중요합니다.
    그리고 위젯은 쉬우면서도 어렵죠.
    위젯에 대한 별도의 컴포넌트가 없고
    리시버를 이용한다는 점에서 어려운 것입니다.

    수고하세요.
  • 작성자 jjang 작성자 본인 여부 작성자 작성시간13.11.02 주인장님 상세한 답변에 감사드립니다^^

    일반 앱에서는 아무 문제없이 잘 돌아가던 기능들도 앱 위젯에서는 제약을 받아 이러저리 돌려서 구현해야 하는
    경우가 많더라구요.

    앱 위젯이라도 메인 스레드에서 문제가 발생하면 일반 앱에서 this 로 했던 코드를 context 로 바꿔주면 대부분
    돌아가던데 이번에 Async Task를 사용하다보니 의외의 난제를 만나게 된 것 같습니다.

    지적해주신 내용은 저처럼 앱 위젯에 관심이 많은 사람들에게 엄청나게 중요한 내용인 것 같은데 잘 참고하여
    new getWeb().execute().get()같이 Async Task를 쓰는 취지를 무색케하는 꼼수를 쓰지않고 해결해보도록
    하겠습니다.
  • 작성자 jjang 작성자 본인 여부 작성자 작성시간13.11.02 다시한번 상세한 답변에 감사드리며 즐거운 주말 보내세요.
맨위로

카페 검색

카페 검색어 입력폼
카카오 이모티콘
사용할 수 있는 카페앱에서
댓글을 작성하시겠습니까?
이동시 작성중인 내용은 유지되지 않습니다.