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 ปัจจุบันจะถูกทำลายและ 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 — จุดเริ่มต้น ถูกเรียกครั้งเดียว ที่นี่การผูกเลย์เอาต์ผ่าน 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 ถูกวางในเลย์เอาต์ของ 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

จะส่งข้อมูลระหว่าง Activities ได้อย่างไร?

ผ่าน Intent — ออบเจ็กต์ที่มี extras (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 ในสแต็กงาน: จาก standard ถึง singleInstance สำหรับหน้าจอที่แยก

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม