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

Context 문제? 입니다 ㅠㅠ

0 추천

현재 Activity에서 버튼을누르면 서비스가 실행이 됩니다.

 

서비스 onCreate 부분에 

ControlView cv = new ControlView(this);

wManager.addView(cv , mParams);

윈도우 매니저를 사용해 addView를 하려합니다.

 

ControlView는 제가만든 커스텀뷰입니다. 안에 또다른 커스텀 뷰들을 포함하고있습니다. (Text, Image, Video)

 

전체적인 프로그램은 리스트 (Text 정보들, Image 정보들, Video정보들이 들어있어요) 순서대로 새로운 윈도우에

텍스트뷰 이미지뷰 비디오뷰를 띄우는 것입니다.

 

여기서, 비디오가 어떤순서던지, 어떤파일인지에 관계없이  무조건 2번째 실행시 BadTokenException이 뜨면서

에러가 위에 this 부분을 가르키더라고요..    

getApplication / getBastContext / this /  MainActivity의 static context 등 다해봤는데 계속 배드토큰이뜨네요

getParent인가 넣으면 된다는 사람도있던데 아예 없네요 이건 ㅠ  고수님들 도와주세요!!

 

익명사용자 님이 2015년 8월 4일 질문
2015년 8월 4일 태그 변경

1개의 답변

0 추천
http://stackoverflow.com/questions/18662239

서비스에서는 뷰를 생성시키면 안됩니다.
쎄미 (162,410 포인트) 님이 2015년 8월 4일 답변
세미님 일반적으론 서비스에는 화면이 없어서 view를 만들어도 출력이  안되지만.
질문자가 적어주신 WindowManager를 써서 Top 화면에 붙이는  방식은 가능 합니다..

아무튼 첫번째는 됐는데 두번째에 안된다고 하신게,
첫번째 addview 한 것으로 인해 발생하는 문제로 보입니다.
기존 addview한 것을  removeView 한 이후 add 해 보세요
답변들 감사합니다.
제가 원하는 것은 화면상단에 항상 떠있는 뷰를 만드는 것인데요.

첫번째 addView를 지웠다 다시하라고하셨는데
ControlView cv = new ControlView(this);
이놈이 실행되는 순간 DataManager 라는 데이터 관리class에서 값들을 가져다
텍스트뷰, 이미지뷰, 비디오뷰의 세팅이 이루어지고 쓰레드가 실행이되면서
리스트를 돌리며 핸들러로 화면에 뷰를 띄워주는 형식입니다.

즉, 서비스에서는 셋팅 후 뷰에 띄우기? 약간 이런식이라
지웠다 remove했다가 다시 add 할수가 없습니다.ㅠ

쎄미님이 달아주신 링크에서의 설명으로는
액티비티는 끝났는데, 그 끝난 액티비티의 콘텍스트를 가진 뷰가
display를 시도하기때문에 발생한다고하는데 아마도 그게 원인인 것 같습니다ㅠ

그리고 동영상파일을 바꿔서 해보니까 2번은 가뿐히 돌리지만

한참 돌리다보면 같은 오류가 나네요 ㅎㅎ;;
서비스의
onCreate에 ControlView cv = new ControlView(getApplicationContext); 하고
onStartCommand에 addView를 두고
handler부분에서 혹시 작업이 겹치나해서 snchronized 붙여놓고 했더니 되네요!

링크에서 힌트를 얻었네요 감사합니다
...