บทแนะนำเกี่ยวกับกิจกรรม

คลาส Activity เป็นองค์ประกอบสำคัญของ Android และแนวทางการเปิดตัวและรวบรวมกิจกรรมนั้นเป็นพื้นฐาน ของโมเดลแอปพลิเคชันของแพลตฟอร์ม แตกต่างจากกระบวนทัศน์การเขียนโปรแกรมใน แอปที่มีการเปิดใช้งานด้วยเมธอด main(), Android ระบบจะเริ่มต้นโค้ดในอินสแตนซ์ Activity โดย เรียกใช้เมธอด Callback เฉพาะที่สอดคล้องกับขั้นตอนเฉพาะของ ตลอดอายุการใช้งาน

เอกสารนี้จะกล่าวถึงแนวคิดของกิจกรรม แล้วจึงนำเสนอ คำแนะนำเล็กน้อยเกี่ยวกับวิธีทำงานร่วมกับพวกเขา หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับ แนวทางปฏิบัติแนะนำในสถาปัตยกรรมแอป ดู คู่มือสำหรับสถาปัตยกรรมแอป

แนวคิดของกิจกรรม

ประสบการณ์แอปบนอุปกรณ์เคลื่อนที่แตกต่างจากเวอร์ชันเดสก์ท็อป การโต้ตอบของผู้ใช้กับแอปไม่ได้เริ่มต้นจากที่เดิมเสมอไป แต่เส้นทางของผู้ใช้มักจะเริ่มต้นโดยไม่มีการกำหนดทิศทาง ตัวอย่างเช่น ถ้าคุณเปิดแอปอีเมลจากหน้าจอหลัก คุณอาจเห็น รายการอีเมล ในทางตรงกันข้าม หากคุณใช้แอปโซเชียลมีเดีย คุณเปิดแอปอีเมล คุณสามารถไปที่หน้าจอแอปอีเมลโดยตรงเพื่อ การเขียนอีเมล

ชั้นเรียน Activity ได้รับการออกแบบมาเพื่อส่งเสริมแนวคิดนี้ เมื่อแอปหนึ่งเรียกอีกแอปหนึ่ง แอปการโทรจะเรียกใช้กิจกรรมในอีกแอป แอป แทนที่จะเป็นตัวแอปโดยรวมตัวเล็กๆ ในลักษณะนี้ กิจกรรมจะทำหน้าที่เป็น จุดแรกเข้าสำหรับการโต้ตอบของแอปกับผู้ใช้ คุณใช้ กิจกรรมเป็นคลาสย่อยของคลาส Activity

กิจกรรมจะแสดงหน้าต่างที่แอปวาด UI โดยปกติหน้าต่างนี้จะแสดงเต็มหน้าจอ แต่อาจเล็กกว่า และลอยอยู่เหนือหน้าต่างอื่นๆ โดยทั่วไป กิจกรรมเดียว ใช้หน้าจอเดียวในแอป ตัวอย่างเช่น หนึ่งในกิจกรรมของแอปพลิเคชันอาจ ใช้หน้าจอค่ากำหนด ขณะที่กิจกรรมอื่นใช้ หน้าจอเลือกรูปภาพ

แอปส่วนใหญ่มีหลายหน้าจอ ซึ่งหมายความว่าแอปจะประกอบด้วยหลายหน้าจอ กิจกรรม โดยปกติแล้ว กิจกรรมหนึ่งในแอปจะถูกระบุเป็นกิจกรรมหลัก กิจกรรม ซึ่งเป็นหน้าจอแรกที่จะปรากฏเมื่อผู้ใช้เปิดแอป แต่ละกิจกรรมสามารถเริ่มกิจกรรมอื่นได้เพื่อ ดำเนินการต่างๆ เช่น กิจกรรมหลักในอีเมลง่ายๆ อาจมีหน้าจอที่แสดงกล่องจดหมายของอีเมล จากนั้น หน่วยโฆษณาหลัก กิจกรรมอาจเรียกใช้กิจกรรมอื่นๆ ที่ระบุหน้าจอสำหรับงานต่างๆ เช่น เขียนอีเมลและเปิดอีเมลแต่ละฉบับ

