onCreate — apa itu, inisialisasi Activity di Android

Penulis: IT Sectr Diterbitkan: 2026-03-03 Waktu membaca: 10 mnt

onCreate — adalah metode pertama dan satu-satunya yang wajib dari siklus hidup Activity dan Fragment di Android. Sistem memanggilnya satu kali saat pembuatan komponen, meneruskan parameter Bundle dengan status yang disimpan sebelumnya. Di dalam onCreate, pengembang menginisialisasi antarmuka pengguna, mengikat elemen View, mengonfigurasi penangan peristiwa, dan memulihkan data dari savedInstanceState. Tanpa implementasi onCreate yang benar, tidak ada aplikasi Android yang dapat dijalankan — ini adalah titik masuk untuk setiap layar. Baca lebih lanjut tentang siklus hidup Activity secara umum di artikel Activity Lifecycle.

Poin utama

  • onCreate — metode pertama dan satu-satunya yang wajib dari siklus hidup; dipanggil satu kali saat pembuatan Activity atau Fragment
  • Parameter Bundle — savedInstanceState berisi data yang disimpan di onSaveInstanceState atau null jika Activity dibuat pertama kali
  • setContentView — panggilan wajib di dalam onCreate untuk Activity; menghubungkan tata letak XML dengan kode
  • Inisialisasi UI — findViewById, konfigurasi adapter RecyclerView, pengaturan pendengar klik — tugas tipikal onCreate
  • Fragment.onCreate — berbeda dari Activity: di sini setContentView tidak dipanggil, tata letak diteruskan melalui onCreateView
  • Batas waktu — onCreate harus selesai dalam 5 detik (ambang ANR), operasi panjang dipindahkan ke utas latar belakang
  • ViewModel dan onCreate — inisialisasi ViewModel di onCreate memungkinkan data bertahan dari rotasi layar tanpa kehilangan

Apa itu onCreate di Android

onCreate — metode panggilan balik (callback) yang dipanggil Android saat membuat instance baru Activity atau Fragment. Ini adalah titik masuk pertama ke kode layar pengguna: sebelum panggilan onCreate, tidak ada kode pengguna yang dieksekusi. Sistem meneruskan parameter Bundle ke metode, yang berisi data yang disimpan sebelumnya (saat pembuatan ulang) atau null (saat pertama kali dijalankan).

Metode onCreate didefinisikan di kelas android.app.Activity dan di kelas androidx.fragment.app.Fragment. Kedua varian melakukan tugas serupa: inisialisasi komponen, konfigurasi UI, dan pemulihan status. Namun, implementasi spesifiknya berbeda — Activity menggunakan setContentView untuk memuat tata letak, sedangkan Fragment mengembalikan View melalui onCreateView. Pengembang wajib menimpa setidaknya onCreate di Activity — tanpa ini, Android tidak dapat menampilkan layar.

onCreate dipanggil secara ketat satu kali selama siklus hidup penuh instance Activity. Bahkan saat rotasi layar, instance Activity baru menerima panggilan onCreate baru dengan Bundle dari instance sebelumnya. Properti ini menjadikan onCreate tempat yang ideal untuk inisialisasi satu kali: memuat data, membuat adapter, mengonfigurasi komponen DI melalui Dagger atau Hilt.

onCreate di Activity

Di Activity, metode onCreate melakukan empat tugas utama: memuat tata letak layout, menginisialisasi elemen View, memulihkan status dari Bundle, dan mengonfigurasi penangan peristiwa utama. Kode minimum wajib di onCreate — panggilan super.onCreate(savedInstanceState) dan setContentView(R.layout.activity_main).

kotlin
class MainActivity : AppCompatActivity() {
    private var binding: ActivityMainBinding? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // ViewBinding — pengganti modern untuk findViewById
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding?.root)

        // Inisialisasi menggunakan binding
        binding?.apply {
            welcomeText.text = getString(R.string.welcome)
            startButton.setOnClickListener { startGame() }
        }

        // Pemulihan status
        if (savedInstanceState != null) {
            score = savedInstanceState.getInt("score", 0)
            binding?.scoreText?.text = score.toString()
        }
    }
}

