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

타이머를 서비스로 구현했는데 이상합니다.

0 추천
package com.example.timertest;
 
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
import android.widget.TextView;
 
public class ServiceClass extends Service {
    private int minute = 0;
    private int second = 0;
    private int t100ms = 0;
    private TextView text;
 
    private Handler handler = new Handler();
 
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
 
    public void onStart(Intent intent, int startId) {
    	 handler.removeCallbacks(doUpdateTimer);
         handler.postDelayed(doUpdateTimer, 1);
    	Log.d("slog", "onStart()");
        super.onStart(intent, startId);
       
        // final Button buttonStart =(Button) findViewById(R.id.ButtonStop);
    }
 
    @Override
    public void onDestroy() {
    	  handler.removeCallbacks(doUpdateTimer);
    	Log.d("slog", "onDestroy()");
      
        super.onDestroy();
 
    }
 
    private Runnable doUpdateTimer = new Runnable() {
        public void run() {
            t100ms++;
            if (t100ms >= 10) {
                t100ms = 0;
 
                second++;
                if (second >= 60) {
                    second = 0;
                    minute++;
                    if (minute >= 60)
                        minute = 0;
                }
            }
          
            String strFormat = String.format("%02d:%02d:%2d", minute, second, t100ms);
            text.setText(strFormat);
            handler.postDelayed(doUpdateTimer, 100);
        }
    };
 
}

 

이것은 서비스클래스로 이용하여 다른 액티비티에서 타이머를 보여주며 문제를풀면서 다른액티비티에 계속 넘어가면서 자기가 얼마나 시간이 흘러가는지 알수있게 만들려고합니다. 허나 오류는 없습니다. 그래서 문제가 뭔지 도대체 모르겠습니다............ ㅠㅠ... 저가 잘하는편이아니라서 이해를 전반적으로 완벽히 못해서그런건지... 서비스클래스에서만 문제를 고치면 되는데 ...무엇이문제인지모르겟습니다.

그레이또 (230 포인트) 님이 2013년 12월 18일 질문

1개의 답변

+1 추천

오류가 없는데 서비스클래스에서 문제를 고치다니요...

 

서비스에서 바로 뷰를 업데이트 하시네용...

 

Custom Action String 만드셔서...

서비스는 두가지 동작만 하구요...

  • 시간 계산
  • 계산된 시간 데이터 통보(Custom Action String). 데이터는 Intent.putExtras(Bundle)으로 전달

 

액티비티에서 BroadcastReceiver구현해서 

  • 서비스가 발송한 Intent데이터가 수신될 때 마다 동일한 Custom Action String으로 수신경우 값 꺼내서 TextView에 적용.

이렇게 처리하시면 될듯...

 

저같으면 그냥 시작 시각을 SharedPreference에 저장해서 액티비티 이동시에 시간을 꺼내고 액티비티에서 타이머를 구현하겠어요... 서비스는 task killer에 죽을 수 있으니까요... 물론 task killer에 죽어도 살아나는 좀비서비스도 가능하지만 주객전도같네용...

칠리님 (10,910 포인트) 님이 2013년 12월 20일 답변
...