แม้ว่ากิจกรรมต่างๆ จะทำงานร่วมกันเพื่อสร้างประสบการณ์ของผู้ใช้ที่สอดคล้องกันใน แต่ละกิจกรรมจะเชื่อมโยงกับกิจกรรมอื่นอย่างหลวมๆ เท่านั้น เรามี มักมีทรัพยากร Dependency น้อยที่สุดในกิจกรรมต่างๆ ในแอป ในความเป็นจริงแล้ว กิจกรรมมักเริ่มต้นกิจกรรมที่เป็นของแอปอื่นๆ ตัวอย่างเช่น แอปเบราว์เซอร์อาจเปิดกิจกรรม "แชร์" ของแอปโซเชียลมีเดีย

หากต้องการใช้กิจกรรมในแอป คุณต้องลงทะเบียนข้อมูลเกี่ยวกับกิจกรรมเหล่านั้นใน ไฟล์ Manifest ของแอป และคุณต้องจัดการวงจรกิจกรรมอย่างเหมาะสม ส่วนที่เหลือของเอกสารนี้จะแนะนำหัวข้อดังกล่าว

กำลังกำหนดค่าไฟล์ Manifest

คุณต้องประกาศกิจกรรม เพื่อให้แอปใช้กิจกรรมได้ และแอตทริบิวต์บางรายการไว้ในไฟล์ Manifest

ประกาศกิจกรรม

หากต้องการประกาศกิจกรรม ให้เปิดไฟล์ Manifest แล้วเพิ่ม <กิจกรรม> ในฐานะองค์ประกอบย่อยของ <แอปพลิเคชัน> เช่น

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

แอตทริบิวต์เดียวที่จำเป็นสำหรับองค์ประกอบนี้คือ android:name ซึ่งระบุชื่อคลาสของกิจกรรม คุณยังเพิ่มแอตทริบิวต์ต่างๆ ได้ด้วย ที่กำหนดลักษณะของกิจกรรม เช่น ป้ายกำกับ ไอคอน หรือธีม UI สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์เหล่านี้และแอตทริบิวต์อื่นๆ ให้ดูที่ <กิจกรรม> เอกสารอ้างอิงองค์ประกอบ

หมายเหตุ: หลังจากเผยแพร่แอปแล้ว คุณไม่ควรเปลี่ยนกิจกรรม เพราะอาจทำให้ฟังก์ชันบางอย่างเสียหาย เช่น ทางลัดของแอป ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงที่ควรหลีกเลี่ยงหลังจากเผยแพร่ได้ที่ สิ่งที่เปลี่ยนแปลงไม่ได้

ประกาศตัวกรอง Intent

ตัวกรอง Intent เป็นฟีเจอร์ที่ทรงพลังมากของแพลตฟอร์ม Android โฆษณาเหล่านี้ ให้ความสามารถในการเปิดตัวกิจกรรม ไม่เพียงแต่ คำขอที่ชัดแจ้ง แต่รวมถึงคำขอโดยนัยด้วย ตัวอย่างเช่น คำขอที่ชัดแจ้งอาจแจ้งให้ระบบ "เริ่มกิจกรรมการส่งอีเมล" ในแอป Gmail" ในทางตรงกันข้าม คำขอโดยนัยจะบอก เพื่อ “เริ่มต้นหน้าจอส่งอีเมลใน ที่ทำหน้าที่นี้นั้นได้" เมื่อ UI ของระบบถามผู้ใช้ว่าจะใช้แอปใด นั่นคือตัวกรองความตั้งใจในที่ทำงาน

คุณสามารถใช้ประโยชน์จากฟีเจอร์นี้ได้โดยประกาศ <intent-filter> ใน <activity> คำจำกัดความขององค์ประกอบนี้รวมถึง <action> และ (ไม่บังคับ) <หมวดหมู่> องค์ประกอบ และ/หรือ <data> องค์ประกอบเหล่านี้ รวมเพื่อระบุประเภทของความตั้งใจที่กิจกรรมของคุณสามารถตอบสนองได้ สำหรับ เช่น ข้อมูลโค้ดต่อไปนี้แสดงวิธีกำหนดค่ากิจกรรมที่ ส่งข้อมูลข้อความ และได้รับคำขอจากกิจกรรมอื่นเพื่อดำเนินการดังกล่าว:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

