การเพิ่มประสิทธิภาพของ AppCompatActivity เหนือ ActionBarActivity คืออะไร


164

android.support.v7.app.AppCompatActivity ถูกเพิ่มลงในไลบรารีการสนับสนุน v7 ล่าสุดเป็นคุณลักษณะใหม่เมื่อวานนี้

ได้มีการกล่าวว่าActionBarActivityได้รับการคัดค้านในความโปรดปรานของใหม่AppCompatActivityและที่AppCompatActivityเป็นชั้นฐานสำหรับกิจกรรมที่ใช้คุณลักษณะการดำเนินการแถบการสนับสนุนห้องสมุด ดังนั้นสิ่งที่เป็นคุณสมบัติใหม่ของAppCompatActivityกว่าActionBarActivity? การปรับปรุงสิ่งใดที่AppCompatActivityมีมากกว่าActionBarActivity? และอะไรคือข้อดีของAppCompatActivity? ใครสามารถจัดหาตัวอย่างได้บ้าง

เคล็ดลับใด ๆ ที่ชื่นชม และขอขอบคุณล่วงหน้า

PS: สิ่งที่ทำให้ผมประหลาดใจมากที่สุดคือที่AppCompatActivityซึ่งเป็นที่ยื่นออกมาจากandroid.support.v4.app.FragmentActivityเป็นระดับผู้ปกครองโดยตรงของActionBarActivity! ฉันหมายความว่าจริง ๆ แล้วตอนนี้ที่ActionBarActivityสามารถทำทุกอย่างที่AppCompatActivityทำได้ทำไม Android ผลักออกหลัง?

ในขณะเดียวกันผมเห็นโพสต์บล็อกที่รัฐ: " มันไม่ได้เปลี่ยนชื่อจากActionBarActivityการAppCompatActivityตรรกะภายในของAppCompatสามารถใช้ได้ผ่านทางAppCompatDelegate " ดังนั้นสิ่งที่เป็น " ตรรกะภายใน " ของAppCompat? สิ่งที่สามารถAppCompatDelegateทำอย่างไร ใครสามารถโพสต์รหัสเกี่ยวกับเรื่องนี้ได้บ้าง



ฉันได้อ่านแล้วมันคือการแนะนำตื้นเกินไป
SilentKnight

1
AppCompatActivity เป็นคลาสแม่ของ ActionBarActivity และสำหรับแนวคิดเพิ่มเติมคุณจำเป็นต้องค้นหาโค้ด
Pankaj Kumar

ใช่ฉันสังเกตเห็นสิ่งนี้
SilentKnight

คำตอบ:


145

ตามที่ Chris เขียนไว้เวอร์ชันใหม่ที่เลิกใช้แล้วActionBarActivity( AppCompatActivityคลาสที่ขยายเพิ่ม) นั้นปลอดภัยที่จะใช้คลาสความเข้ากันได้แบบย้อนหลัง การลดค่าใช้จ่ายเป็นเพียงคำแนะนำให้คุณขอใช้AppCompatActivityโดยตรงแทน AppCompatActivityเป็นการใช้งานทั่วไปที่ใหม่กว่าซึ่งใช้AppCompatDelegateคลาสภายใน

หากคุณเริ่มการพัฒนาใหม่คุณควรใช้AppCompatActivityคลาสใหม่ทันที หากคุณมีโอกาสอัปเดตแอปของคุณให้แทนที่กิจกรรมที่เลิกใช้แล้วActionBarActivityด้วยเช่นกัน มิฉะนั้นคุณสามารถอยู่กับกิจกรรมที่เลิกใช้แล้วและจะไม่มีความแตกต่างในพฤติกรรมเลย

เกี่ยวกับAppCompatDelegateมันช่วยให้คุณมีเครื่องมือใหม่ในการย้อมสีกิจกรรมซึ่งเป็นค่ามิได้AppCompatActivityActionBarActivity

