แอปพลิเคชันอาจทำงานได้มากเกินไปบนเธรดหลัก


379

ฉันยังใหม่กับสภาพแวดล้อม Android SDK / API นี่เป็นครั้งแรกที่ฉันพยายามวาดพล็อต / แผนภูมิ ฉันลองใช้โค้ดตัวอย่างชนิดต่าง ๆ กับอีมูเลเตอร์โดยใช้ไลบรารีที่แตกต่างกัน 3 ไลบรารีไม่มีอะไรแสดงในหน้าจอเลย์เอาต์ logcat กำลังทำซ้ำข้อความต่อไปนี้:

 W / Trace (1378): ค่าที่ไม่คาดคิดจาก nativeGetEnabledTags: 0
 I / Choreographer (1378): ข้าม 55 เฟรม! แอปพลิเคชันอาจทำงานได้มากเกินไปบนเธรดหลัก

ปัญหาไม่ได้เกิดขึ้นและแผนภูมิทำงานเมื่อฉันรันโค้ดตัวอย่างที่เกี่ยวข้องกับสำเนาการประเมินผลของไลเซนส์ไลบรารี่


2
คุณกำลังวาดแผนภูมิของคุณในเธรดแยกต่างหากหรือไม่
Areks

ขอบคุณสำหรับความคิดเห็นของคุณฉันได้แก้ไขคำถามเพื่อให้ชัดเจนยิ่งขึ้น กิจกรรมที่กำลังทำงานอยู่แสดงว่าฉันกำลังเรียกใช้กิจกรรมที่ไม่มีการออกแบบเค้าโครง => แสดงหน้าจอสีขาว
user2038135

1
@ อ่านไม่ฉันไม่ได้ใช้เธรดแยกต่างหาก
user2038135

1
ฉันคิดว่าคุณควรจะไม่แนะนำให้ทำการดำเนินการเป็นเวลานานบนเธรดหลักเนื่องจากการค้างแอปพลิเคชันทั้งหมดคุณสามารถอ่านวิธีใช้เธรดได้ที่นี่: stackoverflow.com/questions/3391272/ ละเว้นรหัส "สิ่งที่ต้องทำ" คำขอ HTTP "และเพียงดำเนินการการดำเนินงานของคุณอาจมีความยาว
Areks

1
ทำไมคุณไม่ลองค้นหาคุณจะพบข้อมูลเกี่ยวกับนักออกแบบท่าเต้น ฉันแนะนำให้คุณอ่านคำตอบนี้: stackoverflow.com/questions/11266535/…
Gabriel Esteban

คำตอบ:


479

นำมาจาก: Android UI: การแก้ไขเฟรมที่ข้าม

ทุกคนที่เริ่มพัฒนาแอปพลิเคชัน Android จะเห็นข้อความนี้ใน logcat “ Choreographer (abc): ข้ามเฟรม xx! แอปพลิเคชันอาจทำงานได้มากเกินไปบนเธรดหลัก” ดังนั้นมันหมายถึงอะไรจริงทำไมคุณควรกังวลและวิธีการแก้ปัญหา

สิ่งนี้หมายความว่ารหัสของคุณใช้เวลานานในการประมวลผลและเฟรมถูกข้ามเนื่องจากอาจเป็นเพราะการประมวลผลจำนวนมากที่คุณทำในหัวใจของแอปพลิเคชันหรือการเข้าถึงฐานข้อมูลหรือสิ่งอื่นใดที่ทำให้เธรด หยุดซักพัก

นี่คือคำอธิบายโดยละเอียดเพิ่มเติม:

นักออกแบบท่าเต้นอนุญาตให้แอปเชื่อมต่อตัวเองกับ vsync และเวลาที่เหมาะสมในการปรับปรุงประสิทธิภาพ

ภาพเคลื่อนไหวในมุมมอง Android ใช้ Choreographer ภายในเพื่อจุดประสงค์เดียวกัน: เพื่อให้เหมาะสมกับเวลาของภาพเคลื่อนไหวและอาจปรับปรุงประสิทธิภาพ

