Activity — шта је то, екран апликације у Android-у и његов Lifecycle

Аутор: IT Sectr Објављено: 2026-02-22 Време читања: 7 мин

Activity — основни компонент Android апликације, који представља један екран са корисничким интерфејсом. Систем управља екранима кроз строги животни циклус — колбеке onCreate, onResume и onDestroy. Свако Activity се декларише у AndroidManifest.xml и покреће путем Intent-а. Више о историји Android-а прочитајте у званичној Google документацији.

Главно

  • Activity — Android компонент који представља један екран са UI. Управља се кроз Lifecycle
  • Животни циклус укључује 6 колбека: onCreate, onStart, onResume, onPause, onStop, onDestroy
  • Intent — механизам за покретање Activity и пренос података између екрана
  • Manifest — обавезна регистрација сваког Activity у AndroidManifest.xml
  • ViewModel — Jetpack компонента за чување података при поновном креирању Activity

Шта је Activity?

Activity — кључни компонент Android апликације, који обезбеђује прозор за интеракцију са корисником. Свако Activity управља засебним екраном: листа задатака, форма за пријаву, преглед фотографије. Android систем креира Activity на захтев и уништава га када је меморија потребна другим апликацијама.

Activity се први пут појавило у Android 1.0 (2008) и остаје главни градивни блок интерфејса. Према Google-у (2026), 98% апликација у Google Play-ју садржи бар једно Activity. У модерној архитектури Google препоручује једно Activity са више Fragment, али класична вишеекранска апликација остаје уобичајена пракса.

Activity stack (back stack) — стек задатака који чува историју прелаза. Када корисник притисне „Назад“, тренутно Activity се уништава, а претходно се обнавља. Систем управља стеком аутоматски, али програмер може контролисати понашање путем launchMode и заставица Intent-а.

Животни циклус Activity

Животни циклус Activity — скуп стања и колбека кроз које екран пролази од креирања до уништења. Разумевање Lifecycle-а је критично: неправилан рад са стањима доводи до цурења меморије, губитка података и пада апликације.

Android систем позива колбеке у строгом редоследу. Програмер преписује потребне методе да би иницијализовао ресурсе, чувао податке и ослобађао меморију. Сваком колбеку одговара пар: onCreate ↔ onDestroy, onStart ↔ onStop, onResume ↔ onPause.

КолбекНаменаАкција програмера
onCreateПозива се при креирању ActivityИницијализација UI, претплата на ViewModel
onStartActivity постаје видљивоПокретање анимација, камере, GPS-а
onResumeActivity добија фокус уносаНаставак видеа, тајмера
onPauseActivity губи фокусЧување нацрта, заустављање анимација
onStopActivity сакривено другим екраномОслобађање тешких ресурса
onDestroyActivity се уништаваЧишћење претплата, Closeable

Стања Activity

Разликују се четири стања Activity: Running (onResume активан), Paused (видљиво, али без фокуса), Stopped (невидљиво), Destroyed (уништено). Систем може убити Activity у стању Stopped при недостатку меморије — податке треба сачувати у onSaveInstanceState.

Методе животног циклуса: onCreate, onStart, onResume

Размотримо три кључне методе животног циклуса Activity са примером у Kotlin-у. onCreate — улазна тачка, позива се једном. Овде се врши повезивање layout-а кроз setContentView, иницијализација RecyclerView-а, претплата на LiveData. onStart — Activity постаје видљиво кориснику. onResume — Activity добија фокус и спремно је за интеракцију.

kotlin
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()
    }
}

У примеру onCreate иницијализује RecyclerView и учитава податке. onStart покреће ажурирање геолокације — ресурс који треба да ради само када је екран видљив. onResume наставља видео заустављен у onPause. Такво раздвајање спречава непотребан рад у позадини.

Декларисање Activity у AndroidManifest.xml

Свако Activity мора бити декларисано у датотеци AndroidManifest.xml. Без регистрације систем неће пронаћи екран и бациће изузетак ActivityNotFoundException. У манифесту се наводе име класе, тема, оријентација, launchMode и филтери Intent-а.

xml
<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>

Заставица exported одређује да ли друге апликације могу покренути Activity. За главни екран exported=true, за унутрашње екране — false. Атрибут parentActivityName укључује стандардну навигацију „Горе“ (Up Navigation).

Покретање Activity путем Intent-а

Intent — објекат који описује радњу коју треба извршити. У контексту Activity, Intent се користи за покретање другог екрана са преносом података. Intent може бити експлицитан (указује на одређену класу) и имплицитан (указује на радњу, систем бира одговарајући компонент).

