2016-08-08 2 views
0

내 액티비티의 버튼을 클릭하면 service이 시작되어 잠시 멈추고 Chronometer을 다시 시작하는 기능을 앱에서 개발할 것입니다. 하지만 내 배경에서 시작하고 멈추는 방법에 문제가 있습니다 service. , 크로노 미터를 배경 시간으로 사용

나는 나의 활동

public class StartWorkActivity extends ActivityGeneralToolbar { 

    protected final void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState, R.layout.activity_start_work); 
     Chronometer chronometer = (Chronometer) findViewById(R.id.chronometer); 



    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
    } 

    public void startWork(View v){ 
     Intent msgIntent = new Intent(StartWorkActivity.this, WorkTimerService.class); 


     msgIntent.setAction("START_TIMER"); 
     getBaseContext().startService(msgIntent); 
    } 

    public void pauseWork(View v){ 
     Intent msgIntent = new Intent(StartWorkActivity.this, WorkTimerService.class); 
     msgIntent.setAction("PAUSE_TIMER"); 

    } 

    public void resumeWork(View v){ 
     //call service 
     Intent msgIntent = new Intent(StartWorkActivity.this, WorkTimerService.class); 
     msgIntent.setAction("RESUME_TIMER"); 


    } 


    @Override 
    protected void onPause() { 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() { 

     super.onResume(); 
    } 
} 

그리고 내 WorkTimerService

public class WorkTimerService extends IntentService { 

    long timeWhenStopped = 0; 
    Chronometer chronometer; 

    public WorkTimerService() { 
     super("SystemService"); 

    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     if(intent.getAction() == "START_TIMER"){ 
      startWork(); 
     } 
     if(intent.getAction() == "PAUSE_TIMER"){ 
      pauseWork(); 

     }if(intent.getAction() == "RESUME_TIMER"){ 
      resumeWork(); 
     } 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     super.onStartCommand(intent, flags,startId); 

     return START_STICKY; 
    } 
    public void pauseWork(){ 

     timeWhenStopped = chronometer.getBase() - SystemClock.elapsedRealtime(); 
     chronometer.stop(); 
    } 

    public void resumeWork(){ 

     chronometer.setBase(SystemClock.elapsedRealtime() + timeWhenStopped); 
     timeWhenStopped = 0; 
     chronometer.start(); 

    } 

    public void startWork(){ 

     chronometer.start(); 
    } 
} 

을 생성하지만이 방법을 사용할 수없는 읽을 수 있기 때문에 내 문제는, Chronometer 분명 내 서비스의 null이다 서비스에서 ui와 상호 작용합니다. 그럼 배경으로 Chronometer을 보내거나 함께 작업 할 수 있습니까?

답변

1

Chronometer은 Android의 UI 위젯 (실제로는 TextView)입니다. 따라서 비 UI 용도로는 사용할 수 없습니다. 대신 Timer 또는 CountDownTimer을 사용해보십시오.

TimerService 내부의 예 사용이 참조 : https://stackoverflow.com/a/3819721/5250273

+0

당신을 감사하고 내가 볼 때 나는 돌아와! – LorenzoBerti

+0

그래, 내가 읽고, 내 문제를 해결하지만, 내 질문은 지금 ... 백그라운드에서 초마다 TimerTask을 만드는 것은 너무 비싸지 않습니까? – LorenzoBerti

+0

'TimerTask'를 반복해서 만들지 않도록하십시오. 'TimerTask'도 한 번 만들고 'Timer'를 사용하여 일정 비율로 일정을 잡으십시오. –

관련 문제