Praktik modern — menggunakan ViewBinding sebagai pengganti findViewById. ViewBinding menghasilkan kelas ActivityMainBinding pada tahap kompilasi, yang menghilangkan kesalahan dengan ID yang salah dan mengurangi jumlah kode boilerplate. Google merekomendasikan ViewBinding sebagai cara standar untuk mengakses View di Activity dan Fragment mulai Android Studio 3.6.

Urutan tindakan di onCreate harus ketat: pertama super, lalu setContentView, setelah itu semuanya. Memanggil findViewById sebelum setContentView mengembalikan null — tata letak belum dimuat dan elemen View tidak ada dalam hierarki. Ini adalah salah satu kesalahan paling umum dari pengembang Android pemula.

onCreate di Fragment

onCreate di Fragment berbeda dari Activity: di sini setContentView tidak dipanggil, hanya inisialisasi data yang tidak terkait dengan UI yang dilakukan. Fragment membagi pembuatan komponen dan pembuatan View menjadi dua metode terpisah: onCreate (dipanggil satu kali) dan onCreateView (dipanggil setiap kali saat pembuatan atau pembuatan ulang View).

kotlin
class UserListFragment : Fragment() {
    private lateinit var viewModel: UserViewModel
    private var binding: FragmentUserListBinding? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Inisialisasi ViewModel — akan bertahan dari pembuatan ulang View
        viewModel = ViewModelProvider(this)[UserViewModel::class.java]

        // Argumen dari FragmentManager
        arguments?.let {
            viewModel.loadUser(it.getString("user_id") ?: "")
        }

        // Penyimpanan saat rotasi
        retainInstance = true
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = FragmentUserListBinding.inflate(inflater, container, false)
        return binding!!.root
    }
}

Perbedaan utama antara onCreate Activity dan Fragment: onCreate di Fragment tidak boleh berisi kode yang terkait dengan View, karena View dapat dihancurkan dan dibuat ulang (misalnya, saat mengganti tab ViewPager), sementara onCreate hanya dipanggil satu kali. Memuat data, mengonfigurasi ViewModel, dan menginisialisasi adapter — tugas onCreate, sedangkan mengikat View — tugas onViewCreated.

savedInstanceState dan pemulihan status

Parameter savedInstanceState di onCreate — adalah mekanisme untuk menyimpan dan memulihkan status sementara Activity atau Fragment. Saat sistem menghancurkan Activity (rotasi layar, kekurangan memori), sistem memanggil onSaveInstanceState(), di mana pengembang menempatkan pasangan kunci-nilai di Bundle. Saat membuat instance baru, Bundle ini dikembalikan di onCreate.

Bundle mendukung tipe data berikut: String, Integer, Boolean, Long, Float, Double, array-nya, serta objek Parcelable dan Serializable. Untuk objek kompleks, digunakan Parcelable — mekanisme serialisasi yang lebih efisien, khusus untuk Android. Ukuran Bundle dibatasi sekitar 500 KB — melampaui batas menyebabkan pengecualian TransactionTooLargeException.

kotlin
companion object {
    private const val KEY_USER_NAME = "user_name"
    private const val KEY_SCORE = "score"
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_game)

    if (savedInstanceState != null) {
        userName = savedInstanceState.getString(KEY_USER_NAME) ?: ""
        currentScore = savedInstanceState.getInt(KEY_SCORE)
    }
}

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString(KEY_USER_NAME, userName)
    outState.putInt(KEY_SCORE, currentScore)
}

Penting untuk dipahami: onSaveInstanceState tidak dipanggil saat pengguna menutup Activity secara eksplisit melalui finish() atau menekan tombol “Kembali”. Sistem menganggap bahwa dalam kasus ini pengguna secara sadar mengakhiri pekerjaan dan menyimpan status tidak diperlukan. Oleh karena itu, tidak boleh hanya mengandalkan savedInstanceState untuk penyimpanan data jangka panjang — gunakan Room, DataStore, atau SharedPreferences.

Waktu dan batasan onCreate

onCreate dijalankan di utas utama (UI) dan sistem menunggu penyelesaiannya sebelum menampilkan Activity di layar. Jika onCreate berlangsung lebih dari 5 detik, sistem menampilkan dialog ANR (Application Not Responding) dan menyarankan pengguna untuk menutup aplikasi. Operasi panjang seperti memuat data dari jaringan atau membaca dari database harus dipindahkan ke utas latar belakang.

