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;
}
}
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
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. –
@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