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

서비스에서 타이머 구현방법 문제...

0 추천
package com.example.timer1;

import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
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) {
		Log.d("slog", "onStart()");
		super.onStart(intent, startId);
		handler.removeCallbacks(doUpdateTimer);
		handler.postDelayed(doUpdateTimer, 1);
		// final Button buttonStart =(Button) findViewById(R.id.ButtonStop);
	}

	@Override
	public void onDestroy() {
		Log.d("slog", "onDestroy()");
		handler.removeCallbacks(doUpdateTimer);
		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;
				}
			}
			text = (TextView) findViewById(R.id.TextView01);
			String strFormat = String.format("%02d:%02d:%2d", minute, second,
					t100ms);
			text.setText(strFormat);
			handler.postDelayed(doUpdateTimer, 100);
		}
	};

}
	

 

우선, 제가 생각한거는...

첫번째 액티비티에서 서비스에있는 타이머를 계속 실행시키면서 액티비티마다 시간흘러가는것을 보여주고, 마지막액티비티에서 중지되었을때

타이머도 멈추게 하려고합니다.

초보이기때문에 여기저기서 본거 긁어온건데 문제가 되는게 뭔지...모르겠습니다

거의 마지막쯤에있는 text = (TextView) findViewById(R.id.TextView01);

여기가 에러가나옵니다. findViewById 에서... 이유를 당췌모르겠습니다..ㅠㅠㅠㅠ...

어떻게해야 이것을해결하고 제가원하는 방향으로 구현할수있을까요?..

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

2개의 답변

0 추천
Service클래스에서 Activity의 UI에 변화를 주는 작업을 해서 그럽니다.

Service에서는 타이머의 주기가 돌아올때마다 Activity에 Intent만 전달하고

Activity에서는 onNewIntent()메소드를 오버라이딩하여

intent가 전달될때마다 텍스트뷰에 뿌려주면 됩니다.

 

Service에서 Intent를 전달하려면 Activity를 호출해야하니

Activity가 여러개가 안뜨도록 Intent flag라던가 매니페스트 파일에서 launchMode를 잘 설정해줘야합니다.
얼룩돼지 (15,720 포인트) 님이 2013년 12월 16일 답변
0 추천

aidl 에 대해서 공부해 보세요

 

http://developer.android.com/intl/ko/guide/components/aidl.html

aucd29 (218,390 포인트) 님이 2013년 12월 16일 답변
...