Menurut rekomendasi Google Android Performance (2025), onCreate harus selesai dalam kurang dari 1 detik pada perangkat segmen menengah. Untuk ini, Anda harus: menggunakan inisialisasi malas (delegasi lazy di Kotlin), menunda pemuatan data berat ke onResume atau melalui coroutine, menerapkan ViewStub untuk komponen UI yang jarang digunakan, memprofilkan waktu mulai melalui Android Vitals.

kotlin
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // Inisialisasi malas — objek dibuat hanya saat akses pertama
    val heavyData by lazy {
        HeavyDataLoader.load()
    }

    // Memuat data di utas latar belakang melalui lifecycleScope
    lifecycleScope.launch(Dispatchers.IO) {
        val users = userDao.getAllUsers()
        withContext(Dispatchers.Main) {
            adapter.submitList(users)
        }
    }
}

Alat profiling: Android Studio Profiler (tab CPU) menunjukkan waktu eksekusi yang tepat dari setiap metode. Di Android Vitals (konsol Google Play), Anda dapat melacak metrik “Waktu mulai dingin” — jika onCreate Activity Anda melebihi 500 ms, konsol menandainya sebagai masalah kinerja. Kami di IT Sectr menggunakan pengujian Macrobenchmark untuk kontrol otomatis waktu mulai setiap Activity di pipeline CI.

ViewModel dan onCreate

ViewModel — cara terbaik untuk menginisialisasi data di onCreate yang harus bertahan dari rotasi layar. ViewModel dibuat di onCreate melalui ViewModelProvider dan secara otomatis disimpan saat perubahan konfigurasi. Saat Activity dibuat ulang setelah rotasi, ViewModel tetap di memori dan onCreate menerima ViewModel yang sama tanpa kehilangan data.

kotlin
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_profile)

    // ViewModel dibuat satu kali dan bertahan dari perubahan konfigurasi
    val viewModel: ProfileViewModel =
        ViewModelProvider(this)[ProfileViewModel::class.java]

    // Observasi LiveData — UI otomatis diperbarui saat data berubah
    viewModel.user.observe(this) { user ->
        binding?.userName?.text = user.name
        binding?.userEmail?.text = user.email
    }

    // Memuat data jika ViewModel baru saja dibuat
    if (savedInstanceState == null) {
        viewModel.loadProfile(userId)
    }
}

Kombinasi ViewModel + LiveData/StateFlow memecahkan masalah rotasi layar tanpa penyimpanan manual di Bundle. ViewModel menyimpan data di memori, LiveData secara otomatis berlangganan ulang Activity saat pembuatan ulang, dan StateFlow (dari Kotlin Coroutines) menambahkan reaktivitas dengan dukungan coroutine. Ini adalah arsitektur standar yang direkomendasikan oleh Google dalam panduan Guide to App Architecture.

Kesalahan umum saat bekerja dengan onCreate

Bahkan pengembang berpengalaman pun membuat kesalahan tipikal di onCreate. Mari kita lihat lima masalah paling umum dan cara menghindarinya.

Bekerja dengan View sebelum setContentView

Kesalahan paling umum — mencoba menemukan View melalui findViewById sebelum panggilan setContentView. Semua elemen View dibuat saat inflasi tata letak, sehingga setiap referensi ke findViewById sebelum setContentView mengembalikan null dan menyebabkan NullPointerException saat mencoba menggunakan View. Solusi: urutan ketat — pertama super, lalu setContentView, setelah itu findViewById atau ViewBinding.

Memblokir utas UI dengan operasi panjang

Memuat data dari jaringan, membaca dari database, atau memproses array besar langsung di onCreate memblokir render frame pertama. Pengguna melihat layar hitam sampai onCreate selesai, yang memperburuk persepsi kecepatan aplikasi. Solusi: gunakan lifecycleScope.launch untuk operasi asinkron, tampilkan kerangka (placeholder UI) hingga pemuatan selesai.

Mengabaikan savedInstanceState

Jika saat rotasi layar status tidak dipulihkan dari Bundle, pengguna kehilangan semua input yang belum disimpan: teks di bidang formulir, posisi gulir, elemen yang dipilih. Solusi: selalu periksa savedInstanceState != null di onCreate untuk memulihkan data, bahkan jika kehilangan status tampaknya tidak mungkin.

