ตรวจสอบขนาดฮีปของแอปพลิเคชันใน Android


145

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

ฉันได้ยินมาว่ามีฟังก์ชั่นที่ทำสิ่งนี้ใน SDK รุ่นที่ใหม่กว่า ไม่ว่าในกรณีใดฉันกำลังมองหาโซลูชันที่ใช้งานได้ตั้งแต่ 1.5 ขึ้นไป


2
เกี่ยวข้อง: stackoverflow.com/questions/1518154/…
Josh Lee

คำตอบ:


453

มีสองวิธีที่จะคิดเกี่ยวกับวลีของคุณ "ขนาดฮีพของแอปพลิเคชันที่มี":

  1. แอพของฉันสามารถใช้ heap ได้มากเท่าไหร่ก่อนที่จะมีข้อผิดพลาดเกิดขึ้น? และ

  2. แอพของฉันควรใช้heap เท่าไรตามข้อ จำกัด ของเวอร์ชั่น Android OS และฮาร์ดแวร์ของอุปกรณ์ของผู้ใช้

มีวิธีที่แตกต่างกันสำหรับการพิจารณาแต่ละข้อด้านบน

สำหรับรายการ 1 ด้านบน: maxMemory()

ซึ่งสามารถเรียกใช้ (เช่นในonCreate()วิธีการของกิจกรรมหลัก) ดังนี้:

Runtime rt = Runtime.getRuntime();
long maxMemory = rt.maxMemory();
Log.v("onCreate", "maxMemory:" + Long.toString(maxMemory));

วิธีการนี้จะบอกคุณว่าหลายรวมไบต์ของกองแอปของคุณได้รับอนุญาตในการใช้งาน

สำหรับรายการ 2 ด้านบน: getMemoryClass()

ซึ่งสามารถเรียกใช้ดังนี้:

ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
int memoryClass = am.getMemoryClass();
Log.v("onCreate", "memoryClass:" + Integer.toString(memoryClass));

วิธีนี้บอกให้คุณทราบว่าควรใช้ฮีปจำนวนกี่เมกะไบต์หากต้องการเคารพขีด จำกัด ของอุปกรณ์ที่มีอยู่อย่างเหมาะสมและสิทธิ์ของแอพอื่น ๆ ที่จะทำงานโดยไม่ต้องถูกบังคับซ้ำ ๆ ในรอบ/ เนื่องจากมันหยาบคาย ล้างออกจากหน่วยความจำขณะที่แอปช้างของคุณอาบน้ำในอ่างจากุซซี่ AndroidonStop()onResume()

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

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

สถานการณ์เดียว (ซึ่งฉันรู้) ซึ่งทั้งสองวิธีสามารถแยกความแตกต่างได้บนอุปกรณ์ที่รูทซึ่งใช้ Android เวอร์ชันเช่น CyanogenMod ซึ่งอนุญาตให้ผู้ใช้เลือกขนาดฮีปที่มีขนาดใหญ่สำหรับแต่ละแอป ใน CM ตัวอย่างตัวเลือกนี้จะปรากฏภายใต้ "การตั้งค่า CyanogenMod" / "ประสิทธิภาพ" / "ขนาดฮีพ VM"

หมายเหตุ: โปรดทราบว่าการตั้งค่านี้ด้วยตนเองสามารถส่งข้อความถึงระบบของคุณโดยเฉพาะถ้าคุณเลือกค่าที่น้อยกว่าปกติสำหรับอุปกรณ์ของคุณ

นี่คือผลการทดสอบของฉันที่แสดงค่าที่ส่งคืนโดยmaxMemory()และgetMemoryClass()สำหรับอุปกรณ์ที่ต่างกันสี่เครื่องที่ใช้ CyanogenMod โดยใช้ค่าฮีปที่แตกต่างกันสองค่า (ตั้งค่าด้วยตนเอง) สำหรับแต่ละค่า:

  • G1:
    • ด้วย VM Heap Size ตั้งค่าเป็น 16MB:
      • maxMemory: 16777216
      • getMemoryClass: 16
    • ด้วย VM Heap Size ตั้งค่าเป็น 24MB:
      • maxMemory: 25165824
      • getMemoryClass: 16
  • Moto Droid:
    • ด้วย VM Heap Size ตั้งค่าเป็น 24MB:
      • maxMemory: 25165824
      • getMemoryClass: 24
    • ด้วย VM Heap Size ตั้งค่าเป็น 16MB:
      • maxMemory: 16777216
      • getMemoryClass: 24
  • Nexus One:
    • ด้วยขนาด VM Heap ตั้งค่าเป็น 32MB:
      • maxMemory: 33554432
      • getMemoryClass: 32
    • ด้วยขนาด VM Heap ตั้งค่าเป็น 24MB:
      • maxMemory: 25165824
      • getMemoryClass: 32
  • วิวโซนิค GTab:
    • ด้วย VM Heap Size ตั้งค่าเป็น 32:
      • maxMemory: 33554432
      • getMemoryClass: 32
    • ด้วย VM Heap Size ตั้งค่าเป็น 64:
      • maxMemory: 67108864
      • getMemoryClass: 32

