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

쓰레드, 핸들러 관련 질문.(Thread, Handler)

0 추천

안드로이드 초보입니다.

쓰레드, 핸들러에 대한 질문 드립니다.

Runable에서 이미지를 1초마다 바꿔주는 화면을 짜보려고 하는데 어느 부분이 오류인지 정확히 모르겠어서 문의드립니다... 실행시 바로 제일 마지막 화면이 나와버립니다..

 

public class Main extends FragmentActivity{
    int i=0;
    Handler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        handler = new Handler();

        RelativeLayout mainlayout = (RelativeLayout) findViewById(R.id.mainlayout);


        handler.postDelayed(animation, 1000);

    }

    private Runnable animation = new Runnable() {
        @Override
        public void run() {
            ImageView imageloadertext = (ImageView) findViewById(R.id.imageView4);
            while(true) {
                imageloaderanimation();
            }
        }

    };

    private void imageloaderanimation(){

        ImageView imageloadertext = (ImageView) findViewById(R.id.imageView4);
        switch(i){
            case 0:
                i++;
                imageloadertext.setImageResource(R.drawable.a1);
            case 1:
                i++;
                imageloadertext.setImageResource(R.drawable.a2);
            case 2:
                i++;
                imageloadertext.setImageResource(R.drawable.a3);
            case 3:
                i++;
                imageloadertext.setImageResource(R.drawable.a4);
            case 4:
                i++;
                imageloadertext.setImageResource(R.drawable.a5);
            case 5:
                i++;
                imageloadertext.setImageResource(R.drawable.a6);
            case 6:
                i++;
                imageloadertext.setImageResource(R.drawable.a7);
            case 7:
                i++;
                imageloadertext.setImageResource(R.drawable.a8);
            case 8:
                i++;
                imageloadertext.setImageResource(R.drawable.a9);
            case 9:
                i++;
                imageloadertext.setImageResource(R.drawable.a10);
            case 10:
                i=0;
                imageloadertext.setImageResource(R.drawable.imageloader);

        }
    }
}

 

 

대화니 (1,120 포인트) 님이 2016년 2월 17일 질문

1개의 답변

0 추천
 
채택된 답변
while(true) 가 문제겠지요...

프로그램이 뻣어버리지 않은게 다행이네요...

imageloaderanimation() 함수에 로그를 찍어보세요...

예를 들어

Log.e("###", "i = " + i);

이런식으루...

그러면 프로그램 실행 1초 후 엄청난 속도로 증가하는 i를 보실 수 있을껍니다.
비애천사 (12,080 포인트) 님이 2016년 2월 17일 답변
대화니님이 2016년 2월 17일 채택됨
답변 감사합니다. 엄청난 i를 만났습니다ㅎㅎ

while문에 sleep(1000);을 사용하여 지적해주신 부분은 해결하였고,
이미지가 변경되는건 제가 아직 쓰레드, 핸들러에 대한 이해가 부족하여 해결하지 못하였습니다.
열심히 공부해서 해결하도록 하겠습니다!!!
이러면 스포일러 이려나요;;;
원 코드에서 while 삭제하시구...
handler = new Handler();
이 부분을...
handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        imageloaderanimation();
        sendEmptyMessageDelayed(0, 1000);
    }
};
그리고나서...
handler.sendEmptyMessageDelayed(0, 1000);
해주시면 되겠지요...

P.S :
switch(i)를...
switch( i%11 ) 로 바꾸면 로테이션되게꾼요 +ㅅ+
무럭무럭 자라는 아이를 보는것도 뿌듯하겠지만 약간은 제한을 하는...
이상으로 멍멍이 소리였습니다...
즐프되세요~
앗, 늦게 확인 했네요..ㅠㅠ

답변 감사합니다. 결과는 같지만 방법은 많다는걸 다시 느끼게 되네요..ㅠㅠ
더욱 열심히 공부해서 여러가지 방법으로 생각하도록 하겠습니다.
조언 감사합니다!!
...