CronetEngine

public abstract class CronetEngine

คลาสย่อยโดยตรงที่ทราบ
คลาสย่อยทางอ้อมที่ทราบ
JavaCronetEngine

java.net.HttpURLConnection ที่ขับเคลื่อนโดย CronetEngine


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

สรุป

ประเภทที่ซ้อนกัน

เครื่องมือสร้างสำหรับ CronetEngine ซึ่งอนุญาตให้กำหนดค่ารันไทม์ของ CronetEngine

คลาสที่มีเมธอดสำหรับโหลดไลบรารีแบบเนทีฟของ Cronet

ค่าคงที่

static final int

ไม่ทราบค่าของจำนวนคำขอที่ใช้งานอยู่

static final int

ไม่ทราบค่าของเมตริกการเชื่อมต่อ

static final int

การประมาณประเภทการเชื่อมต่อที่มีประสิทธิภาพคือ 2G

static final int

การประมาณประเภทการเชื่อมต่อที่มีประสิทธิภาพคือ 3G

static final int

การประมาณประเภทการเชื่อมต่อที่มีประสิทธิภาพคือ 4G

static final int

อุปกรณ์ออฟไลน์อยู่

static final int

ค่าประมาณประเภทการเชื่อมต่อที่มีประสิทธิภาพคือ 2G ที่ช้า

static final int

ไม่ทราบค่าประมาณของประเภทการเชื่อมต่อที่มีผล

static final long

ค่าที่จะใช้เพื่อยกเลิกการเชื่อมโยงเครือข่ายก่อนหน้า

เครื่องมือสร้างสาธารณะ

เมธอดสาธารณะ

void

ลงทะเบียน Listener ที่จะเรียกใช้หลังจากสิ้นสุดคำขอแต่ละรายการพร้อมข้อมูลคำขอ

void

ลงทะเบียน Listener ที่จะได้รับการเรียกใช้เมื่อใดก็ตามที่เครื่องมือประมาณคุณภาพเครือข่ายพบเวลาในการรับส่งที่วัดได้

void

ลงทะเบียน Listener ที่จะได้รับการเรียกใช้เมื่อใดก็ตามที่เครื่องมือประมาณคุณภาพเครือข่ายพบการวัดอัตราการส่งข้อมูลตัวอย่าง

void
bindToNetwork(long networkHandle)

เชื่อมโยงเครื่องมือกับแฮนเดิลเครือข่ายที่ระบุ

void
configureNetworkQualityEstimatorForTesting(
    boolean useLocalHostRequests,
    boolean useSmallerResponses,
    boolean disableOfflineCheck
)

กำหนดค่าตัวประมาณคุณภาพเครือข่ายสำหรับการทดสอบ

abstract URLStreamHandlerFactory

สร้าง URLStreamHandlerFactory เพื่อจัดการการรับส่งข้อมูล HTTP และ HTTPS

int

แสดงผลจำนวนคำขอที่ใช้งานอยู่

int

แสดงผลการประมาณอัตราการส่งข้อมูลดาวน์สตรีม (เป็นกิโลบิตต่อวินาที) ที่คำนวณโดยเครื่องมือประมาณคุณภาพเครือข่าย

int

แสดงค่าประมาณของประเภทการเชื่อมต่อที่มีประสิทธิภาพซึ่งคำนวณโดยเครื่องมือประมาณคุณภาพเครือข่าย

abstract byte[]

เลิกใช้เมธอดนี้แล้ว

ใน Cronet เวอร์ชันใหม่ การดำเนินการนี้จะแสดงผลเป็นอาร์เรย์ว่างเปล่าเสมอ

int

แสดงผลค่าประมาณ RTT ของ HTTP (เป็นมิลลิวินาที) ที่คำนวณโดยเครื่องมือประมาณคุณภาพเครือข่าย

int

แสดงผลค่าประมาณ RTT ของการรับส่ง (เป็นมิลลิวินาที) ที่คำนวณโดยตัวประมาณคุณภาพเครือข่าย

abstract String
abstract UrlRequest.Builder
newUrlRequestBuilder(
    String url,
    UrlRequest.Callback callback,
    Executor executor
)

สร้างเครื่องมือสร้างสำหรับ UrlRequest