นอกเหนือจากข้างต้นฉันทดสอบบนแท็บเล็ต Novo7 Paladin ที่ใช้ Ice Cream Sandwich นี่เป็นรุ่นพื้นฐานของ ICS ยกเว้นว่าฉันได้รูทแท็บเล็ตผ่านกระบวนการง่าย ๆ ที่ไม่ได้แทนที่ทั้งระบบปฏิบัติการและโดยเฉพาะอย่างยิ่งไม่ได้มีส่วนต่อประสานที่จะอนุญาตให้ปรับขนาดฮีปด้วยตนเอง

สำหรับอุปกรณ์นั้นผลลัพธ์ที่ได้คือ:

  • Novo7
    • maxMemory: 62914560
    • getMemoryClass: 60

นอกจากนี้ (ต่อ Kishore ในความคิดเห็นด้านล่าง):

  • HTC One X
    • maxMemory: 67108864
    • getMemoryClass: 64

และ (ต่อความคิดเห็นของ akauppi):

  • Samsung Galaxy Core Plus
    • maxMemory: (ไม่ได้ระบุในความคิดเห็น)
    • getMemoryClass: 48
    • largeMemoryClass: 128

ตามความคิดเห็นจาก cmcromance:

  • กอง S3 กาแล็กซี่ขนาดใหญ่
    • maxMemory: 268435456
    • getMemoryClass: 64

และ (ต่อความคิดเห็นขององค์):

  • LG Nexus 5 (4.4.3) ปกติ
    • maxMemory: 201326592
    • getMemoryClass: 192
  • กองใหญ่ LG LG 5 (4.4.3)
    • maxMemory: 536870912
    • getMemoryClass: 192
  • Galaxy Nexus (4.3) ปกติ
    • maxMemory: 100663296
    • getMemoryClass: 96
  • กอง Galaxy Galaxy ขนาดใหญ่ (4.3)
    • maxMemory: 268435456
    • getMemoryClass: 96
  • Galaxy S4 Play Store Edition (4.4.2) ปกติ
    • maxMemory: 201326592
    • getMemoryClass: 192
  • Galaxy S4 Play Store Edition (4.4.2) ฮีปขนาดใหญ่
    • maxMemory: 536870912
    • getMemoryClass: 192

อุปกรณ์อื่น ๆ

  • Huawei Nexus 6P (6.0.1) ปกติ
    • maxMemory: 201326592
    • getMemoryClass: 192

ฉันยังไม่ได้ทดสอบทั้งสองวิธีโดยใช้ Android พิเศษ: largeHeap = "true" ตัวเลือกรายการที่มีให้ตั้งแต่ Honeycomb แต่ด้วย cmcromance และ tencent เรามีค่าขนาดใหญ่ตัวอย่างบางอย่างตามที่รายงานข้างต้น

ฉันคาดหวัง (ซึ่งดูเหมือนว่าจะได้รับการสนับสนุนโดยหมายเลข largeHeap ด้านบน) จะเป็นที่ตัวเลือกนี้จะมีผลที่คล้ายกันในการตั้งกองด้วยตนเองผ่านทางระบบปฏิบัติการที่ฝังราก - คือมันจะเพิ่มมูลค่าของmaxMemory()ในขณะที่ออกgetMemoryClass()เพียงอย่างเดียว มีวิธีอื่นคือ getLargeMemoryClass () ที่ระบุจำนวนหน่วยความจำที่อนุญาตสำหรับแอปที่ใช้การตั้งค่า largeHeap เอกสารสำหรับสถานะ getLargeMemoryClass () "แอปพลิเคชันส่วนใหญ่ไม่จำเป็นต้องใช้หน่วยความจำจำนวนนี้และควรจะอยู่กับขีด จำกัด getMemoryClass () แทน"