เนื่องจากผู้ฝึกสอนได้รับการบอกเล่าเกี่ยวกับเหตุการณ์ vsync ทุกครั้งฉันสามารถบอกได้ว่าหนึ่งใน Runnables ที่ส่งผ่านโดย Choreographer.post * apis ไม่เสร็จในเวลาเดียวของเฟรมทำให้เฟรมถูกข้าม

ในความเข้าใจของฉันนักออกแบบท่าเต้นสามารถตรวจจับการข้ามเฟรมเท่านั้น มันไม่มีทางบอกได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น

ข้อความ“ แอปพลิเคชันอาจทำงานได้มากเกินไปบนเธรดหลัก” อาจทำให้เข้าใจผิด

แหล่งที่มา: ความหมายของข้อความนักออกแบบท่าเต้นใน Logcat

ทำไมคุณควรกังวล

เมื่อข้อความนี้ปรากฏขึ้นบน Android emulator และจำนวนของเฟรมที่ข้ามมีขนาดค่อนข้างเล็ก (<100) จากนั้นคุณสามารถเดิมพันอย่างปลอดภัยของโปรแกรมจำลองการทำงานช้าซึ่งเกิดขึ้นเกือบทุกครั้ง แต่ถ้าจำนวนของเฟรมข้ามและใหญ่และเป็นลำดับ 300+ อาจมีปัญหาร้ายแรงกับรหัสของคุณ อุปกรณ์ Android มีฮาร์ดแวร์มากมายไม่เหมือน iOS และอุปกรณ์ windows RAM และ CPU แตกต่างกันไปและหากคุณต้องการประสิทธิภาพที่เหมาะสมและประสบการณ์การใช้งานของผู้ใช้ในทุกอุปกรณ์คุณจะต้องแก้ไขสิ่งนี้ เมื่อเฟรมถูกข้าม UI จะช้าและล้าหลังซึ่งไม่ใช่ประสบการณ์ผู้ใช้ที่ต้องการ

วิธีแก้ไข

การแก้ไขสิ่งนี้ต้องระบุโหนดที่มีหรืออาจเกิดขึ้นเป็นระยะเวลานานในการประมวลผล วิธีที่ดีที่สุดคือทำการประมวลผลทั้งหมดไม่ว่าเล็กหรือใหญ่ในเธรดแยกจากเธรด UI หลัก ดังนั้นไม่ว่าจะเป็นการเข้าถึงข้อมูลในฐานข้อมูล SQLite หรือทำคณิตศาสตร์ง่าย ๆ หรือจัดเรียงอาเรย์ - ทำในเธรดอื่น

ขณะนี้มีการจับคุณจะสร้างเธรดใหม่สำหรับการดำเนินการเหล่านี้และเมื่อคุณเรียกใช้แอปพลิเคชันของคุณมันจะพังว่า "เฉพาะเธรดต้นฉบับที่สร้างลำดับชั้นการดูเท่านั้นที่สามารถสัมผัสมุมมอง" คุณจำเป็นต้องรู้ข้อเท็จจริงนี้ว่า UI ใน Android สามารถเปลี่ยนได้โดยเธรดหลักหรือเธรด UI เท่านั้น เธรดอื่นใดที่พยายามทำล้มเหลวและล้มเหลวด้วยข้อผิดพลาดนี้ สิ่งที่คุณต้องทำคือสร้าง Runnable ใหม่ภายใน runOnUiThread และภายใน runnable นี้คุณควรดำเนินการทั้งหมดที่เกี่ยวข้องกับ UI ค้นหาตัวอย่างที่นี่

