2017-07-04 3 views
0

Je fais un service pour le compte à rebours, en activité je mets une vue de texte pour le temps d'affichage toutes les secondes: 100 - 0, mais quand je quitte l'activité et revenir à cela. Je vois la minuterie comme une course très rapide, mais je veux courir cette fois chaque seconde. où est le problème?Exécution du compte à rebours plus rapide lorsque je retourne à l'activité

MainActivity:

public static final String mBroadcastIntegerAction = "com.example.broadcast.integer"; 
private IntentFilter mIntentFilter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    showTime = (TextView) findViewById(R.id.textView1); 

    mIntentFilter = new IntentFilter(); 
    mIntentFilter.addAction(mBroadcastIntegerAction); 

    Intent serviceIntent = new Intent(this, AppServiceDay.class); 
    startService(serviceIntent); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    registerReceiver(mReceiver, mIntentFilter); 
} 

private BroadcastReceiver mReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (intent.getAction().equals(mBroadcastIntegerAction)) { 
      int second = intent.getIntExtra("Time", 0); 

      showTime.setText("" + second); 
     } 
    } 
}; 
    @Override 
protected void onPause() { 
    registerReceiver(mReceiver, mIntentFilter); 
//  unregisterReceiver(mReceiver); 
    super.onPause(); 
} 

Service:

public class AppServiceDay extends Service { 

CountDownTimer cdt; 
public static Handler mHandler; 
int downer = 1000; 
int time = 100; 
int mainTime = 100000; 

@Override 
public void onCreate() { 
    super.onCreate(); 
} 

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

    cdt = new CountDownTimer(mainTime, downer) { 
     @Override 
     public void onTick(long millisUntilFinished) { 

      time -= 1; 

      Intent broadcastIntent = new Intent(); 
      broadcastIntent.setAction(MainActivity.mBroadcastIntegerAction); 
      broadcastIntent.putExtra("Time", time); 
      sendBroadcast(broadcastIntent); 
     } 

     @Override 
     public void onFinish() { 
      time = 100; 
      this.start(); 
     } 
    }; 
    cdt.start(); 

    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public IBinder onBind(Intent arg0) { 
    return null; 
} 
} 
+1

Ajouter un champ 'static int c = 0' Service ... puis à l'intérieur' 'onStartCommand' ajouter Log.d ("c", "" + (++ c));' si vous connaissez base vous devriez comprendre ce qui se passe et pourquoi – Selvin

+0

1.Vous exécutez le service seulement pour CountDown ..? et 1. Fais-tu quelque chose alors que l'application est au premier plan ..? Si 1 est oui et 2 est non, vous pouvez utiliser simplement Handler et SharedPreference pour le faire. –

+0

@Muthukrishnan Rajendran, quand j'utilise handler en service je donne ce poroblem. Si je retourne à la minuterie d'activité, je travaille très vite. – Fazel

Répondre

0

onStartCommand est déclenché chaque fois que startService est appelé et onStartCommand vous créez de nouveaux objet du compte à rebours,

Ajouter un ch nul Avant de créer un nouvel objet de compte à rebours, il va corriger votre duplication en même temps.

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    If(cdt == null) { 
     cdt = new CountDownTimer(mainTime, downer) { 
      @Override 
      public void onTick(long millisUntilFinished) { 
       time -= 1; 
       Intent broadcastIntent = new Intent(); 
       broadcastIntent.setAction(MainActivity.mBroadcastIntegerAction); 

       broadcastIntent.putExtra("Time", time); 
       sendBroadcast(broadcastIntent); 

      } 

      @Override 
      public void onFinish() { 
       time = 100; 
       this.start(); 
      } 
     }; 
     cdt.start(); 
    } 

    return super.onStartCommand(intent, flags, startId); 
} 
+0

Pouvez-vous me donner un exemple dans mon code? – Fazel

+0

Merci. c'est du travail. – Fazel