หากฉันเดาถูกต้องการใช้ตัวเลือกนั้นจะมีประโยชน์เช่นเดียวกับ (และภัยพิบัติ) เช่นเดียวกับการใช้พื้นที่ที่มีให้โดยผู้ใช้ที่ได้เพิ่มจำนวน heap ผ่านทางระบบปฏิบัติการที่รูต (เช่นหากแอปของคุณใช้หน่วยความจำเพิ่มเติม มันอาจจะไม่เล่นได้ดีเหมือนแอพอื่น ๆ ที่ผู้ใช้กำลังทำงานในเวลาเดียวกัน)

โปรดจำไว้ว่าคลาสหน่วยความจำไม่จำเป็นต้องมีหลายเท่าของ 8MB

เราสามารถเห็นได้จากด้านบนว่าgetMemoryClass()ผลลัพธ์ไม่เปลี่ยนแปลงสำหรับการกำหนดค่าอุปกรณ์ / OS ที่กำหนดในขณะที่ค่า maxMemory () จะเปลี่ยนไปเมื่อฮีปถูกตั้งค่าต่างกันโดยผู้ใช้

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

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

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

ในกรณีของฉันด้วยเหตุผลด้านประสิทธิภาพฉัน จำกัด แอพของฉันไปยังอุปกรณ์ที่ใช้ 2.2 และสูงกว่าและนั่นหมายความว่าอุปกรณ์เกือบทั้งหมดที่ใช้แอพของฉันจะมีหน่วยความจำระดับ 24 ขึ้นไป ดังนั้นฉันจึงสามารถออกแบบให้ใช้งานฮีปมากถึง 20MB และรู้สึกมั่นใจว่าแอพของฉันจะเล่นได้ดีกับแอพอื่น ๆ ที่ผู้ใช้อาจทำงานในเวลาเดียวกัน

แต่จะมีผู้ใช้ที่รูทไม่กี่คนที่โหลด Android เวอร์ชัน 2.2 ขึ้นไปไปยังอุปกรณ์รุ่นเก่า (เช่น G1) เมื่อคุณพบการกำหนดค่าเช่นนั้นคุณควรจะลดการใช้หน่วยความจำแม้ว่าmaxMemory()จะบอกคุณว่าคุณสามารถสูงกว่า 16MB ที่getMemoryClass()บอกคุณว่าคุณควรกำหนดเป้าหมาย และหากคุณไม่สามารถมั่นใจได้ว่าแอปของคุณจะอยู่ในงบประมาณนั้นอย่างน้อยก็ต้องแน่ใจว่าonStop()/ onResume()ทำงานได้อย่างราบรื่น

getMemoryClass()ตามที่ระบุโดย Diane Hackborn (hackbod) ด้านบนจะสามารถใช้งานได้กับ API ระดับ 5 (Android 2.0) เท่านั้นและเมื่อเธอแนะนำคุณสามารถสันนิษฐานได้ว่าฮาร์ดแวร์ทางกายภาพของอุปกรณ์ใด ๆ ที่ใช้ระบบปฏิบัติการรุ่นก่อนหน้านี้ได้รับการออกแบบ เพื่อรองรับแอพที่เหมาะสมที่สุดที่มีพื้นที่ฮีปไม่เกิน 16MB

โดยคมชัดmaxMemory()ตามเอกสารที่มีอยู่ทั้งหมดทางกลับไปที่ระดับ API 1. maxMemory()บนก่อน 2.0 รุ่นอาจจะกลับค่า 16MB แต่ฉันทำเห็นว่าใน CyanogenMod ของฉัน (มากในภายหลัง) รุ่นผู้ใช้ สามารถเลือกค่าฮีปได้ต่ำสุดที่ 12MB ซึ่งน่าจะส่งผลให้ขีด จำกัด ฮีพลดลงและดังนั้นฉันขอแนะนำให้คุณทดสอบmaxMemory()ค่าต่อไปแม้กระทั่งสำหรับเวอร์ชันของระบบปฏิบัติการก่อนหน้า 2.0 คุณอาจต้องปฏิเสธที่จะเรียกใช้ในกรณีที่ไม่น่าเป็นไปได้ที่ค่านี้จะถูกตั้งค่าต่ำกว่า 16MB หากคุณจำเป็นต้องมีตัวmaxMemory()บ่งชี้มากกว่าตัว