Kebocoran memori melalui kelas anonim

Kelas anonim dan lambda di onCreate dapat secara implisit menahan referensi ke Activity setelah dihancurkan. Misalnya, Handler yang dibuat di onCreate terus menjalankan tugas yang ditunda bahkan setelah Activity dihancurkan. Solusi: gunakan LifecycleObserver, ViewModel, dan lifecycleScope, yang secara otomatis membatalkan tugas saat penghancuran.

Inisialisasi berlebihan di onCreate Fragment

Inisialisasi View di onCreate Fragment — kesalahan logis, karena View dapat dibuat ulang tanpa panggilan onCreate. Jika pendengar diatur di onCreate dan View diikat di onCreateView, saat pembuatan ulang pendengar tetap di View lama. Solusi: semua pekerjaan dengan View dilakukan di onViewCreated, dan onCreate hanya untuk inisialisasi lapisan data.

Pertanyaan yang sering diajukan

Apakah menimpa onCreate di Activity wajib?

Ya, menimpa onCreate wajib untuk setiap Activity yang menampilkan antarmuka pengguna. Tanpa ini, tidak mungkin memanggil setContentView dan memuat tata letak XML. Jika Activity tidak memiliki UI (misalnya, Activity-stub transparan), onCreate tetap ditimpa, tetapi tanpa memanggil setContentView.

Bisakah onCreate dipanggil lagi tanpa menghancurkan Activity?

Tidak, onCreate tidak dapat dipanggil lagi untuk instance Activity yang sama. Jika Activity dihancurkan dan dibuat ulang (rotasi layar, kekurangan memori), ini adalah instance baru dengan panggilan onCreate baru. Pengecualian — metode recreate(), yang memaksa menghancurkan dan membuat ulang Activity, tetapi ini juga pembuatan instance baru.

Apa yang terjadi jika super.onCreate tidak dipanggil?

Jika super.onCreate(savedInstanceState) tidak dipanggil, Android Runtime akan melempar pengecualian SuperNotCalledException dan aplikasi akan crash. Sistem secara ketat mensyaratkan bahwa setiap metode siklus hidup yang ditimpa memanggil versi super-nya — ini menjamin pengoperasian mesin status internal yang benar.

Apa perbedaan onCreate di Activity dengan onCreate di Fragment?

Perbedaan utama: onCreate di Activity memuat UI melalui setContentView, sedangkan onCreate di Fragment hanya menginisialisasi data. Fragment membuat View di metode terpisah onCreateView, yang dapat dipanggil beberapa kali (misalnya, saat mengganti tab), sementara onCreate Fragment dipanggil satu kali selama masa pakai instance Fragment.

Bagaimana cara mentransfer data dari onCreate ke metode lain?

Data yang diinisialisasi di onCreate disimpan di bidang kelas Activity atau Fragment. Misalnya, private lateinit var binding: ActivityMainBinding dideklarasikan di tingkat kelas, diinisialisasi di onCreate, dan dapat diakses di semua metode berikutnya. Untuk data yang bertahan dari rotasi layar, gunakan ViewModel dengan LiveData atau StateFlow.

Ringkasan

  • onCreate — metode siklus hidup wajib, dipanggil satu kali saat pembuatan Activity atau Fragment
  • setContentView — panggilan wajib untuk Activity, memuat tata letak XML; untuk Fragment tata letak dimuat melalui onCreateView
  • savedInstanceState — Bundle dengan status yang disimpan saat pembuatan ulang; null saat pertama kali dijalankan
  • Batas waktu — onCreate harus selesai dalam waktu kurang dari 1 detik, operasi panjang dipindahkan ke coroutine
  • ViewModel — inisialisasi ViewModel di onCreate memecahkan masalah kehilangan data saat rotasi layar
  • Fragment vs Activity — onCreate Fragment tidak berisi kode UI, onCreate Activity memuat tata letak melalui setContentView
  • Lima kesalahan tipikal — bekerja dengan View sebelum setContentView, memblokir UI, mengabaikan Bundle, kebocoran memori, kode UI di Fragment.onCreate

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga