Oyun emülatörü ile alakalı bir problem değil.

Oyun çalıştırıldığında arka planda Quartz'ı çalıştırıyor.

Quartz ise zamanlanmış görevleri çalıştıran ap ayrı bir framework ve kendi içinde "uygulamadan bağımsız" işletim sisteminin thread'lerını kullanır vs. Windows ise işletim sisteminiz, görev yöneticisinden Quartz servisini görüyor olursunuz göremezseniz tüm çalışan task/process'leri göster seçeneği vardır, windows'ta, göremezseniz, seçeneği açıp, öyle bakın listeye.

Aldığın problem ise, uygulama ilk çalıştırıldığında, bir job yaratıyor.

job nedir diye soracak olur isen -> Quartz scheduler job olarak aratıp teknik bilgi edinebilirsin.

Senin olayında şu şekilde cereyan ediyor.

İlk çalıştırdığında, uygulamanın ilk tetiklendiği yerde Quartz tetikleniyor ve bir resource dosyasında - DEFAULT.JobKey ile bir job yaratıyor. Yarattığı job yukarıda belirttiğim gibi uygulamadan bağımsız bir kütüphane(quartz) ile yaratıldığı için sen emülatörü kapatıp, tekrar açtığında, aynı job'ı yaratmaya çalışacaktır, bu noktadada uygulama zaten böyle bir thread var aynı isimde ikinci bir job oluşturamazsın diye hata alıyor.


Bunu nasıl çözerim.

İki şekilde;

1 - Ya manuel olarak emülatoru kapattığında, görev yöneticisinden çalışan quartz servisinide kapatacaksın.

2 - Yada uygulamanın main metodu içine aşağıdaki herhangi bir şekilde kod yazacaksın.

a - Uygulama ilk açıldığında, quartz kütüphanesinde vardır böyle bir özellik, çalışan thread pool içinde DEFAULT.JobKey adına sahip bir job aktif varmıdır diye kontrol edersin, eğer yok ise job'ı yaratırsın, var isede hiç bir şey yaptırmazsın.

b- Diğer yöntem, uygulama herhangi bir şekilde kapatıldığında, Android uygulamaların activity cycle'ı içinde onDestroy metodu vardır. Bu metod bloğu içine bir kntrol koyarak. Eğer DEFAULT.JobKey'e ait aktif bir job var ise onu shutdown ettirecek 2 satırlık kodu yazarsın. Böylelikle uygulama kapandığında job'ıda otomatik kapatmış olursun.


--

İşin teknik boyutuna hiç girmeyeceğim, benden bedava akıl buraya kadar.