Activity — pangunahing component ng Android app na kumakatawan sa isang screen na may user interface. Pinamamahalaan ng system ang mga screen sa pamamagitan ng mahigpit na lifecycle — mga callback na onCreate, onResume at onDestroy. Bawat Activity ay idineklara sa AndroidManifest.xml at inilulunsad sa pamamagitan ng Intent. Magbasa pa tungkol sa kasaysayan ng Android sa opisyal na dokumentasyon ng Google.
Mga pangunahing punto
Activity — pangunahing component ng Android app na nagbibigay ng window para sa pakikipag-ugnayan sa user. Bawat Activity ay namamahala ng hiwalay na screen: listahan ng gawain, form ng pag-login, pagtingin ng larawan. Gumagawa ang Android system ng Activity kapag hiniling at sinisira ito kapag kailangan ang memory para sa ibang mga app.
Unang lumitaw ang Activity sa Android 1.0 (2008) at nananatiling pangunahing bloke ng gusali ng interface. Ayon sa Google (2026), 98% ng mga app sa Google Play ay naglalaman ng kahit isang Activity. Sa modernong arkitektura, inirerekomenda ng Google ang isang Activity na may maraming Fragment, ngunit ang klasikong multi-screen na app ay nananatiling karaniwang kasanayan.
Activity stack (back stack) — stack ng mga gawain na nag-iimbak ng kasaysayan ng nabigasyon. Kapag pinindot ng user ang „Bumalik“, ang kasalukuyang Activity ay sinisira at ang nauna ay naibabalik. Awtomatikong pinamamahalaan ng system ang stack, ngunit makokontrol ng developer ang pag-uugali sa pamamagitan ng launchMode at mga flag ng Intent.
Ang lifecycle ng Activity — ang hanay ng mga estado at callback na dinadaanan ng screen mula sa paglikha hanggang sa pagkasira. Ang pag-unawa sa Lifecycle ay kritikal: ang maling pagtatrabaho sa mga estado ay humahantong sa pagtagas ng memory, pagkawala ng data, at pag-crash ng app.
Tinatawag ng Android system ang mga callback sa mahigpit na pagkakasunud-sunod. Ang developer ay nag-o-override ng mga kinakailangang pamamaraan upang magpasimula ng mga mapagkukunan, mag-save ng data, at magpakawala ng memory. Bawat callback ay may katapat: onCreate ↔ onDestroy, onStart ↔ onStop, onResume ↔ onPause.
| Callback | Layunin | Aksyon ng developer |
|---|---|---|
| onCreate | Tinatawag kapag ginawa ang Activity | Pagsisimula ng UI, pag-subscribe sa ViewModel |
| onStart | Nagiging nakikita ang Activity | Pagsisimula ng mga animation, camera, GPS |
| onResume | Nakukuha ng Activity ang focus ng input | Pagpapatuloy ng video, timer |
| onPause | Nawawalan ng focus ang Activity | Pag-save ng mga draft, paghinto ng animation |
| onStop | Nakatago ang Activity ng ibang screen | Pagpapakawala ng mabibigat na mapagkukunan |
| onDestroy | Sinisira ang Activity | Paglilinis ng mga subscription, Closeable |
Apat na estado ng Activity ang nakikilala: Running (aktibo ang onResume), Paused (nakikita ngunit walang focus), Stopped (hindi nakikita), Destroyed (nawasak). Maaaring patayin ng system ang Activity sa estadong Stopped kapag kulang ang memory — dapat i-save ang data sa onSaveInstanceState.
Tingnan natin ang tatlong pangunahing pamamaraan ng lifecycle ng Activity na may halimbawa sa Kotlin. onCreate — entry point, tinatawag nang isang beses. Dito nagaganap ang pagbubuklod ng layout sa pamamagitan ng setContentView, pagsisimula ng RecyclerView, pag-subscribe sa LiveData. onStart — nagiging nakikita ang Activity para sa user. onResume — nakukuha ng Activity ang focus at handa nang makipag-ugnayan.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val recyclerView = findViewById<RecyclerView>(R.id.rv_items)
recyclerView.layoutManager = LinearLayoutManager(this)
loadItems()
}
override fun onStart() {
super.onStart()
startLocationUpdates()
}
override fun onResume() {
super.onResume()
resumeVideoPlayer()
}
}Sa halimbawa, sinisimulan ng onCreate ang RecyclerView at naglo-load ng data. Sinisimulan ng onStart ang pag-update ng geolocation — isang mapagkukunan na dapat gumana lamang kapag nakikita ang screen. Ipinagpapatuloy ng onResume ang video na huminto sa onPause. Ang ganitong paghihiwalay ay pumipigil sa hindi kinakailangang trabaho sa background.
Bawat Activity ay dapat ideklara sa file na AndroidManifest.xml. Kung walang pagpaparehistro, hindi mahahanap ng system ang screen at magtatapon ng exception na ActivityNotFoundException. Sa manifest ay tinutukoy ang pangalan ng klase, tema, oryentasyon, launchMode at mga filter ng Intent.
<application
android:allowBackup="true"
android:label="@string/app_name"
android:theme="@style/Theme.MyApp">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".DetailActivity"
android:parentActivityName=".MainActivity" />
</application>Ang flag na exported ay tumutukoy kung maaaring ilunsad ng ibang mga app ang Activity. Para sa pangunahing screen exported=true, para sa mga panloob na screen — false. Ang attribute na parentActivityName ay nagpapagana ng karaniwang nabigasyong „Paakyat“ (Up Navigation).
Intent — isang bagay na naglalarawan ng aksyon na gagawin. Sa konteksto ng Activity, ginagamit ang Intent upang ilunsad ang ibang screen na may paglipat ng data. Ang Intent ay maaaring tahasan (tumuturo sa isang tiyak na klase) at hindi tahasan (tumuturo sa isang aksyon, pipili ang system ng angkop na component).
// Tahasang Intent — paglulunsad ng DetailActivity na may data
val intent = Intent(this, DetailActivity::class.java).apply {
putExtra("item_id", itemId)
putExtra("item_name", itemName)
}
startActivity(intent)
// Pagtanggap ng data sa DetailActivity
val itemId = intent.getLongExtra("item_id", 0L)
val itemName = intent.getStringExtra("item_name") ?: ""Para makatanggap ng resulta mula sa inilunsad na Activity, ginagamit ang Activity Result API, na pumalit sa lumang startActivityForResult. Ang bagong API ay type-safe, deklaratif, at gumagana sa Jetpack Compose.
private val getResult = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val data = result.data?.getStringExtra("result_key")
}
}
fun openPicker() {
val intent = Intent(this, PickerActivity::class.java)
getResult.launch(intent)
}Sa pag-ikot ng screen o pagbabago ng configuration, muling ginagawa ng Android ang Activity — sunud-sunod na tinatawag ang onDestroy at onCreate. Kung hindi nai-save ang estado, nawawala ng user ang mga inilagay na data, posisyon ng scroll, at mga napiling elemento. Upang malutas ang problemang ito, nagbibigay ang Android ng dalawang mekanismo: onSaveInstanceState at ViewModel.
Nagse-save ang onSaveInstanceState ng simpleng data sa Bundle bago tawagin ang onDestroy. Ang ViewModel mula sa Jetpack ay lumalaban sa muling paggawa ng Activity at nag-iimbak ng data sa memory, na mas mahusay para sa mga kumplikadong bagay at mga kahilingan sa network.
class MainActivity : AppCompatActivity() {
private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Awtomatikong nagse-save ng data ang ViewModel
viewModel.items.observe(this) { items ->
updateAdapter(items)
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt("scroll_position", recyclerView.computeVerticalScrollOffset())
}
}Ang modernong diskarte ng Google — arkitekturang Single Activity na may isang Activity at maraming Fragment. Gumagamit ang app ng isang MainActivity, at ang buong nabigasyon ay ginagawa ng Navigation Component sa pamamagitan ng NavHostFragment. Mga bentahe: sentralisadong nabigasyon, nakabahaging ViewModel bawat screen, tamang pagtatrabaho sa Deep Links.
Ina-automate ng Jetpack Navigation Component ang pagtatrabaho sa back stack, mga animation ng paglipat at pagpapadala ng argumento. Ang NavHostFragment ay inilalagay sa layout ng Activity, at ang graph ng nabigasyon (NavGraph) ay naglalarawan ng lahat ng screen at mga koneksyon sa pagitan ng mga ito. Ang diskarteng ito ay inirerekomenda ng Google para sa mga bagong proyekto at naaayon sa mga prinsipyo ng Material Design.
class MainActivity : AppCompatActivity() {
private val navController by lazy {
findViewById<NavHostFragment>(R.id.nav_host_fragment)
.navController
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Configuration ng NavigationUI para sa AppBar
setupActionBarWithNavController(navController)
}
override fun onSupportNavigateUp() =
navController.navigateUp() || super.onSupportNavigateUp()
}Mga madalas itanong
Activity — isang buong screen ng app na may sariling lifecycle. Fragment — bahagi ng UI sa loob ng Activity na lumalaban sa muling paggawa ng Activity at nakadepende sa Lifecycle nito. Ang Activity ay sapilitan, ang Fragment ay opsyonal.
Walang limitasyon. Bawat screen ay karaniwang kumakatawan sa isang hiwalay na Activity. Para sa simpleng app, sapat na ang isa, para sa multi-screen — mula 5 hanggang 20. Inirerekomenda ng Google ang isang Activity na may maraming Fragment.
launchMode ay tumutukoy kung paano ginagawa ang Activity sa stack ng gawain. Apat na mode: standard (ginagawa ang bagong instance), singleTop, singleTask (isang instance sa gawain) at singleInstance (nakahiwalay na gawain). Ang mode ay itinakda sa AndroidManifest.xml.
Sa pamamagitan ng Intent — isang bagay na may mga extra (putExtra) kung saan inilalagay ang mga primitive, string, Parcelable o Serializable. Para sa feedback, ginagamit ang Activity Result API — ang modernong type-safe na kapalit ng startActivityForResult.
Configuration Change — muling paggawa ng Activity sa pagbabago ng configuration (pag-ikot ng screen, pagbabago ng wika, keyboard). Tinatawag ng system ang onDestroy → onCreate. Para sa pag-save ng data, ginagamit ang onSaveInstanceState o ViewModel mula sa Jetpack.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din