2016-08-08 7 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は明らかに、私のサービスでヌルであるということですサービスでは、ユーザーと対話します。 それで、バックグラウンドで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'を使って固定レートでスケジュールします。 –

関連する問題