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

안드로이드 스레드 끝나면 실행되는 오류....

0 추천
package com.abc.abc;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;

public class Learning extends AppCompatActivity {
    ProgressBar progressBar;

    Handler handler = new Handler();

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

        progressBar = (ProgressBar) findViewById(R.id.progressBar);
        final ProgressThread thread = new ProgressThread();

        thread.start();

        Button button = (Button) findViewById(R.id.goQuestion);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
           public void onClick(View v) {
                finish();
                Intent intent = new Intent(getApplicationContext(), Question.class);
                startActivity(intent);
            }
        });

    }

    class ProgressThread extends Thread {
        int value = 0;

        public void run() {
            while(true) {
                if (value > 100) {
                    Intent intent = new Intent(getApplicationContext(), Question.class);
                    startActivity(intent);
                    break;
                }

                value += 1;

                handler.post(new Runnable() {
                    @Override
                   public void run() {
                        progressBar.setProgress(value);
                    }
                });

                try {
                    Thread.sleep(100);
                } catch (Exception e) {}
            }
        }
    }

버튼을 눌러서 실행시키면 스레드가 끝날때 또 실행됩니다.
해결방안 있을까요.....
czower (120 포인트) 님이 2019년 3월 30일 질문
startActivity로 어떤 액티비티를 실행하시는 건가요?
아마 버튼을 누를 때 쓰레드가 실행되어야 할 것 같은데요.

1개의 답변

0 추천
쓰레드가 비동기이기때문에 버튼을 눌러서 엑티비티를 종료하더라도 쓰레드는 계속 작업을 하게됩니다.

결국 버튼을 눌러서 실행해도 뒷단에서 쓰레드가 작업하다가 value가 100이 넘으면 다시 스타트 엑티비티를 실행하게 되죠

 

방법은 음.. 여러가지를 해봐야하는데

 

일단은 버튼을 눌러서 시작할때 쓰레드를 멈추는 코드를 추가하시구요

이미 핸들러로 넘어간 메세지들이 있을꺼기 때문에  이미 메인루프로 넘어간 핸들러들을 모두 제거 해주셔야합니다.
youngDad 님이 2019년 3월 31일 답변
...