Minuteur en arrière-plan

Je suis le développement d'une Application Android à un collège de travail. Dans ce travail, je souhaite créer un service d'arrière-plan avec une minuterie et lorsque je ferme l'application, la minuterie toujours en cours d'exécution. Quand j'ouvre l'appli, je peux voir le temps depuis que j'ai commencé de service.
Eh bien, mon problème est que lorsque je ferme l'application, le fond de la minuterie s'arrête et ne s'incrémente plus.

Pouvez-vous m'aider s'il vous plaît?
Merci beaucoup

Mon lanceur de classe

    import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private Button startButton;
private Button pauseButton;
private TextView timerValue;
Intent intent;
long timeSwapBuff = 0L;
long updatedTime = 0L;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
timerValue = (TextView) findViewById(R.id.timerValue);
startButton = (Button) findViewById(R.id.startButton);
startButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
intent = new Intent(MainActivity.this, CounterService.class);
startService(intent);
registerReceiver(broadcastReceiver, new IntentFilter(CounterService.BROADCAST_ACTION));
}
});
pauseButton = (Button) findViewById(R.id.pauseButton);
pauseButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
unregisterReceiver(broadcastReceiver);
stopService(intent);
}
});
}
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
updateUI(intent);       
}
};    
private void updateUI(Intent intent) {
int time = intent.getIntExtra("time", 0);
Log.d("Hello", "Time " + time);
int mins = time / 60;
int secs = time % 60;
timerValue.setText("" + mins + ":"
+ String.format("%02d", secs));
}
}

et ici, la classe de service

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.SystemClock;
public class CounterService  extends Service {
private Intent intent;
public static final String BROADCAST_ACTION = "com.javacodegeeks.android.androidtimerexample.MainActivity";
private Handler handler = new Handler();
private long initial_time;
long timeInMilliseconds = 0L;
@Override
public void onCreate() {
super.onCreate();
initial_time = SystemClock.uptimeMillis();
intent = new Intent(BROADCAST_ACTION);  
handler.removeCallbacks(sendUpdatesToUI);
handler.postDelayed(sendUpdatesToUI, 1000); //1 second
}
private Runnable sendUpdatesToUI = new Runnable() {
public void run() {
DisplayLoggingInfo();           
handler.postDelayed(this, 1000); //1 seconds
}
};    
private void DisplayLoggingInfo() {
timeInMilliseconds = SystemClock.uptimeMillis() - initial_time; 
int timer = (int) timeInMilliseconds / 1000;
intent.putExtra("time", timer);
sendBroadcast(intent);
}
@Override
public void onDestroy() {   
super.onDestroy();
handler.removeCallbacks(sendUpdatesToUI);   
}
@Override
public IBinder onBind(Intent intent) {
//TODO Auto-generated method stub
return null;
}
}
  • C'est une exigence que vous utilisez un Service pour cela? Vous pouvez toujours stocker le temps en millisecondes à n'importe quel moment (dans une base de données SQL locale, même dans SharedPreferences), et d'effectuer une rapide delta de l'arithmétique dans onResume() pour déterminer combien de temps il a été depuis que l'action que vous essayez de mesurer eu lieu.
  • Je suis en train d'utiliser un service, d'avoir une notification pour indiquer le temps. Mais ton idée est pas mal du tout
  • Eh bien, si vous êtes intéressés à en apprendre plus sur le Service classe (comme c'est généralement le cas avec les classes de Collège), puis un coup d'oeil à la réponse fournie par @Mahfa. Sinon, je crois que ma suggestion serait beaucoup plus simple.
  • avez-vous eu des answerr. J'ai le même problème
InformationsquelleAutor Luis | 2013-11-02