Uyguladığımda tıklandığında özel bir hizmet sınıfı başlatan bir düğmem var. Ardından tekrar tıklandığında, servisi durdurup bir ilerleme iletişim kutusu görüntülüyorum. bir mesaj göndermek için kontroller geçerse, ben olay otobüsü kullanmak benim hizmetin onDestroy
yöntemi içindeAndroid event bus: etkinlikler bir gönderi beklemeden yanıyor
public void onClick(View v) {
if (!recordingStarted){
try{
recordingStarted = true;
mainActivity.startService(new Intent(mainActivity, SensorService.class));
} catch (SQLException e){
mainActivity.logger.e(getActivity(),TAG, "SQL error insertSubject()", e);
}
} else {
dialog = new ProgressDialog(mainActivity);
dialog.setMessage("Stopping...");
dialog.setTitle("Saving data");
dialog.setProgressNumberFormat(null);
dialog.setCancelable(false);
dialog.setMax(100);
dialog.show();
mainActivity.stopService(new Intent(mainActivity, SensorService.class));
startButton.setEnabled(false);
}
}
, bir kaç şey kontrol ve ediyorum:
o düğmelerin onClick
şöyle
public void onDestroy() {
if (some condition is true){
//Send message to dismiss progress dialog
EventBus.getDefault().post(new DismissDialogEvent("dismiss"));
//Close databases and stop other things
unregisterListener();
dbHelper.close();
}
}
Benim DismissDialogEvent
sınıf burada:
Vebenim fragmanında ben yapıyorum:
@Override
public void onResume() {
super.onResume();
EventBus.getDefault().register(this);
}
@Override
public void onPause() {
EventBus.getDefault().unregister(this);
super.onPause();
}
@Subscribe
public void onEvent(DismissDialogEvent event){
if (event.message.equals("dismiss")){
dialog.dismiss();
}
}
Yani olay ne olması gerektiğini, düğme ikinci kez tıklandığında ise, hizmet bazı şeyleri kontrol edecek görüntüleyecek bir ilerleme iletişim ve daha sonra parçaya bir işten çıkarma mesajı gönderin. Parçacığı iletiyi alır ve ardından ilerleme iletisini reddeder
Sorun, iletişim kutusunun anlık olarak (oluşturulduğu anda) anında reddedilmesidir, bu nedenle hiç gösterilmez. Diyaloğu reddetmeden önce işten çıkarma olayını beklememesi neredeyse gibi. İletişim kutusunun, dialog.dismiss()
yorumunu yaparak göründüğünü onaylayabilirim. Bunu yapmak için kodumda neyi yanlış yapıyorum?
size yardımcı olacaktır kaydını lütfen görevden olay otobüsü kayıt ve daha hizmetini başlatmak ve diyalog sonrasında o anda hizmet başlar? OnDestroy yönteminin beklediğiniz saatte çağrıldığını doğruladınız mı? –
Servis, yalnızca bir sensör servisi kullanarak veri tabanına her 10 ms'de bir veri kaydeder, bir uyandırma kilidine sahip olur, böylece ekran okumasından bağımsız olarak sensör okuması devam edebilir. Ve evet, onDestroy, doğru çağrılır. Sadece bir şey logcat için günlüğe kaydederek – Simon