คำถามติดแท็ก android-handler

13
ตัวจัดการ vs AsyncTask กับเธรด [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน10 เดือนที่ผ่านมา ผมสับสนเล็กน้อยเกี่ยวกับความแตกต่างระหว่างHandlers, AsyncTaskและThreadsใน Android ฉันอ่านบล็อกและคำถามไม่กี่ที่นี่ใน StackOverflow Handlerเป็นเธรดพื้นหลังที่ให้คุณสามารถสื่อสารกับ UI ได้ Handlerการอัปเดตแถบความคืบหน้าเช่นที่ควรจะทำผ่านทาง การใช้ตัวจัดการคุณมีข้อได้เปรียบMessagingQueuesดังนั้นหากคุณต้องการกำหนดเวลาข้อความหรืออัปเดตองค์ประกอบ UI หลายรายการหรือทำงานซ้ำ AsyncTaskที่จริงแล้วมันคล้ายกันHandlerแต่ใช้ไม่ได้ในเธรด UI ดังนั้นจึงเป็นการดีสำหรับการดึงข้อมูลเช่นดึงข้อมูลบริการเว็บ หลังจากนั้นคุณสามารถโต้ตอบกับ UI Threadแต่ไม่สามารถโต้ตอบกับ UI ได้ แต่ให้เธรดขั้นพื้นฐาน "มากขึ้นและคุณจะพลาดภาพนามธรรมAsyncTaskทั้งหมด อย่างไรก็ตามฉันต้องการให้การเชื่อมต่อซ็อกเก็ตทำงานอยู่ในบริการ สิ่งนี้ควรถูกเรียกใช้ในตัวจัดการหรือเธรดหรือแม้แต่AsyncTask? การโต้ตอบกับ UI ไม่จำเป็นเลย มันสร้างความแตกต่างในแง่ของประสิทธิภาพที่ฉันใช้หรือไม่ ในขณะเดียวกันเอกสารได้รับการปรับปรุงอย่างมาก

16
การรันโค้ดในเธรดหลักจากเธรดอื่น
ในบริการ android ฉันได้สร้างเธรด (s) สำหรับการทำงานพื้นหลังบางอย่าง Runnableฉันมีสถานการณ์ที่หัวข้อที่ต้องการที่จะโพสต์งานบางอย่างในคิวข้อความหัวข้อหลักของตัวอย่างที่ มีวิธีรับHandlerเธรดหลักและโพสต์Message/ Runnableไปยังเธรดอื่นหรือไม่ ขอบคุณ

7
คลาสตัวจัดการนี้ควรเป็นแบบคงที่หรืออาจเกิดการรั่วไหล: IncomingHandler
ฉันกำลังพัฒนาแอปพลิเคชัน Android 2.3.3 พร้อมบริการ ฉันมีสิ่งนี้ในบริการที่จะสื่อสารกับกิจกรรมหลัก: public class UDPListenerService extends Service { private static final String TAG = "UDPListenerService"; //private ThreadGroup myThreads = new ThreadGroup("UDPListenerServiceWorker"); private UDPListenerThread myThread; /** * Handler to communicate from WorkerThread to service. */ private Handler mServiceHandler; // Used to receive messages from the Activity final Messenger …

6
ยกเลิกกระบวนการ handler.postdelayed
ฉันกำลังใช้handler.postDelayed()เพื่อสร้างช่วงเวลารอก่อนที่แอปของฉันจะเริ่มขึ้น ในช่วงเวลารอฉันกำลังแสดงกล่องโต้ตอบพร้อมแถบความคืบหน้าและปุ่มยกเลิก ปัญหาของฉันคือฉันไม่สามารถหาวิธียกเลิกงานpostDelayedก่อนเวลาที่ผ่านไป

6
วิธีลบการเรียกกลับทั้งหมดจากตัวจัดการได้อย่างไร
ฉันมีHandlerจากกิจกรรมย่อยของฉันที่ถูกเรียกโดยหลักกิจกรรม ตัวจัดการนี้ถูกใช้โดยคลาสย่อยของpostDelayRunnables บางตัวและฉันไม่สามารถจัดการมันได้ ตอนนี้ในonStopเหตุการณ์ฉันต้องลบพวกเขาก่อนที่จะจบกิจกรรม (อย่างใดฉันเรียกว่าfinish()แต่มันยังคงโทรอีกครั้งและอีกครั้ง) มีอยู่แล้วเพื่อลบการเรียกกลับทั้งหมดจากตัวจัดการ

8
Android: ฉันควรใช้ Handler () เมื่อใดและควรใช้ Thread เมื่อใด
เมื่อฉันต้องการบางสิ่งบางอย่างเพื่อให้ทำงานแบบอะซิงโครนัสเช่นงานที่ทำงานเป็นเวลานานหรือตรรกะที่ใช้เครือข่ายหรือไม่ว่าด้วยเหตุผลใดก็ตามการเริ่มเธรดใหม่และเรียกใช้งานจะทำงานได้ดี การสร้างHandlerและเรียกใช้งานได้เช่นกัน อะไรคือความแตกต่าง? ฉันควรใช้แต่ละตัวเมื่อใด ข้อดี / เหตุผลในการใช้ a Handlerและ not a Threadคืออะไร? PS - AsyncTaskเพื่อประโยชน์ของคำถามนี้ขอไม่สนใจ - Handler().postDelayedกรณีการใช้งานเป็นเรื่องที่ชัดเจนสำหรับฉันสำหรับคำถามนี้สมมติว่าฉันต้องการให้งานเริ่มทันที

4
หยุด handler.postDelayed ()
ฉันเรียกตัวจัดการหลายตัวโดยตัวจัดการใหม่ () postDelayed (Runnable ใหม่ () ..... ฉันจะหยุดมันได้อย่างไรเมื่อฉันคลิกที่ด้านหลัง? public class MyActivity extends AppCompatActivity implements OnClickListener { private Button btn; private Handler handler; private Runnable myRunnable; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); btn = (Button) findViewById(R.id.trainingsstart); btn.setOnClickListener(this); } @Override public void onClick(View v) { Handler handler = new Handler(); Runnable …

6
Handler เป็นนามธรรมไม่สามารถสร้างอินสแตนซ์ได้
ฉันกำลังพยายามใช้Handlerแอปในแอปของฉัน แต่เมื่อฉันยกตัวอย่างเช่นนี้: Handler handler = new Handler(); ฉันได้รับข้อผิดพลาดต่อไปนี้ Gradle: error: Handler is abstract; cannot be instantiated และเมื่อฉันตรวจสอบวิธีแก้ปัญหาก็ขอให้ฉันใช้วิธีเหล่านี้: Handler handler = new Handler() { @Override public void close() { } @Override public void flush() { } @Override public void publish(LogRecord record) { } }; ฉันไม่เคยใช้มาHandlersก่อนและฉันใช้มันเพื่อเรียกใช้เมธอดหลังจากล่าช้าไปบ้าง เพื่อให้บรรลุสิ่งนั้นฉันได้ใช้: handler.postDelayed(new Runnable() { @Override public …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.