abstract URLConnection

สร้างการเชื่อมต่อใหม่กับทรัพยากรที่ระบุโดย URLurl

void

นำเครื่องมือฟังคำขอที่เสร็จสมบูรณ์ออก

void

นำ Listener ของเวลาในการรับส่งออกหากลงทะเบียนไว้ก่อนหน้านี้ด้วย addRttListener

void

นำ Listener ของปริมาณงานออก

abstract void

ปิด CronetEngine หากไม่มีคำขอที่ใช้งานอยู่ ไม่เช่นนั้นจะเกิดข้อยกเว้น

void
startNetLogToDisk(String dirPath, boolean logAll, int maxSize)

เริ่มการบันทึก NetLog ไปยังไดเรกทอรีที่ระบุโดยมีขนาดที่จำกัด

abstract void
startNetLogToFile(String fileName, boolean logAll)

เริ่มการบันทึก NetLog ไปยังไฟล์

abstract void

หยุดการบันทึก NetLog และล้างข้อมูลไฟล์ลงในดิสก์

ค่าคงที่

ACTIVE_REQUEST_COUNT_UNKNOWN

public static final int ACTIVE_REQUEST_COUNT_UNKNOWN = -1

ไม่ทราบค่าของจำนวนคำขอที่ใช้งานอยู่

CONNECTION_METRIC_UNKNOWN

public static final int CONNECTION_METRIC_UNKNOWN = -1

ไม่ทราบค่าของเมตริกการเชื่อมต่อ

EFFECTIVE_CONNECTION_TYPE_2G

public static final int EFFECTIVE_CONNECTION_TYPE_2G = 3

การประมาณประเภทการเชื่อมต่อที่มีประสิทธิภาพคือ 2G

ดูเพิ่มเติม
getEffectiveConnectionType

EFFECTIVE_CONNECTION_TYPE_3G

public static final int EFFECTIVE_CONNECTION_TYPE_3G = 4

การประมาณประเภทการเชื่อมต่อที่มีประสิทธิภาพคือ 3G

ดูเพิ่มเติม
getEffectiveConnectionType

EFFECTIVE_CONNECTION_TYPE_4G

public static final int EFFECTIVE_CONNECTION_TYPE_4G = 5

การประมาณประเภทการเชื่อมต่อที่มีประสิทธิภาพคือ 4G

ดูเพิ่มเติม
getEffectiveConnectionType

EFFECTIVE_CONNECTION_TYPE_OFFLINE

public static final int EFFECTIVE_CONNECTION_TYPE_OFFLINE = 1

อุปกรณ์ออฟไลน์อยู่

ดูเพิ่มเติม
getEffectiveConnectionType

EFFECTIVE_CONNECTION_TYPE_SLOW_2G

public static final int EFFECTIVE_CONNECTION_TYPE_SLOW_2G = 2

ค่าประมาณประเภทการเชื่อมต่อที่มีประสิทธิภาพคือ 2G ที่ช้า

ดูเพิ่มเติม
getEffectiveConnectionType

EFFECTIVE_CONNECTION_TYPE_UNKNOWN

public static final int EFFECTIVE_CONNECTION_TYPE_UNKNOWN = 0

ไม่ทราบค่าประมาณของประเภทการเชื่อมต่อที่มีผล

ดูเพิ่มเติม
getEffectiveConnectionType

UNBIND_NETWORK_HANDLE

public static final long UNBIND_NETWORK_HANDLE = -1

ค่าที่จะใช้เพื่อยกเลิกการเชื่อมโยงเครือข่ายก่อนหน้า

เครื่องมือสร้างสาธารณะ

CronetEngine

public CronetEngine()

เมธอดสาธารณะ

addRequestFinishedListener

public void addRequestFinishedListener(RequestFinishedInfo.Listener listener)

ลงทะเบียน Listener ที่จะเรียกใช้หลังจากสิ้นสุดคำขอแต่ละรายการพร้อมข้อมูลคำขอ

ระบบจะเรียกใช้ Listener ใน java.util.concurrent.Executor ที่ Listener ระบุ

พารามิเตอร์
RequestFinishedInfo.Listener listener

เครื่องรับฟังสำหรับคำขอที่เสร็จสมบูรณ์

addRttListener

