จะดึงอินสแตนซ์ที่ทำงานอยู่ของ AsyncTask ได้อย่างไร

ฉันกำลังใช้ฟีเจอร์ที่คล้ายกับ DownloadManager ในแอปพลิเคชันที่ฉันกำลังพัฒนา ฉันใช้ AsyncTask เพื่อดันการดาวน์โหลดไปที่พื้นหลัง
AsyncTask นี้อยู่ในบริการที่ชื่อเช่น DownloadService ซึ่งสร้างอินสแตนซ์ในกิจกรรมหนึ่งของฉัน ซึ่งหมายความว่าการดาวน์โหลดหลายรายการสามารถเริ่มต้นได้จากอินสแตนซ์ที่แตกต่างกันของกิจกรรม
สิ่งที่ฉันต้องการทำคือการมีกิจกรรมเฉพาะที่ฉันสามารถให้การดาวน์โหลดที่กำลังทำงานอยู่ทั้งหมดแสดงความคืบหน้าและมีปุ่มเพื่อหยุดชั่วคราวหรือดำเนินการต่อ ดาวน์โหลด


person 2hamed    schedule 23.06.2012    source แหล่งที่มา


คำตอบ (2)


ในกรณีที่คุณต้องการสิ่งนี้ คุณสามารถจัดเก็บ Async Tasks ทั้งหมดที่เริ่มต้นในบริการไว้ใน Array จากนั้นตรวจสอบสถานะด้วย http://developer.android.com/reference/android/os/AsyncTask.html#getStatus%28%29

หวังว่านี่จะช่วยได้!

person Dimitris Makris    schedule 23.06.2012
comment
สมมติว่าฉันสร้างอาร์เรย์นี้ที่คุณพูด ฉันจะเข้าถึงกิจกรรมดังกล่าวในกิจกรรมอื่นที่ไม่ใช่กิจกรรมที่สร้างขึ้นได้อย่างไร และฉันจะเพิ่มเข้าไปในกิจกรรมต่างๆ ได้อย่างไร? - person 2hamed; 24.06.2012

แทนที่จะใส่ DownloadService ไว้ในกิจกรรม ให้ใส่ไว้ในคลาส Application ของแอปในฐานะสมาชิกของคลาสแทน เนื่องจากคลาสนี้จะมีอินสแตนซ์เพียงอินสแตนซ์เดียวต่อแอปพลิเคชัน จากนั้นคุณสามารถเรียกดูข้อมูลดังกล่าวได้ในกิจกรรมของคุณโดยโทร ((YourApplication)getApplication()).getDownloadService() คุณจะต้อง:

  1. สร้างคลาสที่ขยาย Application เช่น YourApplication
  2. ประกาศในแท็ก <application> ของไฟล์ Manifest เป็น android:name="YourApplication"
  3. ใช้ในกิจกรรมของคุณโดยเรียกใช้ ((YourApplication)getApplication()).someMethodToGetDownloadService()
person Jeshurun    schedule 23.06.2012
comment
อย่างที่ฉันบอกว่า DownloadService เป็นคลาสที่แยกจากกัน (ฉันไม่ได้เก็บมันไว้ในกิจกรรมของฉัน ฉันแค่ยกตัวอย่างมันไว้ตรงนั้น) - person 2hamed; 24.06.2012
comment
เยี่ยมยอดแล้วสร้างอินสแตนซ์ในคลาส Application ของคุณ ดึงข้อมูลในกิจกรรมและส่งงานไป จากนั้นคุณควรจะสามารถมีกิจกรรมความคืบหน้าที่คุณสามารถดึงงานที่กำลังทำงานอยู่ทั้งหมดและอนุญาตให้ดำเนินการได้ - person Jeshurun; 24.06.2012