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

서비스에서 액티비티로 putExtra 할때 무한액티비티 생성문제

0 추천

본래 목적은 타이머기능을 구현하는데 백버튼이나 홈으로 돌아가도 타이머가 유지되도록 하려고 서비스로 타이머소스를 뺀뒤 시작.정지 명령만 타이머를 출력하는 액티비티에서 내리도록 하려고 했습니다.

그리고 서비스에서 타이머의 결과를 1초에 한번씩 액티비티로 보내줍니다.

 Intent intent = new Intent(English_Service.this, Timer_English.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.putExtra("timer_real", hms);
            startActivity(intent);

그리고 다시 액티비티에서 그 텍스트를 받아서 띄워주는데

Intent intent = getIntent();
        String timer_real = intent.getStringExtra("timer_real");
        textTimer.setText(timer_real);

왜 시작버튼만 누르면 1초에 한번씩 텍스트가 바뀜과 동시에 액티비티가 계속 새로 뜰까요..ㅠㅠㅠ

KRJ (820 포인트) 님이 2015년 2월 5일 질문
아 그리고, 타이머는 CountDownTimer로 했습니다..

3개의 답변

0 추천
 
채택된 답변
startActivity는 값을 보내는게 아니라 activity를 새로 실행하는 겁니다.

타이머가 돌면서 매 초마다   startActivity를 실행하니 당연히 매 초마다 Activity가 실행 될 수밖에 없죠..

 

단순히 현재 떠있는 activity에 service에서 값을 보내주고 싶은거면 서비스의 타이머에서 브로드케스트를 날리고

메인 activity의 브로드케스트 리시버에서 이를 받아 처리해 주면 됩니다.
이드로이드 (22,930 포인트) 님이 2015년 2월 5일 답변
KRJ님이 2015년 2월 5일 채택됨
아..ㅠㅠ 새로 실행해주는 거였군요..
BR로 다시 해보겠습니다.. 감사합니다!
안드로이드 브로드캐스트 값 전달 안되는 문제
0 추천
1초에 한번씩 인텐트를 생성해서 시작시키니까 게속 뜨지요..ㅎㅎ;;;

계속뜨지않게 하려면 매니페스트에서

 

androod:launchMode="singleInstance" 를 이용하는 방법도 있습니다.

제가 이거 쓰면서 삽질좀 했죠..

액티비티가 새로 뜨진 않지만 내용이 바뀌질 않더군요.

싱글인스턴스로 할 경우, 기존에 만들어진 액티비티가 있을경우엔 만들어져있는것을 재사용 한다고 합니다.

재사용 하니까 당연히 내용은 안바뀌고, 액티비티 생명주기도 onCreate 가 불려지는것이 아니라 onNewIntent 가 불려집니다.

그래서 onNewIntent 메소드 안에서 새로 갱신되는 데이터 처리를해줘야 합니다.

onCreate 메소드 에서는 Intent intet = getIntent(); 해서 겟 익스트라 했지만

onNewIntent 메소드 에서는 매개변수인 intent를 이용해야 합니다..
아시리 (8,400 포인트) 님이 2015년 2월 5일 답변
0 추천
저라면 startActivity가 아니라 broadcast를 쏠 것 같아요
쎄미 (162,410 포인트) 님이 2015년 2월 5일 답변
...