ด้วยวิธีนี้ ตัวอย่างเช่น <action> จะระบุว่ากิจกรรมนี้ส่งข้อมูล การประกาศ<category> ของเอลิเมนต์เป็น DEFAULT เปิดใช้กิจกรรม เพื่อรับคำขอเปิดใช้งาน ฟังก์ชัน <data> จะระบุประเภทข้อมูลที่ กิจกรรมนี้สามารถส่งได้ ข้อมูลโค้ดต่อไปนี้จะแสดงวิธีเรียกเมธอด กิจกรรมที่อธิบายไว้ข้างต้น

Kotlin

val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)

Java

// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
// Start the activity
startActivity(sendIntent);
หากคุณตั้งใจให้แอปมีในตัวและไม่อนุญาตให้แอปอื่นๆ เปิดใช้งาน กิจกรรมของคุณ ต้องการตัวกรอง Intent อื่นๆ กิจกรรมที่ไม่อยากทำ ที่แอปพลิเคชันอื่นจะใช้งานได้ ไม่ควรมีตัวกรอง Intent และคุณสามารถ เริ่มต้นข้อเสนอพิเศษเหล่านั้นด้วยตนเองโดยใช้เจตนาที่ชัดเจน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการ กิจกรรมของคุณสามารถตอบสนองต่อ Intent ได้ โปรดดู Intent และตัวกรอง Intent

ประกาศสิทธิ์

คุณสามารถใช้ไฟล์ Manifest แท็ก <activity> ที่จะควบคุม ว่าแอปใดสามารถเริ่มกิจกรรมหนึ่งๆ ได้ กิจกรรมของผู้ปกครองไม่สามารถเรียกใช้ กิจกรรมย่อย เว้นแต่ว่าทั้งสองกิจกรรมจะมีสิทธิ์เหมือนกันใน ไฟล์ Manifest หากคุณประกาศ <uses-permission> สำหรับกิจกรรมระดับบนสุด กิจกรรมย่อยแต่ละรายการต้องมีค่าตรงกัน <uses-permission>

เช่น หากแอปของคุณต้องการใช้แอปสมมติที่ชื่อ SocialApp ในการแชร์โพสต์บนโซเชียลมีเดีย ส่วน SocialApp เองจะต้องกำหนดสิทธิ์ ที่แอปที่เรียกแอปดังกล่าวต้องมี

<manifest>
<activity android:name="...."
   android:permission=”com.google.socialapp.permission.SHARE_POST”

/>

จากนั้น แอปจะต้องตรงกับชุดสิทธิ์ที่ตั้งไว้ใน ไฟล์ Manifest ของ SocialApp

<manifest>
   <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>

ดูข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์และความปลอดภัยโดยทั่วไปได้ที่ ความปลอดภัยและสิทธิ์

การจัดการวงจรกิจกรรม

กิจกรรมจะผ่านหลายสถานะตลอดอายุการใช้งาน คุณใช้ชุด Callback เพื่อจัดการการเปลี่ยนระหว่างรัฐ ส่วนต่อไปนี้ แนะนำ Callback เหล่านี้

onCreate()

คุณต้องใช้ Callback นี้ ซึ่งจะเริ่มทำงานเมื่อระบบสร้าง กิจกรรม การใช้งานของคุณควรเป็นการเริ่มต้นองค์ประกอบที่สำคัญของ กิจกรรมของคุณ: ตัวอย่างเช่น แอปควรสร้างมุมมองและเชื่อมโยงข้อมูลกับ ทั้งหมดที่นี่ สิ่งสำคัญที่สุดคือ นี่เป็นที่ที่คุณต้องโทรหา setContentView() เพื่อกำหนดเลย์เอาต์สำหรับอินเทอร์เฟซผู้ใช้ของกิจกรรม

เมื่อ onCreate() เสร็จสิ้น การเรียกกลับถัดไปจะเป็น onStart() เสมอ

onStart()

เมื่อ onCreate() กำลังออก กิจกรรม เข้าสู่สถานะเริ่มต้น และผู้ใช้จะมองเห็นกิจกรรมดังกล่าว Callback นี้มีข้อมูลปริมาณเท่ากับการเตรียมการขั้นสุดท้ายของกิจกรรมสำหรับ มาสู่พื้นหน้าและกลายเป็น การโต้ตอบ

onResume()

ระบบจะเรียกใช้ Callback นี้ก่อนที่กิจกรรมจะเริ่มโต้ตอบ กับผู้ใช้ ณ จุดนี้ กิจกรรมจะอยู่ที่ด้านบนสุดของกิจกรรม และเก็บข้อมูลอินพุตของผู้ใช้ทั้งหมด ฟังก์ชันหลักส่วนใหญ่ของแอปคือ ที่ใช้ในเมธอด onResume()