2
@ คาร์ลสวัสดีคาร์ลขอขอบคุณสำหรับการโพสต์ที่ยอดเยี่ยมของคุณ และฉันได้ทดสอบตัวเลือก android: largeHeap = "true" บน Galaxy S3 พร้อม JellyBean นี่คือผลลัพธ์ [maxMemory: 256.0MB, memoryClass: 64MB] (maxMemory คือ 64MB โดยไม่ใช้ตัวเลือกขนาดใหญ่)
cmcromance

1
@Carl Haha มันเป็นเกียรติอย่างมาก! :)
cmcromance

1
สำหรับ HTC One X: สูงสุดหน่วยความจำ: 67108864 หน่วยความจำระดับ: 64
Kishore

1
LG Nexus 5 (4.4.3) (ปกติ): maxMemory: 201326592, memoryClass: 192 | LG Nexus 5 (4.4.3) (ขนาดใหญ่มาก): สูงสุดหน่วยความจำ: 536870912, หน่วยความจำระดับ: 192
ian.shaun.thomas

1
เอกสารที่สวยงามมาก โปรดระบุสิ่งนี้สำหรับ Android ฉันไม่สามารถหาเอกสาร Android ที่เหมาะสมได้
Jimit Patel

20

APIอย่างเป็นทางการคือ:

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


13

Debug.getNativeHeapSize()ฉันจะคิดทำ แม้ว่าจะมีตั้งแต่ 1.0 แม้ว่า

Debugระดับมีจำนวนมากวิธีการที่ดีสำหรับการติดตามการจัดสรรและความกังวลประสิทธิภาพอื่น ๆ Activity.onLowMemory()นอกจากนี้ถ้าคุณต้องการที่จะตรวจสอบสถานการณ์ที่หน่วยความจำต่ำตรวจสอบ


ขอบคุณนีล วิธีนี้ใช้งานได้เมื่อแอปพลิเคชันทำงานโดยปิดการดีบักหรือไม่
hpique

2
ฉันค่อนข้างใหม่สำหรับสิ่งนี้ แต่ฉันไม่คิดว่าฮีปดั้งเดิมนั้นเหมือนกับฮีปของแอป (Dalvik) ที่คำถามนั้นอ้างถึง native heap จัดเตรียมการสำรองข้อมูลบิตแมปซึ่งจัดสรรโดยโค้ดเนทีฟขณะที่ heap ของแอปเก็บข้อมูลแอปพลิเคชัน Java ฉันสนใจที่จะเรียนรู้ว่าฮีปดั้งเดิมนั้นนับรวมกับขีด จำกัด ของแอพฮีปและหลังจาก 3.0 การจัดสรรจะเกิดขึ้นจริงบนฮีปของแอป Diane Hackborn (hackbod) โพสต์ในหัวข้อนี้ที่นี่: stackoverflow.com/questions/1945142/bitmaps-in-android แต่สำหรับ 3.0 ยังมีข้อมูลที่ไม่ใช่ "ดั้งเดิม" ในฮีปแอป
คาร์ล

1
ตั้งแต่อัปเดต Android ล่าสุด (อาจ KitKat 4.4) บิตแมปอยู่ใน JVM heap
akauppi

13

นี่คือวิธีที่คุณทำ:

รับขนาดฮีพสูงสุดที่แอปสามารถใช้:

Runtime runtime = Runtime.getRuntime();
long maxMemory=runtime.maxMemory();

รับจำนวนฮีปที่แอปของคุณใช้ในปัจจุบัน:

long usedMemory=runtime.totalMemory() - runtime.freeMemory();

รับจำนวนฮีปที่แอปของคุณสามารถใช้งานได้ (หน่วยความจำที่มีอยู่):

long availableMemory=maxMemory-usedMemory;

และเพื่อจัดรูปแบบแต่ละอย่างคุณสามารถใช้:

String formattedMemorySize=Formatter.formatShortFileSize(context,memorySize); 

5

ส่งคืนขนาดฮีพสูงสุดเป็นไบต์:

Runtime.getRuntime().maxMemory()

ฉันใช้ ActivityManager.getMemoryClass () แต่ใน CyanogenMod 7 (ฉันไม่ได้ทดสอบที่อื่น) จะส่งคืนค่าผิดถ้าผู้ใช้กำหนดขนาดฮีปด้วยตนเอง


