0

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:

parçasına o ilerleme iletişim kutusunu kapatmak böylece

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?

+0

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ı? –

+0

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

cevap

0

öncelikle eventbus hizmetinizin kalanı ne yapıyor

+0

Eğer hizmete başlamadan hemen önce "onClick" 'de eventbus kaydedersem ve servisi durdurduktan hemen sonra kayıt silindiyse, "Abonelerin event class com.example.app için kayıtlı kayıtlı olmadığı" mesajını alırım .DismissDialogEvent' – Simon

+0

@Simon unregister iletişim kutusu kapatıldıktan sonra –

+0

Bunu yapsam da aynı problemi görüyorum - iletişim anında gösterilmiyor ve kapatılıyor – Simon