public void addRttListener(NetworkQualityRttListener listener)

ลงทะเบียน Listener ที่จะได้รับการเรียกใช้เมื่อใดก็ตามที่เครื่องมือประมาณคุณภาพเครือข่ายพบเวลาในการรับส่งที่วัดได้ ต้องเรียกใช้หลังจาก enableNetworkQualityEstimator และจะส่งข้อยกเว้นหากไม่เรียกใช้ ระบบอาจบันทึกเวลาในการรับส่งข้อมูลที่เลเยอร์ต่างๆ ของสแต็กเครือข่าย ซึ่งรวมถึง TCP, QUIC และที่เลเยอร์คำขอ URL ระบบจะเรียกใช้ Listener ใน java.util.concurrent.Executor ที่ส่งไปยัง enableNetworkQualityEstimator

พารามิเตอร์
NetworkQualityRttListener listener

เครื่องมือฟังเวลาในการรับส่งข้อมูล

addThroughputListener

public void addThroughputListener(NetworkQualityThroughputListener listener)

ลงทะเบียน Listener ที่จะได้รับการเรียกใช้เมื่อใดก็ตามที่เครื่องมือประมาณคุณภาพเครือข่ายพบการวัดอัตราการส่งข้อมูลตัวอย่าง ต้องเรียกใช้หลังจาก enableNetworkQualityEstimator การสังเกตปริมาณงานจะคำนวณโดยการวัดไบต์ที่อ่านผ่านอินเทอร์เฟซเครือข่ายที่ใช้งานอยู่ ในช่วงเวลาที่ได้รับคำตอบจาก URL อย่างน้อย 1 รายการ ระบบจะเรียกใช้ Listener ใน java.util.concurrent.Executor ที่ส่งไปยัง enableNetworkQualityEstimator

พารามิเตอร์
NetworkQualityThroughputListener listener

ผู้ฟังของอัตราการส่งข้อมูล

bindToNetwork

public void bindToNetwork(long networkHandle)

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

พารามิเตอร์
long networkHandle

แฮนเดิลเครือข่ายที่จะเชื่อมโยงเครื่องมือ ระบุ UNBIND_NETWORK_HANDLE เพื่อยกเลิกการเชื่อมโยง

configureNetworkQualityEstimatorForTesting

public void configureNetworkQualityEstimatorForTesting(
    boolean useLocalHostRequests,
    boolean useSmallerResponses,
    boolean disableOfflineCheck
)

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

พารามิเตอร์
boolean useLocalHostRequests

รวมคำขอไปยัง localhost ในการประมาณ

boolean useSmallerResponses

รวมการตอบกลับขนาดเล็กในการประมาณปริมาณงาน

boolean disableOfflineCheck

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

createURLStreamHandlerFactory

public abstract URLStreamHandlerFactory createURLStreamHandlerFactory()

สร้าง URLStreamHandlerFactory เพื่อจัดการการรับส่งข้อมูล HTTP และ HTTPS คุณติดตั้งอินสแตนซ์ของคลาสนี้ผ่าน setURLStreamHandlerFactory ได้ ดังนั้นจึงใช้ CronetEngine นี้โดยค่าเริ่มต้นสำหรับคำขอทั้งหมดที่สร้างผ่าน openConnection

Cronet ไม่ใช้ฟีเจอร์ HTTP บางอย่างที่ระบบมีให้ ดังนี้

  • แคช HTTP ที่ติดตั้งผ่าน HttpResponseCache.install()
  • วิธีการตรวจสอบสิทธิ์ HTTP ที่ติดตั้งผ่าน setDefault
  • ที่เก็บคุกกี้ HTTP ที่ติดตั้งผ่าน setDefault

แม้ว่า Cronet จะรองรับและแนะนำให้ใช้คำขอที่ใช้โปรโตคอล HTTPS แต่ Cronet ไม่รองรับ API ของ HttpsURLConnection การไม่รองรับนี้ยังรวมถึงการไม่ใช้ฟีเจอร์ HTTPS บางอย่างที่ระบบมีให้ด้วย

การคืนสินค้า
URLStreamHandlerFactory

อินสแตนซ์ URLStreamHandlerFactory ที่ติดตั้งใช้งานโดย CronetEngine นี้