ดังนั้นเราจึงมีเธรดและ Runnable สำหรับการประมวลผลข้อมูลจากเธรดหลักมีอะไรอีกบ้าง มี AsyncTask ในแอนดรอยด์ซึ่งช่วยให้สามารถทำกระบวนการเป็นเวลานานบนเธรด UI สิ่งนี้มีประโยชน์มากที่สุดเมื่อแอปพลิเคชันของคุณขับเคลื่อนข้อมูลหรือใช้เว็บ API หรือใช้ UI ที่ซับซ้อนเช่นงานสร้างโดยใช้ Canvas พลังของ AsyncTask คือการอนุญาตให้ทำสิ่งต่าง ๆ ในพื้นหลังและเมื่อคุณทำการประมวลผลเสร็จแล้วคุณสามารถดำเนินการตามที่ต้องการบน UI ได้โดยไม่ทำให้เกิดความล่าช้า สิ่งนี้เป็นไปได้เนื่องจาก AsyncTask มาจากเธรด UI ของกิจกรรม - การดำเนินการทั้งหมดที่คุณทำบน UI ผ่าน AsyncTask เสร็จแล้วเป็นเธรดอื่นจากเธรด UI หลักไม่มีสิ่งกีดขวางต่อการโต้ตอบของผู้ใช้

ดังนั้นนี่คือสิ่งที่คุณต้องรู้สำหรับการสร้างแอพพลิเคชั่น Android ที่ราบรื่นและเท่าที่ฉันรู้ว่าผู้เริ่มต้นทุกคนได้รับข้อความนี้บนคอนโซลของเขา


41
ฉันเพิ่งมีแอพที่ถ้าฉันคลิกปุ่มภาพพื้นหลังของการเปลี่ยนแปลงปุ่มและปุ่มนั้นไม่สามารถคลิกได้ ฉันทำงานมากเกินไปได้อย่างไร :(
Remian8985

1
@ Remian8985 - การเปลี่ยนภาพพื้นหลังสำหรับปุ่ม (สมมติว่าคุณกำลังดาวน์โหลดภาพนี้) ควรทำใน AsyncTask - นั่นคือการดำเนินการดาวน์โหลดพื้นหลังและเผยแพร่ผลลัพธ์บนเธรด UI (จัดหาภาพกลับ) ดูลิงค์
BenJaminSila

11
@BenJaminSila เปลี่ยนพื้นหลังใน AsyncTask? จริงๆ?
25

11
@ user25 "สมมติว่าคุณกำลังดาวน์โหลดภาพนี้"
forresthopkinsa

"เมื่อข้อความนี้ปรากฏขึ้นบน Android emulator และจำนวนเฟรมที่ข้ามมีขนาดค่อนข้างเล็ก (<100) ดังนั้นคุณสามารถเดิมพันอย่างปลอดภัยของโปรแกรมจำลองการทำงานช้า" นี่ยังใช้วันนี้หรือไม่? อีมูเลเตอร์นั้นค่อนข้างเร็วใช่มั้ย
Robin Dijkhof

243

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

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

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

ดังนั้นข้อเสนอแนะของฉันคือถ้าไม่มีคำตอบข้างต้นช่วยคุณอาจตรวจสอบขนาดไฟล์ทรัพยากรของคุณ


1
ทำงานให้ฉันเช่นกัน ฉันมีแอปพลิเคชันที่ทำงานได้น้อยมาก แต่ช้าและล่าช้า ฉันเก็บบันทึกเฟรมที่ข้ามไปเรื่อย ๆ เมื่อฉันลบพื้นหลังออกจากกิจกรรมของฉันทุกอย่างก็โอเค ขอบคุณ!
akrabi

คำตอบที่ดีฉันเชื่อว่านี่เป็นปัญหาของฉันอย่างแน่นอน ฉันลองใช้โซลูชันอื่น ๆ (ค่อนข้างเกี่ยวข้อง) และแอปก็ช้าเหมือนกัน ฉันนำบริการเว็บทั้งหมดออกมาและพยายามเพิ่มประสิทธิภาพรหัสของฉันให้อยู่ในระดับที่เหมาะสม ไม่ทำงานแล้วฉันเห็นสิ่งนี้ ทันทีที่ฉันลบภาพพื้นหลังของฉัน (ภาพที่ใหญ่ที่สุดที่ฉันมี) แอปทำงานได้เร็วเท่าที่คุณสามารถคลิกสิ่งต่าง ๆ แม้จะมีรหัส "ช้า" เก่า
M Barbosa

คุณทำวันของฉัน!
นิโคลัสมาสโตร

:) คุณเป็นคนฉลาดหลักแหลม
Metin Ilhan

