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

  • Android - Écoutez pour les messages SMS entrants
  • Comment transférer des fichiers entre des applications Android s'exécutant sur le même périphérique?
  • Impossible de démarrer le service Intention: introuvable
  • Comment exécuter une tâche Async à plusieurs reprises après des intervalles de temps fixes
  • Service de fond avec l'auditeur de localisation dans Android
  • Comment utiliser PendingIntent pour communiquer d'un service à un client / Activité?
  • 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.