getActiveRequestCount

public int getActiveRequestCount()

แสดงผลจำนวนคำขอที่ใช้งานอยู่

คำขอจะ "ใช้งานอยู่" ใน UrlRequest.start() โดยสมมติว่าเมธอดนั้นไม่ได้ส่งข้อยกเว้น โดยจะไม่มีการใช้งานเมื่อการเรียกกลับทั้งหมดเสร็จสิ้นแล้ว และจะเรียกกลับเพิ่มเติมในอนาคตไม่ได้ ในทางปฏิบัติ นั่นหมายความว่าคำขอจะไม่ได้ใช้งานเมื่อ onSucceeded/onCanceled/onFailed ส่งคืนแล้ว และผู้ฟังที่เสร็จสิ้นคำขอทั้งหมดส่งคืนแล้ว วงจรของคำขอ Cronet เพื่อดูข้อมูลเพิ่มเติม

getDownstreamThroughputKbps

public int getDownstreamThroughputKbps()

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

การคืนสินค้า
int

การประมาณปริมาณงานดาวน์สตรีมเป็นกิโลบิตต่อวินาที

getEffectiveConnectionType

public int getEffectiveConnectionType()

แสดงค่าประมาณของประเภทการเชื่อมต่อที่มีประสิทธิภาพซึ่งคำนวณโดยเครื่องมือประมาณคุณภาพเครือข่าย โทรหา enableNetworkQualityEstimator เพื่อเริ่มคำนวณค่านี้

การคืนสินค้า
int

ประเภทการเชื่อมต่อโดยประมาณ ค่าที่แสดงผลจะเป็นค่าใดค่าหนึ่งของ EFFECTIVE_CONNECTION_TYPE_*

getGlobalMetricsDeltas

public abstract byte[] getGlobalMetricsDeltas()

getHttpRttMs

public int getHttpRttMs()

แสดงผลค่าประมาณ RTT ของ HTTP (เป็นมิลลิวินาที) ที่คำนวณโดยเครื่องมือประมาณคุณภาพเครือข่าย ตั้งค่าเป็น CONNECTION_METRIC_UNKNOWN หากค่าไม่พร้อมใช้งาน ต้องเรียกใช้หลังจาก enableNetworkQualityEstimator และจะส่งข้อยกเว้นหากไม่เรียกใช้

การคืนสินค้า
int

ค่าประมาณของ RTT ของ HTTP เป็นมิลลิวินาที

getTransportRttMs

public int getTransportRttMs()

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

การคืนสินค้า
int

ค่าประมาณของ RTT ของการรับส่งข้อมูลเป็นมิลลิวินาที

getVersionString

public abstract String getVersionString()
การคืนสินค้า
String

สตริงเวอร์ชันของเครื่องยนต์ที่มนุษย์อ่านได้

newUrlRequestBuilder

public abstract UrlRequest.Builder newUrlRequestBuilder(
    String url,
    UrlRequest.Callback callback,
    Executor executor
)

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

พารามิเตอร์
String url

URL สำหรับคำขอที่สร้างขึ้น

UrlRequest.Callback callback

ออบเจ็กต์ Callback ที่เรียกใช้ในเหตุการณ์ต่างๆ

Executor executor

Executor ที่จะเรียกใช้ Callback ทั้งหมด

openConnection

public abstract URLConnection openConnection(URL url)

สร้างการเชื่อมต่อใหม่กับทรัพยากรที่ระบุโดย URLurl

หมายเหตุ: การติดตั้งใช้งาน java.net.HttpURLConnection ของ Cronet มีข้อจำกัดบางอย่าง โปรดดูรายละเอียดที่ createURLStreamHandlerFactory

พารามิเตอร์
URL url

URL ของทรัพยากรที่จะเชื่อมต่อ

การคืนสินค้า
URLConnection

อินสแตนซ์ java.net.HttpURLConnection ที่ติดตั้งใช้งานโดย CronetEngine นี้

ส่ง
java.io.IOException

หากเกิดข้อผิดพลาดขณะเปิดการเชื่อมต่อ

removeRequestFinishedListener

public void removeRequestFinishedListener(RequestFinishedInfo.Listener listener)