@batsheva ไม่จำเป็นต้องมีขนาด 1 KB มันขึ้นอยู่กับความต้องการของคุณสมมติว่าคุณต้องการภาพที่ชัดเจนกว่าคุณอาจใช้ความละเอียดสูงกว่า แต่ให้แน่ใจว่าคุณแบ่งออกเป็นขนาดต่าง ๆ ลงในโฟลเดอร์ของทรัพยากรที่แตกต่างกัน
Sithu

61

ฉันก็มีปัญหาเดียวกัน
Mine เป็นกรณีที่ฉันใช้ภาพพื้นหลังซึ่งอยู่ในรูปวาดซึ่งเป็นรูปขนาดประมาณ 130kB และใช้ระหว่างหน้าจอสแปลชและโฮมเพจในแอพ Android ของฉัน

วิธีแก้ปัญหา - ฉันเพิ่งเลื่อนภาพนั้นไปยังโฟลเดอร์ drawables-xxx จาก drawables และสามารถเพิ่มหน่วยความจำจำนวนมากที่ทำงานอยู่ในพื้นหลังและเฟรมการข้ามไม่ได้ข้ามอีกต่อไป

อัปเดตใช้โฟลเดอร์ทรัพยากร drawable 'nodp' สำหรับเก็บไฟล์ drawable พื้นหลัง
โฟลเดอร์ที่ผ่านการรับรองความหนาแน่นหรือ drawable-nodpi จะมีความสำคัญกว่าหรือไม่


7
ฉันย้ายภาพพื้นหลังขนาดใหญ่ของฉันจาก drawable ไปเป็น mimap-xxxhdpi และมันก็หลอก!
bgplaya

คุณช่วยได้มาก ขอบคุณ
N.Droid

2
วิธีการแก้ปัญหานี้กำลังทำเคล็ดลับ ฉันใช้โฟลเดอร์drawable-xxxhdpiแทนdrawableสิ่งที่ลดหน่วยความจำที่ใช้ไปอย่างมาก (น้อยกว่า 70 เปอร์เซ็นต์) นอกจากนี้ยังเป็นที่รู้กันดีว่าหน้าจอที่มีขนาดเท่ากันนั้นแตกต่างกันไปในขนาด DPI อัตราส่วนพิกเซลระหว่างพวกเขาคือldpi = 1:0.75, mdpi = 1:1, hdpi = 1:1.5, xhdpi = 1:2, ,xxhdpi = 1:3 xxxhdpi = 1:4ด้วยการใช้drawable-xxxhdpiโฟลเดอร์ที่คุณอนุญาตให้ลดขนาดภาพลงบนหน้าจอของอุปกรณ์ของคุณสิ่งที่ช่วยลดการใช้หน่วยความจำและ CPU
Timo Bähr

2
ภาพเคลื่อนไหวจากdrawableการประยุกต์ใช้ป้องกันจากการได้รับdrawable-nodpi Out of Memory Error
Shruti

โอ้พระเจ้าของฉัน ... ขอบคุณ! ฉันมีภาพอยู่ในโฟลเดอร์ที่สามารถวาดได้และทำให้แอปของฉันช้าเหมือนนรก (แม้ว่าภาพจะมีขนาดเพียง 100kb !!!) หลังจากสร้างไฟล์ drawable-xxx (ฉันใช้ Android Drawable Importer) แอพของฉันเร็วมาก ขอบคุณมาก!
ข้อผิดพลาด 1337

20

สาเหตุทั่วไปอีกประการของความล่าช้าในเธรด UI คือการเข้าถึง SharedPreferences เมื่อคุณเรียกใช้PreferenceManager.getSharedPreferencesเมธอดa และวิธีอื่นที่คล้ายกันเป็นครั้งแรกไฟล์. xml ที่เกี่ยวข้องจะถูกโหลดและแยกวิเคราะห์ในเธรดเดียวกันทันที

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