เนื่องจากเอกสารสำหรับgetMemoryClassดูเหมือนจะบอกเป็นนัยว่าจำนวนอาจไม่เท่ากับขนาดฮีปที่มีสำหรับ vm ของคุณและเนื่องจากเอกสารสำหรับgetNativeHeapSize... เงียบขรึมฉันคิดว่าRuntime.getRuntime().maxMemory()เป็นคำตอบที่ดีที่สุด
คณะกรรมการ บริษัท

3

การดำเนินการบางอย่างรวดเร็วกว่า java heap space manager การดำเนินการล่าช้าบางครั้งสามารถเพิ่มพื้นที่หน่วยความจำได้ คุณสามารถใช้วิธีนี้เพื่อหลีกเลี่ยงข้อผิดพลาดขนาดฮีพ:

waitForGarbageCollector(new Runnable() {
  @Override
  public void run() {

    // Your operations.
  }
});

/**
 * Measure used memory and give garbage collector time to free up some
 * space.
 *
 * @param callback Callback operations to be done when memory is free.
 */
public static void waitForGarbageCollector(final Runnable callback) {

  Runtime runtime;
  long maxMemory;
  long usedMemory;
  double availableMemoryPercentage = 1.0;
  final double MIN_AVAILABLE_MEMORY_PERCENTAGE = 0.1;
  final int DELAY_TIME = 5 * 1000;

  runtime =
    Runtime.getRuntime();

  maxMemory =
    runtime.maxMemory();

  usedMemory =
    runtime.totalMemory() -
    runtime.freeMemory();

  availableMemoryPercentage =
    1 -
    (double) usedMemory /
    maxMemory;

  if (availableMemoryPercentage < MIN_AVAILABLE_MEMORY_PERCENTAGE) {

    try {
      Thread.sleep(DELAY_TIME);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

    waitForGarbageCollector(
      callback);
  } else {

    // Memory resources are availavle, go to next operation:

    callback.run();
  }
}

ผ่านการทดสอบดี คุณสามารถอธิบายสองสิ่งเหล่านี้ได้: มีอยู่หน่วยความจำเปอร์เซ็นและ MIN_AVAILABLE_MEMORY_PERCENTAGE คำอธิบายบางอย่าง?
Noor Hossain

1
AvailableMemoryPercentageเป็นไปตามสูตร: จำนวนหน่วยความจำของอุปกรณ์ว่างในขณะนี้ MIN_AVAILABLE_MEMORY_PERCENTAGEเป็นพารามิเตอร์ที่กำหนดเองของคุณซึ่งเป็นเกณฑ์ที่คุณเริ่มรอให้ตัวรวบรวมขยะทำงานได้
Zon

1

Asus Nexus 7 (2013) 32Gig: getMemoryClass () = 192 maxMemory () = 201326592

ฉันทำผิดพลาดในการทำต้นแบบเกมของฉันบน Nexus 7 แล้วค้นพบว่าหน่วยความจำในแทบจะในทันทีบนแท็บเล็ตทั่วไป 4.04 ของภรรยาของฉัน (memoryclass 48, maxmemory 50331648)

ฉันจะต้องปรับโครงสร้างโครงการของฉันเพื่อโหลดทรัพยากรให้น้อยลงเมื่อฉันพบว่าหน่วยความจำระดับต่ำ
มีวิธีใน Java เพื่อดูขนาดกองปัจจุบันหรือไม่ (ฉันสามารถดูได้อย่างชัดเจนใน logCat เมื่อทำการดีบั๊ก แต่ฉันต้องการวิธีที่จะเห็นมันในรหัสเพื่อปรับตัวเช่นถ้า currentheap> (maxmemory / 2) ยกเลิกการโหลดบิตแมปคุณภาพสูงโหลดคุณภาพต่ำ


เมื่อวันที่ Nexus7-2013, getLargeMemoryClass () = 512.
akauppi

0

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


ฉันหมายถึงโดยทางโปรแกรม ชี้แจงคำถาม ขอบคุณ
hpique

1
ฉันขอแนะนำให้คุณดูที่โพสต์นี้โดยหนึ่งในโปรแกรมเมอร์แพลตฟอร์ม Android แล้ว: stackoverflow.com/questions/2298208/ …
Steve Haley

0
Runtime rt = Runtime.getRuntime();
rt.maxMemory()

ค่าคือ b

ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.getMemoryClass()

ค่าคือ MB


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