นำเครื่องมือฟังคำขอที่เสร็จสมบูรณ์ออก

พารามิเตอร์
RequestFinishedInfo.Listener listener

ผู้ฟังออก

removeRttListener

public void removeRttListener(NetworkQualityRttListener listener)

นำ Listener ของเวลาในการรับส่งออกหากลงทะเบียนไว้ก่อนหน้านี้ด้วย addRttListener ควรเรียกใช้หลังจากเพิ่ม NetworkQualityRttListener เพื่อหยุดรับการสังเกตการณ์

พารามิเตอร์
NetworkQualityRttListener listener

เครื่องมือฟังเวลาในการรับส่งข้อมูล

removeThroughputListener

public void removeThroughputListener(NetworkQualityThroughputListener listener)

นำ Listener ของปริมาณงานออก ควรเรียกใช้หลังจากเพิ่ม NetworkQualityThroughputListener ด้วย addThroughputListener เพื่อหยุดรับการสังเกตการณ์

พารามิเตอร์
NetworkQualityThroughputListener listener

ผู้ฟังของอัตราการส่งข้อมูล

การปิดใช้งาน

public abstract void shutdown()

ปิด CronetEngine หากไม่มีคำขอที่ใช้งานอยู่ ไม่เช่นนั้นจะเกิดข้อยกเว้น

เรียกใช้ในเธรดเครือข่ายไม่ได้ - เธรดที่ Cronet เรียกใช้ใน Executor (ซึ่งแตกต่างจากเธรดที่ Executor เรียกใช้การเรียกกลับ) อาจบล็อกจนกว่าจะล้างข้อมูลทรัพยากรทั้งหมดของ CronetEngine

startNetLogToDisk

public void startNetLogToDisk(String dirPath, boolean logAll, int maxSize)

เริ่มการบันทึก NetLog ไปยังไดเรกทอรีที่ระบุโดยมีขนาดที่จำกัด NetLog จะมีเหตุการณ์ที่ปล่อยออกมาจาก CronetEngine ที่ใช้งานอยู่ทั้งหมด NetLog มีประโยชน์ในการแก้ไขข้อบกพร่อง เมื่อการบันทึกหยุดทำงาน stopNetLog ระบบจะเขียนข้อมูลลงใน netlog.json ใน dirPath หากการบันทึกหยุดชะงัก คุณสามารถต่อไฟล์ที่อยู่ในไดเรกทอรีย่อย .inprogress ด้วยตนเองได้โดยใช้ https://chromium.googlesource.com/chromium/src/+/main/net/tools/stitch_net_log_files.py คุณดูบันทึกได้โดยใช้เบราว์เซอร์ Chrome ไปที่ chrome://net-internals/#import

พารามิเตอร์
String dirPath

ไดเรกทอรีที่จะสร้างไฟล์ netlog.json โดย dirPath ต้องมีอยู่แล้ว ต้องไม่มีไฟล์ NetLog ในไดเรกทอรี หากมีการบันทึกอย่างต่อเนื่อง ระบบจะไม่สนใจเมธอดนี้

boolean logAll

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

int maxSize

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

startNetLogToFile

public abstract void startNetLogToFile(String fileName, boolean logAll)

เริ่มการบันทึก NetLog ไปยังไฟล์ NetLog จะมีเหตุการณ์ที่ปล่อยออกมาจาก CronetEngine ที่ใช้งานอยู่ทั้งหมด NetLog มีประโยชน์ในการแก้ไขข้อบกพร่อง คุณดูไฟล์ได้โดยใช้เบราว์เซอร์ Chrome ไปที่ chrome://net-internals/#import

พารามิเตอร์
String fileName

เส้นทางไฟล์แบบเต็ม ต้องระบุ หากมีไฟล์อยู่แล้ว ระบบจะตัดทอนไฟล์ก่อนเริ่มต้น หากมีการบันทึกอย่างต่อเนื่อง ระบบจะไม่สนใจเมธอดนี้

boolean logAll

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

stopNetLog

public abstract void stopNetLog()

หยุดการบันทึก NetLog และล้างข้อมูลไฟล์ลงในดิสก์ หากเซสชันการบันทึกไม่ได้กำลังดำเนินการอยู่ ระบบจะไม่สนใจการเรียกนี้