น่าเสียดายที่บางครั้งการอ่านไฟล์การตั้งค่าเป็นสิ่งจำเป็นในช่วงระยะเริ่มต้นของการเริ่มต้น (เช่นในกิจกรรมเริ่มต้นหรือแม้แต่แอปพลิเคชันเอง) ในกรณีดังกล่าวก็ยังคงเป็นไปได้ที่จะหลีกเลี่ยงการถ่วง UI MessageQueue.IdleHandlerโดยใช้ ทำทุกอย่างที่คุณต้องทำบนเธรดหลักจากนั้นติดตั้ง IdleHandler เพื่อเรียกใช้โค้ดเมื่อกิจกรรมของคุณถูกวาดขึ้นมาอย่างสมบูรณ์ ใน Runnable นั้นคุณควรจะสามารถเข้าถึง SharedPreferences ได้โดยไม่ต้องเลื่อนการวาดภาพมากเกินไปและทำให้ Choreographer ไม่มีความสุข


1
สำหรับกรณีนี้คุณควรเลือกใช้วิธี () แทนการยอมรับ () ใช้ () วิธีการไม่สามารถปิดกั้น UI คุณสามารถดูได้จากที่นี่developer.android.com/training/data-storage/shared-preferences
Emre Gürses

16

ลองใช้กลยุทธ์ต่อไปนี้เพื่อปรับปรุงประสิทธิภาพแอปของคุณ:

  • ใช้การเขียนโปรแกรมแบบมัลติเธรดถ้าเป็นไปได้ ประโยชน์ด้านประสิทธิภาพนั้นยิ่งใหญ่แม้ว่าสมาร์ทโฟนของคุณจะมีหนึ่งคอร์ (เธรดสามารถทำงานได้ในคอร์ที่ต่างกันหากโปรเซสเซอร์มีสองตัวหรือมากกว่า) มีประโยชน์ในการแยกตรรกะแอปของคุณออกจาก UI ใช้หัวข้อ Java, AsyncTask หรือ IntentService ตรวจสอบเรื่องนี้
  • อ่านและปฏิบัติตามเคล็ดลับประสิทธิภาพอื่น ๆ ของเว็บไซต์พัฒนา Android ตรวจสอบที่นี่

3
ลิงก์แรกของคุณต้องการให้คุณ "... มีบัญชีที่ได้รับการตรวจสอบแล้ว ... " เพื่อเข้าถึง
ทำลาย

9

ผมมีปัญหาเดียวกัน. Android Emulator ทำงานได้อย่างสมบูรณ์บน Android <6.0 เมื่อฉันใช้ emulator Nexus 5 (Android 6.0) แอปทำงานช้ามากI/Choreographer: Skipped framesในบันทึก

ดังนั้นฉันแก้ไขปัญหานี้โดยการเปลี่ยนตัวhardwareAcceleratedเลือกไฟล์ Manifest เป็นtrueดังนี้:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application android:hardwareAccelerated="true">
        ...
    </application>
</manifest>

8

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


6

เพิ่มประสิทธิภาพรูปภาพของคุณ ... อย่าใช้ภาพที่มีขนาดใหญ่กว่า 100KB ... การโหลดภาพใช้ CPU มากเกินไปและทำให้แอปของคุณค้าง


4
ลดขนาดของรูปภาพด้วยจาวาโค้ดหรือใช้ photoshop เพื่อครอบตัดรูปภาพ .. และบีบอัดรูปภาพโดยใช้ compressor.io
HarshitG

5

ผมมีปัญหาเดียวกัน. ในกรณีของฉันฉันมีเลย์เอาต์สัมพัทธ์ 2 เลเยอร์ RelativeLayout จะต้องผ่านการวัดสองครั้งเสมอ หากคุณซ้อน RelativeLayouts คุณจะได้รับอัลกอริธึมการวัดเอ็กซ์โพเนนเชียล


4

