Kavramlar ve Jetpack Compose uygulaması
Bu sayfada, mimariyle ilgili çeşitli en iyi uygulamalar ve öneriler sunulmaktadır. Uygulamanızın kalitesini, sağlamlığını ve ölçeklenebilirliğini artırmak için bu uygulamaları benimseyin. Ayrıca uygulamanızın bakımını ve testini de kolaylaştırır.
Kullanıcı arayüzü katmanı
Kullanıcı arayüzü katmanının rolü, uygulama verilerini ekranda göstermek ve kullanıcının etkileşim kurduğu birincil nokta olarak hizmet vermektir. Kullanıcı arayüzü katmanıyla ilgili bazı en iyi uygulamalar:
- Yalnızca tek bir veri kaynağı içerseler bile depolar oluşturmanız gerekir.
- Küçük uygulamalarda, veri katmanı türlerini bir
datapaket veya modüle yerleştirmeyi seçebilirsiniz.
Öneri |
Açıklama |
Tek Yönlü Veri Akışı (UDF)'nı izleyin. Önerilen çözümler |
Tek Yönlü Veri Akışı (UDF) ilkelerini uygulayın. Bu ilkelerde, ViewModel'ler gözlemci kalıbını kullanarak kullanıcı arayüzü durumunu gösterir ve yöntem çağrıları aracılığıyla kullanıcı arayüzünden işlemleri alır. |
Avantajları uygulamanız için geçerliyse AAC ViewModels'i kullanın. Önerilen çözümler |
İş mantığını işlemek ve kullanıcı arayüzü durumunu kullanıcı arayüzüne göstermek için uygulama verilerini getirmek üzere AAC ViewModels'i kullanın. Diğer ViewModel en iyi uygulamalarını burada bulabilirsiniz. ViewModel'lerin avantajlarını buradan inceleyebilirsiniz. |
Yaşam döngüsüne duyarlı kullanıcı arayüzü durumu toplama özelliğini kullanın. Önerilen çözümler |
Uygun yaşam döngüsü farkında olan eş yordam oluşturucuyu (
|
ViewModel'den kullanıcı arayüzüne etkinlik göndermeyin. Önerilen çözümler |
Etkinliği ViewModel'de hemen işleyin ve etkinliğin işlenmesi sonucunda bir durum güncellemesi gerçekleştirin. Kullanıcı arayüzü etkinlikleri hakkında daha fazla bilgiyi burada bulabilirsiniz. |
Tek etkinlikli bir uygulama kullanın. Önerilen |
Uygulamanızda birden fazla ekran varsa ekranlar arasında gezinmek ve uygulamanıza derin bağlantı oluşturmak için Navigation Fragments'ı kullanın. |
Aşağıdaki snippet'te, kullanıcı arayüzü durumunun yaşam döngüsünden haberdar bir şekilde nasıl toplanacağı özetlenmektedir:
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModel()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.uiState.collect {
// Process item
}
}
}
}
}
ViewModel
ViewModels, kullanıcı arayüzü durumunu sağlamaktan ve veri katmanına erişimden sorumludur. ViewModel'lerle ilgili en iyi uygulamalardan bazıları şunlardır:
Öneri |
Açıklama |
ViewModel'lar Android yaşam döngüsünden bağımsız olmalıdır. Önerilen çözümler |
ViewModel'ler, yaşam döngüsüyle ilgili herhangi bir türe referans tutmamalıdır. |
Coroutine'ları ve akışları kullanın. Önerilen çözümler |
ViewModel, aşağıdaki yöntemleri kullanarak veri veya alan katmanlarıyla etkileşimde bulunur:
|
ViewModel'leri ekran düzeyinde kullanın. Önerilen çözümler |
ViewModel'leri yeniden kullanılabilir arayüz parçalarında kullanmayın. ViewModel'leri şu durumlarda kullanmalısınız:
|
Önerilen çözümler |
|
Bir kullanıcı arayüzü durumunu kullanıma sunma. Önerilen |
ViewModels, verileri
|
Aşağıdaki snippet'te, ViewModel'den kullanıcı arayüzü durumunun nasıl kullanıma sunulacağı özetlenmektedir:
@HiltViewModel
class BookmarksViewModel @Inject constructor(
newsRepository: NewsRepository
) : ViewModel() {
val feedState: StateFlow<NewsFeedUiState> =
newsRepository
.getNewsResourcesStream()
.mapToFeedState(savedNewsResourcesState)
.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5_000),
initialValue = NewsFeedUiState.Loading
)
// ...
}
Yaşam döngüsü
Android yaşam döngüsüyle çalışırken dikkat etmeniz gereken bazı en iyi uygulamaları aşağıda bulabilirsiniz:
Öneri |
Açıklama |
Etkinliklerde veya parçalarda yaşam döngüsü yöntemlerini geçersiz kılmayın. Önerilen çözümler |
Etkinliklerde veya parçalarda |
Aşağıdaki snippet'te, belirli bir yaşam döngüsü durumu verildiğinde işlemlerin nasıl gerçekleştirileceği özetlenmektedir:
class MyFragment: Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewLifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
override fun onResume(owner: LifecycleOwner) {
// ...
}
override fun onPause(owner: LifecycleOwner) {
// ...
}
}
}
}