การติดต่อกลับของ onPause() เสมอ ติดตาม onResume()

onPause()

ระบบจะเรียกใช้ onPause() เมื่อกิจกรรมหายไป โฟกัส แล้วป้อนสถานะ หยุดชั่วคราว สถานะนี้จะเกิดขึ้นเมื่อผู้ใช้ แตะปุ่มกลับหรือล่าสุด เมื่อระบบเรียก onPause() สำหรับกิจกรรมของคุณ ในทางเทคนิคหมายความว่ากิจกรรมนั้นยังแสดงได้เพียงบางส่วน แต่ส่วนใหญ่มักเป็นตัวบ่งชี้ว่า ผู้ใช้ออกจากกิจกรรม และกิจกรรมจะเข้าสู่ สถานะหยุดหรือดำเนินการต่อ

กิจกรรมที่มีสถานะหยุดชั่วคราวอาจยังคงอัปเดต UI ต่อไปหากผู้ใช้ UI ควรจะได้รับการอัปเดต ตัวอย่างของกิจกรรมดังกล่าว ได้แก่ กิจกรรมแสดงการนำทาง หน้าจอแผนที่หรือมีเดียเพลเยอร์กำลังเล่น ถึงแม้ว่ากิจกรรมดังกล่าวจะไม่สามารถโฟกัสได้ คาดว่า UI จะมีการอัปเดตต่อไป

คุณไม่ควรใช้ onPause()เพื่อบันทึกแอปพลิเคชันหรือผู้ใช้ ข้อมูล เรียกเครือข่าย หรือทำธุรกรรมฐานข้อมูล สำหรับข้อมูลเกี่ยวกับการบันทึกข้อมูล โปรดดูที่ การบันทึกและกู้คืนสถานะกิจกรรม

เมื่อ onPause() ดําเนินการเสร็จแล้ว การเรียกกลับถัดไปคือ onStop() หรือ onResume() ขึ้นอยู่กับสิ่งใดบ้าง จะเกิดขึ้นหลังจากที่กิจกรรมเข้าสู่สถานะ หยุดชั่วคราว

onStop()

ระบบจะเรียก onStop() เมื่อ ผู้ใช้จะไม่เห็นกิจกรรมดังกล่าวแล้ว เหตุการณ์นี้อาจเกิดขึ้นเนื่องจากกิจกรรมถูกทำลาย กิจกรรมใหม่ หรือกิจกรรมที่มีอยู่กำลังเข้าสู่ สถานะกลับมาทำงานอีกครั้งและครอบคลุมกิจกรรมที่หยุดแล้ว ในกรณีเหล่านี้ กิจกรรมที่หยุดจะไม่เป็นอีกต่อไป ที่มองเห็นได้

Callback ถัดไปที่ระบบเรียกใช้คือ onRestart() หาก กลับมาโต้ตอบกับผู้ใช้ หรือ วันที่ onDestroy() หากกิจกรรมนี้สิ้นสุดอย่างสมบูรณ์

onรีสตาร์ท()

ระบบจะเรียกใช้ Callback นี้เมื่อกิจกรรมอยู่ในสถานะ "หยุด" คือ กำลังจะรีสตาร์ท onRestart() คืนค่าสถานะของกิจกรรมจากเวลาที่หยุด

การเรียกกลับนี้จะตามมาเสมอ onStart()

onDestroy()

ระบบจะเรียกใช้ Callback นี้ก่อนที่กิจกรรมจะถูกทำลาย

Callback นี้จะเป็นหมายเลขสุดท้ายที่กิจกรรมได้รับ onDestroy() คือ มักถูกนำมาใช้เพื่อให้แน่ใจว่าทรัพยากรทั้งหมดของกิจกรรมนั้น จะถูกปลดออกเมื่อกิจกรรมหรือกระบวนการที่มีกิจกรรมหรือกระบวนการที่มีกิจกรรมนั้นถูกทำลาย

ส่วนนี้เป็นเพียงบทแนะนำสำหรับหัวข้อนี้ ดูข้อมูลเพิ่มเติม การดูแลวงจรของกิจกรรมโดยละเอียดและการ Callback ดูกิจกรรม วงจร