쓰레드 개념을 잘못잡고계신거같은데,
쓰레드는 다른 cpu라고 생각하시면 됩니다.
즉 한 액티비티에서 UI작업을 하고있고, 용량이 큰 작업을 돌릴려고할때 다른 cpu를 돌리겠다는 의미로 쓰레드를 실행하는겁니다.
그러면 한cpu는 UI작업을 할수있고, 다른 cpu는 대용량작업을 따로 할수있겠죠.
근데 다른cpu에서 i를 1부터 14까지 카운트한뒤에 intent로 다른 액티비티로 넘겼다는건 전혀 다른의미죠.
메인쓰레드에서 intent를하던 다른쓰레드에서 intent를하던 똑같은 작업입니다.
다만 다른 cpu(다른 프로세스)를 사용해서 계산을 하겠다는얘깁니다.
즉 while문으로 i++무한루프를 하나의 쓰레드로 만들고
현제 액티비티를 finish로 종료시킨다.
하면 현재 액티비티를 관리하고있는 메인쓰레드는 종료되겠죠.
하지만 다른 쓰레드는 i++ 무한루프를 돌고있기때문에 앱이 꺼져도 계속 돌아갑니다.
즉 무슨말이냐,
님이 쓰레드를 실행시키는건 다른 프로세스를 실행시켜달라고 요청을 하는것이고,
새 프로세스가 생성되면 작업 할당은 할 수 있어도 마음대로 종료는 못한다 이말입니다.
즉, 새 쓰래드에 작업 할당을 해주고난뒤에, 로직이 다 끝나면 알아서 쓰레드를 종료하던지,
님이 interrupt로 종료해달라고 요청하면 프로세스가 종료할때까지 기다리는수밖에 없습니다.
그렇다면 쓰레드를 종료했다가 다시 어떻게 재시작시키는가 에대한 궁금증이 있을텐데,
쓰래드는 항상 새로 실행시키는게 옳습니다.
즉, 님이 앱을 실행하면 쓰레드 하나가 돌면서 님 앱을 실행시킵니다.
그리고 finish를 하면 앱이 종료가 되겠죠.
그다음 다시 앱을 실행시키면 전에 쓰던 쓰레드를 종료시키고 다시 실행하는게아니라,
새로운 쓰레드를 다시 실행시켜서 실행하는겁니다.
간단히말해서, 쓰레드는 로직이 끝나면 알아서 종료된다.
도중에 강제종료하고싶으면 flag를 두거나 interupt를 해서 쓰레드 종료 요청을 하고 새 쓰레드를 만들어라.
참고삼아 다른프로세스를 다른cpu라고 표기했는데, 예를든것이고 다중코어면 다른 cpu가, 싱글코어면 한cpu에서 다중 프로세스를 생성해 스케쥴링기법 등 OS가 알아서 관리합니다.