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

제가 뭘 놓치고 있는것 같습니다. 프로그래스바 질문입니다.

0 추천

현재 A엑티비티에서 프로그래스바로 진행률을 표시하고

A엑티비티를 finish하고 B엑티비티로 갔다가 다시 A엑티비티로 돌아왔을때

진행률을 이어서 표시하게 하고 싶습니다.

Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
pb2.setProgress(Common.percent);
Log.i("handler", "호출됨 : " + Common.percent);
};
};
 
protected void onResume() {
super.onResume();
pb2.setProgress(Common.percent);
};
 
쓰레드 동작 부분은 빼고 업데이트 관련 로직을 첨부합니다.
위와 같이 핸들러로 pb(프로그래스바)를 업데이트 하는 로직이 있고,
다시 돌아왔을때 pb2.setProgrss로 진행률을 저장된 변수를 불러와 복원 세팅하는 로직을 구현하였습니다.
그런데 현재 엑티비티를 빠져나갔다 다시 돌아오면 Log상에 호출됨이라는 로그는 계속 찍히고
로그상으로 진행률은 올라가는데 UI단 프로그래스바는 업데이트가 되질 않습니다.
조언부탁드립니다.
갸아악 (21,260 포인트) 님이 2014년 11월 5일 질문
갸아악님이 2014년 11월 5일 수정

4개의 답변

0 추천
alkyne (22,960 포인트) 님이 2014년 11월 5일 답변
답변 감사드립니다.
그런데 현재 제 상황이랑 맞지 않는것 같습니다.
제 상황은 A엑티비티와 B엑티비티가 존재하는데 B엑티비티에서 진행률 표시가 되는 도중에 B엑티비티를 finish해서 A엑티비티로 갔다가 다시 B엑티비티로 왔을때 어떤 방법으로 다시 진행률을 이어서 업데이트 할 수 있는지에 대한 고민입니다.ㅠㅠ
0 추천
B액티비티로 갔다가 A로 돌아왔을 때 pb2 객체를 다시 초기화 해줘보심이 
Gradler (109,780 포인트) 님이 2014년 11월 5일 답변
해봤지만 되지 않습니다..ㄷㄷ;;
예상치 못한 난관에 부딪히네요;
쉽게 될줄 알았는데 이게 왜 안되는지..쩝..ㅠㅠ
멘붕올거같습니다..
0 추천
자답입니다.

이 방법이 옳은지 모르겠으나...

혹시 도움이 되실분들이 있어 적습니다.

일단 다운로드 진행상황률을 관리하는 변수를 하나 따로 만들었습니다.

변수를 하나 따로 만들고 진행률 정수가 증가할때마다 Activity단으로 handle 메시지로 콜백으로 받는 구조가 아닌

공통 퍼센테이지 변수에 업데이트를 하는 방식으로 구조를 바꿨습니다.

엑티비티단에서는 엑티비티 onCreate가 호출되면 변수로 저장되는 진행률을 체크하여 업데이트해주는 체크용 쓰레드를 따로 만들었습니다.

그래서 handler 메시지를 받아서 콜백처리하는 핸들러 의존적인 엑티비티 프로그래스바 업데이트 구조가 아닌

공통변수에 진행률을 업데이트하고 그 변수에 접근하여 진행률을 업데이트하는 쓰레드를 하나 더 돌렸습니다.

물론 엑티비티 finish할 경우 진행률체크하는 쓰레드를 flag를 줘서 중지시키고 나갑니다.

이후 다시 엑티비티에 진입하면 진행률체크 쓰레드로 진행률을 업데이트합니다.

일단은 이 방법으로 해결이 가능할거 같은데..아직 이 방법이 정확한지는 모르겠습니다.

도움되시기바랍니다.
갸아악 (21,260 포인트) 님이 2014년 11월 5일 답변
0 추천

액티비티에 핸들러를 선언해둔 구조같은데요

액티비티가 생성될때마다 핸들러도 새로 생성되겠죠

쓰레드에게 핸들러를 어떻게 넘겨줬는지는 코드를 봐야알겠지만

별도의 작업이 없었다면 액티비티 종료후 새로 액티비티가 만들어졌을때에도

쓰레드는 이전 액티비티에 있던 핸들러에게 메시지를 보내고 있을 겁니다.

메시지를 받을때 핸들러를 로그로 찍어보면 확인이 되겠죠?

이전 핸들러에서 접근하는 pb2도 새로 생성된 액티비티에 있는 녀석이 아닌 이전 액티비티에 있던 놈일 거구요

결론은 액티비티가 새로 생성될 때 쓰레드에게 새 핸들러를 연결시켜주면 업데이트가 정상적으로 될겁니다

 
alkyne (22,960 포인트) 님이 2014년 11월 5일 답변
...