สิ่งนี้มักจะเกิดขึ้นเมื่อคุณทำการประมวลผลขนาดใหญ่ในเธรดหลัก มันก็โอเคที่จะข้ามเฟรมน้อยกว่า 200 แต่ถ้าคุณมีเฟรมที่ข้ามมากกว่า 200 เฟรมมันอาจทำให้คุณใช้งาน UI ของแอพพลิเคชั่นช้าลง สิ่งที่คุณสามารถทำได้คือทำกระบวนการเหล่านี้ในเธรดใหม่ที่เรียกว่าเธรดผู้ทำงานและหลังจากนั้นเมื่อคุณต้องการเข้าถึงและทำ sth ด้วยเธรด UI (เช่นทำบางสิ่งบางอย่างกับมุมมอง findView ฯลฯ ... ) คุณสามารถใช้ตัวจัดการหรือ runOnUiThread (ฉันชอบสิ่งนี้มากกว่า) เพื่อแสดงผลการประมวลผล นี่เป็นการแก้ปัญหาอย่างแน่นอน การใช้เธรดผู้ปฏิบัติงานมีประโยชน์มากหรือต้องใช้เมื่อถึงกรณีนี้


1

ผมมีปัญหาเดียวกัน. เมื่อฉันรันโค้ดบนคอมพิวเตอร์เครื่องอื่นมันใช้งานได้ดี อย่างไรก็ตามในตอนนี้มันแสดงว่า "แอปพลิเคชันอาจทำงานได้มากเกินไปบนเธรดหลัก"

ฉันแก้ปัญหาด้วยการรีสตาร์ทสตูดิโอ Android [ไฟล์ -> แคชที่ไม่ถูกต้อง / เริ่มใหม่ -> คลิกที่ "ทำให้ถูกต้องแล้วเริ่มใหม่"


ฉันไม่รู้ว่าทำไมทางออกของคุณถึงทำงาน ขอบคุณมาก
Bhuvanesh BS

1

ในกรณีของฉันมันเป็นเพราะฉันตั้งใจตั้งเบรกพอยต์กับวิธีการ เมื่อฉันล้างมันข้อความก็หายไปและประสิทธิภาพก็ดีขึ้นมาก


0

แอพของฉันมีปัญหาเดียวกัน แต่มันไม่ได้ทำอะไรนอกจากการแสดงรายการการ์ดและข้อความบนนั้น ไม่มีอะไรทำงานในพื้นหลัง แต่หลังจากการสอบสวนบางอย่างพบว่าภาพที่ตั้งไว้สำหรับพื้นหลังการ์ดเป็นสาเหตุของสิ่งนี้แม้ว่าจะเป็นขนาดเล็ก (350kb) แล้วฉันจะแปลงภาพให้กับภาพ 9patch ใช้ http://romannurik.github.io/AndroidAssetStudio/index.html
สิ่งนี้ใช้ได้สำหรับฉัน


0

หลังจากทำ R & D มากในเรื่องนี้ฉันได้โซลูชัน

ในกรณีของฉันฉันกำลังใช้บริการที่จะทำงานทุก 2 วินาทีและด้วย runonUIT ข้อความที่ฉันสงสัยว่ามีปัญหาอยู่ที่นั่น แต่ก็ไม่ได้เลย ปัญหาต่อไปที่ฉันพบคือฉันกำลังใช้ Image ขนาดใหญ่ในแอพอาจเป็นปัญหา

ฉันลบรูปภาพและตั้งค่ารูปภาพใหม่

สรุป: - มองเข้าไปในรหัสของคุณมีไฟล์ raw ใด ๆ ที่คุณใช้มีขนาดใหญ่


0

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


-1

ฉันมีปัญหาเดียวกันในขณะที่พัฒนาแอปที่ใช้ไฟล์ png ที่สามารถวาดได้บนโครงร่างกริด ฉันยังพยายามเพิ่มประสิทธิภาพรหัสของฉันให้ไกลที่สุด .. แต่มันก็ไม่ได้ผลสำหรับฉัน .. จากนั้นฉันพยายามลดขนาดของ png เหล่านั้น .. และเดาว่ามันทำงานได้ดีจริง ๆ .. ดังนั้นข้อเสนอแนะของฉันคือลด ขนาดของทรัพยากร drawable ถ้ามี ..

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