ตัวอย่างเช่นคุณสืบทอดกิจกรรมจากไลบรารีภายนอกซึ่งในทางกลับกันไม่ได้สืบทอดจากAppCompatActivityแต่คุณต้องการให้กิจกรรมนี้มีวิดเจ็ตวัสดุที่มีสีอ่อน (มุมมอง) ในการทำให้มันเกิดขึ้นคุณต้องสร้างอินสแตนซ์AppCompatDelegateภายในกิจกรรมของคุณแทนที่เมธอดของกิจกรรมaddContentView()นั้นsetContentView()ๆ เป็นต้น (ดูAppCompatDelegatejavadoc สำหรับรายการทั้งหมดของเมธอด) และภายในเมธอด overridden เหล่านั้นส่งต่อการเรียกไปยังAppCompatDelegateอินสแตนซ์ภายใน AppCompatDelegateจะทำส่วนที่เหลือและกิจกรรม "แบบเก่า" ของคุณจะถูก "ปรากฏ"


ตัวอย่างที่ดี .. ขอบคุณ @ sergej shafarenka
Rakesh L

2
โปรดบอกฉันทีว่าจะเกิดอะไรขึ้นเมื่อฉันจะใช้กิจกรรมแทน Appcompactivity ฉันค้นหาแล้ว แต่ไม่ได้รับการแก้ไขโปรดช่วยฉันด้วย
Ravindra Kushwaha

35

ส่วนใหญ่เป็นการเปลี่ยนชื่อ: ActionBarActivityไม่ได้อธิบายทุกอย่างอย่างที่ทำในขณะนี้ คุณสามารถใช้อย่างปลอดภัยActionBarActivityหากคุณต้องการ คิดว่ามันเหมือน symlink


AppCompatActivityเป็นชั้นผู้ปกครองโดยตรงของActionBarActivityตอนนี้ที่ActionBarActivityสามารถทำอะไรได้AppCompatActivityบ้างทำไมAndroidผลักออกมาในภายหลัง
SilentKnight

4
@SilentKnight: ตามที่ Chris เขียนส่วนใหญ่จะเป็นการเปลี่ยนชื่อ การอ้างอิงบล็อกของนักพัฒนา Android : "ห้องสมุดสนับสนุน AppCompat เริ่มต้นด้วยความอ่อนน้อมถ่อมตน แต่เป็นจุดเริ่มต้นที่สำคัญ: แถบการกระทำที่สอดคล้องกันสำหรับ API 7 และอุปกรณ์ที่สูงกว่าทั้งหมดในการแก้ไขครั้งที่ 21 ได้มีการรับผิดชอบใหม่: การสนับสนุน Toolbar และอุปกรณ์อื่น ๆ อีกมากมายสำหรับ API 7+ ด้วยเหตุนี้ชื่อ ActionBarActivity จึงไม่ครอบคลุมขอบเขตทั้งหมดของสิ่งที่ทำจริง ๆ "
CommonsWare

3
มันเป็นความไม่ปลอดภัยที่จะใช้เรียนเลิกใช้เนื่องจากพวกเขาอาจมีการกำจัดในรุ่นอนาคต แม้ว่าคุณจะสามารถแทนที่การอ้างอิงทั้งหมดได้อย่างง่ายดายActionBarActivityเมื่อมันถูกดร็อปจากไลบรารีการสนับสนุน (เช่นเมื่ออัปเดตแอปของคุณ) ฉันอยากจะแนะนำให้หลีกเลี่ยงการใช้มันตั้งแต่บัดนี้เป็นต้นไป
david.schreiber

12

AppCompat Support Library เริ่มต้นด้วยความอ่อนน้อมถ่อมตน แต่เป็นจุดเริ่มต้นที่สำคัญ: แถบการกระทำที่สอดคล้องกันสำหรับ API 7 และอุปกรณ์ที่สูงกว่าทั้งหมด ในการแก้ไข 21 มันรับผิดชอบใหม่ : การนำจานสีวัสดุการย้อมสีวิดเจ็ตการสนับสนุนแถบเครื่องมือและอื่น ๆ ไปยังอุปกรณ์ API 7+ ทั้งหมด กับที่ชื่อ ActionBarActivity ไม่ได้จริงๆครอบคลุมขอบเขตของสิ่งที่มันไม่ได้จริงๆ

