Tugas Pertemuan ke-9 [Dessert Clicker App]

Dessert Clicker App - Activity Lifecycle Implementation

Dessert Clicker App - Activity Lifecycle Implementation

Dessert Clicker App adalah aplikasi Android yang dikembangkan untuk mempelajari Activity Lifecycle dengan Jetpack Compose. Aplikasi ini mengajarkan bagaimana mengelola state aplikasi, menangani perubahan konfigurasi, dan memahami siklus hidup Activity melalui game clicker yang interaktif.

Activity Lifecycle Implementation
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.d(TAG, "onCreate Called")
        
        setContent {
            DessertClickerTheme {
                DessertClickerApp()
            }
        }
    }
    
    override fun onStart() {
        super.onStart()
        Log.d(TAG, "onStart Called")
    }
    
    override fun onResume() {
        super.onResume()
        Log.d(TAG, "onResume Called")
    }
}

🔄 Activity Lifecycle Methods

Setiap method lifecycle diberikan Log.d() untuk tracking perubahan state. onCreate() menginisialisasi UI, onStart() mempersiapkan Activity menjadi visible, dan onResume() membuat Activity siap untuk interaksi user.

State Management dengan rememberSaveable
@Composable
fun DessertClickerApp() {
    var revenue by rememberSaveable { mutableStateOf(0) }
    var dessertsSold by rememberSaveable { mutableStateOf(0) }
    var currentDessertIndex by rememberSaveable { mutableStateOf(0) }
    
    val currentDessertPrice = desserts[currentDessertIndex].price
    val currentDessertImageId = desserts[currentDessertIndex].imageId
    
    DessertClickerScreen(
        revenue = revenue,
        dessertsSold = dessertsSold,
        dessertImageId = currentDessertImageId,
        onDessertClicked = {
            revenue += currentDessertPrice
            dessertsSold++
            currentDessertIndex = determineDessertIndex(dessertsSold)
        }
    )
}

💾 State Preservation

rememberSaveable menyimpan state revenue, dessertsSold, dan currentDessertIndex bahkan ketika terjadi configuration changes seperti screen rotation. Ini memastikan game progress tidak hilang.

Configuration Changes Handling
override fun onPause() {
    super.onPause()
    Log.d(TAG, "onPause Called")
}

override fun onStop() {
    super.onStop()
    Log.d(TAG, "onStop Called")
}

override fun onDestroy() {
    super.onDestroy()
    Log.d(TAG, "onDestroy Called")
}

override fun onRestart() {
    super.onRestart()
    Log.d(TAG, "onRestart Called")
}

📱 Configuration Changes

Method lifecycle ini menangani perubahan konfigurasi seperti screen rotation, multi-window mode, atau ketika aplikasi masuk background. Logging membantu memahami flow lifecycle.

Dessert Click Logic
private fun determineDessertIndex(dessertsSold: Int): Int {
    var dessertIndex = 0
    for (index in desserts.indices) {
        if (dessertsSold >= desserts[index].startProductionAmount) {
            dessertIndex = index
        } else {
            break
        }
    }
    return dessertIndex
}

data class Dessert(
    @DrawableRes val imageId: Int,
    val price: Int,
    val startProductionAmount: Int
)

🍰 Game Logic

determineDessertIndex() menentukan dessert mana yang ditampilkan berdasarkan jumlah penjualan. Setiap dessert memiliki threshold tertentu untuk unlock, membuat game progressif.

Activity Lifecycle States

Lifecycle States

CREATED
STARTED
RESUMED
PAUSED
STOPPED
DESTROYED

Practical Usage

  • onCreate() - Setup UI
  • onStart() - Prepare visibility
  • onResume() - Enable interactions
  • onPause() - Save temporary data
  • onStop() - Release resources
  • onDestroy() - Final cleanup
Fungsi Utama Activity Lifecycle
  • 1. State Management
    Mengelola state aplikasi dengan rememberSaveable untuk mempertahankan data saat configuration changes.
  • 2. Lifecycle Awareness
    Memahami kapan Activity dibuat, dimulai, dijeda, dihentikan, dan dihancurkan untuk optimasi resource.
  • 3. Configuration Handling
    Menangani perubahan konfigurasi seperti screen rotation tanpa kehilangan data atau state user.
Komponen Utama Aplikasi
🍰
Dessert Display

Menampilkan gambar dessert yang berubah berdasarkan progress penjualan

💰
Revenue Counter

Tracking total revenue dari penjualan dessert dengan persistence

📊
Sales Counter

Menghitung jumlah dessert yang terjual untuk unlock dessert baru

🔄
Lifecycle Logging

Monitoring perubahan lifecycle untuk debugging dan learning

Kesimpulan: Dessert Clicker App memberikan pemahaman praktis tentang Activity Lifecycle, state management, dan configuration changes. Aplikasi ini mengajarkan best practices dalam mempertahankan user state dan mengoptimalkan performa aplikasi Android.
Tampilan Aplikasi
Dessert Clicker Initial State
Initial State
Dessert Clicker Progress
Progress State
Dessert Clicker Advanced
Advanced State
Dessert Clicker Final
Final State
Video Demonstrasi
Source Code Repository

📂 Access Source Code

🔗 View on GitHub

Complete source code untuk Dessert Clicker App dengan Activity Lifecycle implementation

Comments

Popular Posts