Jetpack Compose’de LaunchedEffect Nedir?

Hüseyin Serkan Özaydin
2 min readJun 14, 2022

Merhabalar, bugünlerde Jetpack Compose ile proje geliştirmeye başladım ve birkaç sorun yaşamaya başladım. Bende hem yaşadığım problemleri aktarmak istedim hemde bu problemleri nasıl çözdüğümü aktarmak istedim.

Galiba servis çağrıları için hepimizin LaunchEffect olayını kavraması gerekmekte. Biliyorsunuz ki Composable statelerini, içinde tanımlanan değerlere göre değiştirir. Yani bir değer değiştiği zaman Composable tekrardan çizdirilir. Bu da bize bazen yan etki dediğimiz Side effect’e sebep olur. Bugün bir servis çağırılırken Jetpack Compose’nin sebep olduğu bir side effectten bahsedip LaunchedEffect ile çözümünden bahsedeceğim.

İlk önce LaunchedEffect nedir?

Composable’nin içinde çalışan bir suspend fonksiyondur.

  • Ekran çizildiği gibi çalışmaya başlar ve ekran cancel olunca durur.
  • Keys değeri ile dururup tekrar çalıştırabilirsiniz
  • Her LaunchedEffect bir key e ihtiyaç duyar
  • LaunchedEffect Main Dispatcher’ında çalışır

LaunchedEffect’en bahsettiğimize göre şimdi bir örnek ile projemizi oluşturup probleme sebep olalım :D sonra bu problemi çözelim.

Projemiz şöyle;
Backendten bir veri gelmekte ve bu veriyi ViewModel tarafında karşılamaktayız. ViewModel tarafında karşıladığımız bu veriyi ön tarafta dinleyip durumun Success olması durumunda kullanıcıyı başka bir sayfaya (main_screen) e atacağız.

Haydi kodlayalım.

ViewModel’ımız veriyi servisten alıyor.

Servisten alınan veri “isDownloadData” değerine atılıyor ve bu değeri ön tarafta dinliyoruz.

Composable

Verinin Success gelmesi durumunda kullanıcıyı “main_screen” e yönlendiriyoruz ve bu ara bir tane log atıyoruz.

Bakalım sonuç ne olacak;

Uygulamamız ikikez MAIN_SCREEN_AÇILDI birkez ise getquestions calisti logları attı. Peki MAIN_SCREEN_AÇILDI logunu yazmaya sebep olan fonksiyon birkez çalışmasına rağmen neden ikikez MAIN_SCREEN_AÇILDI logu yazıldı. Çünkü SplashScreen ViewModel’da bulunan “isDownloadData” değerini dinliyor ve bu veri değiştiği için SplashScreen tekrardan çiziliyor.

LaunchedEffect ile çözümü

data değerini LaunchedEffect’e bir key olarak verdik ve projemizi run edelim

Gördüğünüz gibi Success durumu 1 kez çalıştı.

Yukarıdaki yazımda LaunchedEffect’in kullanımından bahsettim. Eğer eksik veya yanlış bir yer var ise bana belirtiniz :)

--

--