http://android-developers.blogspot.it/2015/04/android-support-library-221.html


.. โปรดบอกฉันว่าจะเกิดอะไรขึ้นเมื่อฉันจะใช้กิจกรรมแทน Appcompactivity ฉันค้นหาแล้ว แต่ไม่ได้รับการแก้ไขโปรดช่วยฉันด้วย
Ravindra Kushwaha

9

AppCompatActivityถูกนำเข้าสู่ที่ใช้ Android SDKตั้งแต่การเปิดตัวของการสนับสนุนหุ่นยนต์ AppCompat ห้องสมุด

AppCompatActivityเป็นชั้นของเด็กโดยตรงของFragmentActivityการสนับสนุน v4 ActionBarActivityและชั้นผู้ปกครองโดยตรงของ

AppCompatActivityเป็นคลาสพื้นฐานสำหรับกิจกรรมที่ใช้คุณลักษณะแถบแอ็คชันไลบรารีสนับสนุน

คุณสามารถเพิ่มActionBarกิจกรรมของคุณเมื่อรันบนAPI ระดับ 7 หรือสูงกว่าโดยขยายคลาสนี้สำหรับกิจกรรมของคุณและตั้งค่าธีมกิจกรรมเป็นTheme.AppCompatหรือธีมที่คล้ายกัน

สำหรับการสนับสนุนไลบรารี v7 appcompat มันเพิ่มการสนับสนุนสำหรับรูปแบบการออกแบบส่วนติดต่อผู้ใช้Action Bar ไลบรารีนี้มีการสนับสนุนสำหรับการใช้งานส่วนต่อประสานผู้ใช้ในการออกแบบวัสดุ

นี่คือบางส่วนของคีย์คลาสที่รวมอยู่ในไลบรารี v7 appcompat:

  • ActionBar - จัดให้มีการนำรูปแบบส่วนติดต่อผู้ใช้ของแถบแอ็คชันไปใช้
  • AppCompatActivity- เพิ่มคลาสกิจกรรมแอปพลิเคชันที่สามารถใช้เป็นคลาสพื้นฐานสำหรับกิจกรรมที่ใช้การดำเนินการแถบการสนับสนุน Library
  • AppCompatDialog- เพิ่มคลาสไดอะล็อกที่สามารถใช้เป็นคลาสพื้นฐานสำหรับไดอะล็อกธีมAppCompat
  • ShareActionProvider - เพิ่มการสนับสนุนสำหรับการดำเนินการแบ่งปันที่เป็นมาตรฐาน (เช่นอีเมลหรือโพสต์ลงในแอปพลิเคชันโซเชียล) ที่สามารถรวมไว้ในแถบการกระทำ

หลังจากคุณดาวน์โหลดไลบรารีการสนับสนุน Android ไลบรารีนี้จะอยู่ในไดเรกทอรี/ extras / android / support / v7 / appcompat /


เกี่ยวกับandroid.support.v4.app.ActivityCompatอะไร นี่เป็นเพียงชื่อเก่าของAppCompatActivity?
Taylan

7

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

ดูที่ support-libraries-libraries-v22-1-0 ของ chrisสำหรับข้อมูลเพิ่มเติม


1
มันเป็นบล็อกของคริสชื่นชมมาก
SilentKnight

2

รีลีสล่าสุดของ android support library, 22.1, deprecates ซึ่งActionBarActivityสนับสนุนAppCompatActivity, ซึ่งสัญญาว่าจะนำมาซึ่งสอดคล้องกันActionBarสำหรับอุปกรณ์ทั้งหมดที่เริ่มต้นด้วย API ระดับ 7 ขึ้นไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.