kotlin
// Експлицитни Intent — покретање DetailActivity са подацима
val intent = Intent(this, DetailActivity::class.java).apply {
    putExtra("item_id", itemId)
    putExtra("item_name", itemName)
}
startActivity(intent)

// Примање података у DetailActivity
val itemId = intent.getLongExtra("item_id", 0L)
val itemName = intent.getStringExtra("item_name") ?: ""

За примање резултата од покренутог Activity користи се Activity Result API, који је заменио застарели startActivityForResult. Нови API је типски безбедан, декларативан и ради са Jetpack Compose.

kotlin
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)
}

Чување стања при поновном креирању

При ротацији екрана или промени конфигурације Android поново креира Activity — секвенцијално позива onDestroy и onCreate. Без чувања стања корисник губи унете податке, позицију скроловања и изабране елементе. За решавање овог проблема Android пружа два механизма: onSaveInstanceState и ViewModel.

onSaveInstanceState чува једноставне податке у Bundle пре позива onDestroy. ViewModel из Jetpack-а подноси поновно креирање Activity и чува податке у меморији, што је ефикасније за сложене објекте и мрежне захтеве.

kotlin
class MainActivity : AppCompatActivity() {

    private val viewModel: MainViewModel by viewModels()

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

        // ViewModel аутоматски чува податке
        viewModel.items.observe(this) { items ->
            updateAdapter(items)
        }
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putInt("scroll_position", recyclerView.computeVerticalScrollOffset())
    }
}

Архитектура Single Activity и Jetpack

Модерни приступ Google-а — Single Activity архитектура са једним Activity и више Fragment. Апликација користи једно MainActivity, а сву навигацију обавља Navigation Component кроз NavHostFragment. Предности: централизована навигација, заједнички ViewModel по екрану, исправан рад са Deep Links.

Jetpack Navigation Component аутоматизује рад са back stack, анимације прелаза и пренос аргумената. NavHostFragment се поставља у layout Activity, а граф навигације (NavGraph) описује све екране и везе између њих. Овај приступ препоручује Google за нове пројекте и у складу је са принципима Material Design-а.

kotlin
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)

        // Подешавање NavigationUI за AppBar
        setupActionBarWithNavController(navController)
    }

    override fun onSupportNavigateUp() = 
        navController.navigateUp() || super.onSupportNavigateUp()
}

Често постављана питања

По чему се Activity разликује од Fragment-а?

Activity — пуноправни екран апликације са сопственим животним циклусом. Fragment — део UI-ја унутар Activity, који преживљава поновно креирање Activity и зависи од његовог Lifecycle-а. Activity је обавезан, Fragment опционалан.

Колико Activity може бити у једној апликацији?

Нема ограничења. Сваки екран обично представља засебно Activity. За једноставну апликацију довољно је једно, за вишеекранске — од 5 до 20. Google препоручује једно Activity са више Fragment.

Шта је launchMode у Activity?

launchMode одређује како се Activity креира у стеку задатака. Четири режима: standard (креира се нова инстанца), singleTop, singleTask (једна инстанца у задатку) и singleInstance (изоловани задатак). Режим се поставља у AndroidManifest.xml.

Како пренети податке између Activity?

Путем Intent-а — објекта са екстрама (putExtra) у које се смештају примитиви, стрингови, Parcelable или Serializable. За повратну везу користи се Activity Result API — савремена типски безбедна замена за startActivityForResult.

Шта је Configuration Change у Android-у?

Configuration Change — поновно креирање Activity при промени конфигурације (ротација екрана, промена језика, тастатура). Систем позива onDestroy → onCreate. За чување података користи се onSaveInstanceState или ViewModel из Jetpack-а.

Закључци

  • Activity — основни Android компонент који представља један екран са корисничким интерфејсом и управља се кроз животни циклус
  • Животни циклус се састоји од шест колбека: onCreate, onStart, onResume, onPause, onStop, onDestroy — сваки има строгу намену
  • Intent обезбеђује покретање Activity и пренос података између екрана кроз експлицитне и имплицитне позиве
  • AndroidManifest.xml захтева обавезну регистрацију сваког Activity са навођењем имена, теме, оријентације и филтера
  • ViewModel из Jetpack-а чува податке при поновном креирању Activity, замењујући ручно чување у onSaveInstanceState
  • Single Activity архитектура са Navigation Component — модерни стандард који Google препоручује за Android пројекте
  • launchMode управља понашањем Activity у стеку задатака: од стандардног до singleInstance за изоловане екране

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође