Temporisateur en arrière plan

Je développe une application Android pour un travail collégial. Dans ce travail, je souhaite créer un service en arrière-plan avec une minuterie et lorsque je ferme l'application, la minuterie est toujours en cours d'exécution. Lorsque j'ouvre l'application, je peux voir l'heure écoulée depuis que j'ai commencé le service. Eh bien, mon problème est que lorsque je ferme l'application, la minuterie de fond s'arrête et ne augmente pas davantage.

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

  • Comment déterminer si la tâche de la minuterie est terminée
  • CountDownTimer.cancel () ne fonctionne pas dans Android
  • Comment démarrer une activité après une certaine période de temps?
  • Le service n'a pas été créé (ou connecté) après bindService ()
  • Comment ajouter un service système au cadre Android
  • Android java.lang.IllegalArgumentException: Service non enregistré
  • Ma classe de lanceur

    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; } } 

    2 Solutions collect form web for “Temporisateur en arrière plan”

    Vous devez démarrer votre service dans la méthode onStop() dans votre activité comme ceci:

     @Override protected void onStop() { super.onStop(); //write your code here to start your service } 

    travaille pour moi

     public void onResume() { super.onResume(); //write your code here to start your service registerReceiver(broadcastReceiver, new IntentFilter(ServiceClass.BROADCAST_ACTION)); } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.