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

ใช้สำหรับคำถามเกี่ยวกับ android.os AsyncTask

18
java.lang.IllegalStateException: ไม่สามารถดำเนินการนี้หลังจาก onSaveInstanceState
ฉันใช้ไลบรารีการสนับสนุนสำหรับแอปของฉัน ใน FragmentActivity ของฉันฉันใช้ AsyncTask เพื่อดาวน์โหลดข้อมูลจากอินเทอร์เน็ต ในเมธอด onPreExecute () ฉันเพิ่ม Fragment และในเมธอด onPostExecute () ฉันลบมันอีกครั้ง เมื่อการวางแนวมีการเปลี่ยนแปลงในระหว่างนี้ฉันจะได้รับข้อยกเว้นดังกล่าวข้างต้น โปรดดูรายละเอียด: private class onFriendAddedAsyncTask extends AsyncTask<String, Void, String> { DummyFragment dummyFragment; FragmentManager fm; FragmentTransaction ft; @Override protected void onPreExecute() { Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPreExecute"); dummyFragment = DummyFragment.newInstance(); fm = getSupportFragmentManager(); ft = fm.beginTransaction(); ft.add(dummyFragment, "dummy_fragment"); ft.commit(); …

4
AsyncTaskLoader กับ AsyncTask
ตั้งแต่Honeycombและมันเป็นไปได้ที่จะใช้งานv4 Compatibility Library AsyncTaskLoaderจากสิ่งที่ฉันเข้าใจAsyncTaskLoaderสามารถอยู่รอดผ่านการเปลี่ยนแปลงการกำหนดค่าเช่นการพลิกหน้าจอ แนะนำให้ใช้AsyncTaskLoaderแทนAsyncTask? ไม่LoaderManagerได้รับในภาพเกินไป? แต่ฉันไม่พบตัวอย่างที่ดีเกี่ยวกับวิธีใช้ไฟล์AsyncTaskLoader. เอกสารยังไม่มีตัวอย่าง ใครช่วยให้ตัวอย่างที่ดี

5
ดำเนินการ AsyncTask หลาย ๆ ครั้ง
ในกิจกรรมของฉันฉันใช้คลาสที่ขยายจาก AsyncTask และพารามิเตอร์ซึ่งเป็นอินสแตนซ์ของ AsyncTask นั้น เมื่อฉันโทรไปmInstanceOfAT.execute("")ทุกอย่างเรียบร้อยดี แต่แอพขัดข้องเมื่อฉันกดปุ่มอัปเดตซึ่งเรียก AsyncTask อีกครั้ง (ในกรณีที่งานเครือข่ายไม่ทำงาน) สาเหตุจะปรากฏข้อยกเว้นซึ่งระบุว่า ไม่สามารถเรียกใช้งานได้: งานได้ถูกดำเนินการไปแล้ว (สามารถดำเนินการได้เพียงครั้งเดียว) ฉันได้ลองโทรยกเลิก (true) สำหรับอินสแตนซ์ของ Asyctask แล้ว แต่ก็ใช้ไม่ได้เช่นกัน ทางออกเดียวคือการสร้างอินสแตนซ์ใหม่ของ Asyntask เป็นวิธีที่ถูกต้องหรือไม่? ขอบคุณ

7
Android - การตั้งค่าการหมดเวลาสำหรับ AsyncTask?
ฉันมีAsyncTaskคลาสที่ฉันดำเนินการซึ่งดาวน์โหลดรายการข้อมูลจำนวนมากจากเว็บไซต์ ในกรณีที่ผู้ใช้ปลายทางมีการเชื่อมต่อข้อมูลที่ช้ามากหรือขาด ๆ หาย ๆ ในขณะที่ใช้งานฉันต้องการให้AsyncTaskหมดเวลาหลังจากช่วงเวลาหนึ่ง แนวทางแรกของฉันในเรื่องนี้เป็นดังนี้: MyDownloader downloader = new MyDownloader(); downloader.execute(); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { if ( downloader.getStatus() == AsyncTask.Status.RUNNING ) downloader.cancel(true); } }, 30000 ); หลังจากเริ่มต้นAsyncTaskตัวจัดการใหม่จะเริ่มทำงานซึ่งจะยกเลิกAsyncTaskหลังจาก 30 วินาทีหากยังทำงานอยู่ นี่เป็นแนวทางที่ดีหรือไม่? หรือมีบางอย่างในตัวAsyncTaskที่เหมาะสมกว่าสำหรับจุดประสงค์นี้?

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

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

9
วิธีที่ดีที่สุดในการยกเลิกการรัน AsyncTask
ฉันใช้งานการดึงไฟล์เสียงระยะไกลและการดำเนินการเล่นไฟล์เสียงในเธรดพื้นหลังโดยใช้AsyncTask. Cancellableแถบความคืบหน้าจะแสดงเวลาที่สามารถดึงข้อมูลการดำเนินงานวิ่ง ฉันต้องการยกเลิก / ยกเลิกการAsyncTaskทำงานเมื่อผู้ใช้ยกเลิก (ตัดสินใจต่อต้าน) การดำเนินการ วิธีที่ดีที่สุดในการจัดการกรณีดังกล่าวคืออะไร?

11
ไม่สามารถแก้ไขโฮสต์“ <ใส่ URL ที่นี่>” ไม่มีที่อยู่ที่เชื่อมโยงกับชื่อโฮสต์
ฉันลองทำตามบทช่วยสอนนี้แล้ว: การรับข้อมูลจากเว็บ ฉันได้ลองติดตั้งบน Android 3.0 ซึ่งเป็นแพลตฟอร์มล่าสุดสำหรับแท็บเล็ตอย่างไรก็ตามฉันได้รับข้อผิดพลาดนี้: " ไม่สามารถแก้ไขโฮสต์" www.anddev.org "ไม่มีที่อยู่ที่เชื่อมโยงกับชื่อโฮสต์ " คุณสามารถตรวจสอบ URL ที่ฉันใช้เพื่อพิสูจน์ว่ามีไฟล์อยู่ http://www.anddev.org/images/tut/basic/getdatafromtheweb/loadme.txt ฉันสร้างคลาสส่วนตัวและขยายด้วย asynctask นี่คือรหัส: private class Downloader extends AsyncTask&lt;String,Void,String&gt;{ String myString = null; @Override protected String doInBackground(String... arg0) { try{ URL myURL = new URL("http://www.anddev.org/images/tut/basic/getdatafromtheweb/loadme.txt"); URLConnection ucon = myURL.openConnection(); InputStream is = ucon.getInputStream(); BufferedInputStream bis = …

3
เธรด Android AsyncTask จำกัด ไหม
ฉันกำลังพัฒนาแอปพลิเคชันที่ฉันต้องอัปเดตข้อมูลทุกครั้งที่ผู้ใช้เข้าสู่ระบบฉันยังใช้ฐานข้อมูลในโทรศัพท์ด้วย สำหรับการดำเนินการทั้งหมด (การอัปเดตการดึงข้อมูลจากฐานข้อมูลและอื่น ๆ ) ฉันใช้งาน async จนถึงตอนนี้ฉันไม่เห็นว่าทำไมฉันไม่ควรใช้มัน แต่เมื่อเร็ว ๆ นี้ฉันพบว่าถ้าฉันดำเนินการบางอย่างงาน async ของฉันเพียงแค่หยุดดำเนินการล่วงหน้าและอย่าข้ามไปที่ doInBackground มันแปลกเกินไปที่จะปล่อยไว้แบบนั้นดังนั้นฉันจึงพัฒนาแอปพลิเคชั่นง่ายๆอีกตัวเพื่อตรวจสอบว่ามีอะไรผิดปกติ และแปลกพอฉันได้รับพฤติกรรมเดียวกันเมื่อจำนวนงาน async ทั้งหมดถึง 5 งานที่ 6 หยุดการดำเนินการล่วงหน้า Android มีการ จำกัด asyncTasks ใน Activity / App หรือไม่? หรือเป็นเพียงข้อผิดพลาดบางอย่างและควรรายงาน? มีใครประสบปัญหาเดียวกันและอาจพบวิธีแก้ปัญหาหรือไม่? นี่คือรหัส: เพียงสร้าง 5 เธรดเหล่านี้เพื่อทำงานในเบื้องหลัง: private class LongAsync extends AsyncTask&lt;String, Void, String&gt; { @Override protected void onPreExecute() { …

4
Android AsyncTask สำหรับการใช้งานที่ยาวนาน
อ้างถึงเอกสารสำหรับ AsyncTask ที่นี่กล่าวว่า: ควรใช้ AsyncTasks สำหรับการดำเนินการสั้น ๆ (อย่างน้อยที่สุดไม่กี่วินาที) หากคุณต้องการให้เธรดทำงานเป็นเวลานานขอแนะนำให้คุณใช้ API ต่างๆที่มีให้โดย pacakge java.util.concurrent เช่น Executor, ThreadPoolExecutor และ FutureTask ตอนนี้คำถามของฉันเกิดขึ้น: ทำไม? doInBackground()ฟังก์ชั่นวิ่งออกหัวข้อ UI ดังนั้นสิ่งที่เป็นอันตรายจะมีโดยมีการดำเนินการระยะยาวที่นี่?

9
Android SDK AsyncTask doInBackground ไม่ทำงาน (คลาสย่อย)
ณ วันที่ 15/2/2012 ฉันยังไม่พบคำอธิบายที่ดีหรือเหตุผลว่าทำไมจึงใช้ไม่ได้ วิธีแก้ปัญหาที่ใกล้เคียงที่สุดคือการใช้วิธีเธรดแบบเดิมแต่เหตุใดจึงรวมคลาสที่ไม่ (ดูเหมือนจะ) ทำงานใน Android SDK Evenin 'SO! ฉันมีคลาสย่อย AsyncTask: // ParseListener had a callback which was called when an item was parsed in a // RSS-xml, but as stated further down it is not used at all right now. private class xmlAsync extends AsyncTask&lt;String, RSSItem, Void&gt; …

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

12
ชิ้นส่วน Android การรักษา AsyncTask ระหว่างการหมุนหน้าจอหรือการเปลี่ยนแปลงการกำหนดค่า
ฉันกำลังทำงานกับแอปสมาร์ทโฟน / แท็บเล็ตโดยใช้ APK เพียงไฟล์เดียวและโหลดทรัพยากรตามความจำเป็นทั้งนี้ขึ้นอยู่กับขนาดหน้าจอตัวเลือกการออกแบบที่ดีที่สุดดูเหมือนจะใช้ Fragments ผ่าน ACL แอปนี้ทำงานได้ดีจนถึงขณะนี้เป็นเพียงกิจกรรมเท่านั้น นี่เป็นคลาสจำลองของวิธีที่ฉันจัดการ AsyncTasks และ ProgressDialogs ใน Activities เพื่อให้ทำงานได้แม้จะหมุนหน้าจอหรือมีการเปลี่ยนแปลงการกำหนดค่าเกิดขึ้นระหว่างการสื่อสาร ฉันจะไม่เปลี่ยนรายการเพื่อหลีกเลี่ยงการพักผ่อนหย่อนใจของกิจกรรมมีสาเหตุหลายประการที่ฉันไม่ต้องการทำ แต่ส่วนใหญ่เป็นเพราะเอกสารอย่างเป็นทางการบอกว่าไม่แนะนำและฉันได้จัดการโดยที่ยังไม่ได้ทำกิจกรรมนี้ดังนั้นโปรดอย่าแนะนำว่า เส้นทาง. public class Login extends Activity { static ProgressDialog pd; AsyncTask&lt;String, Void, Boolean&gt; asyncLoginThread; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.login); //SETUP UI OBJECTS restoreAsyncTask(); } @Override public Object onRetainNonConfigurationInstance() { …

3
อัปโหลด arraylist โดยใช้ httpurlconnection multipart / form-data
ฉันต้องการอัปโหลดArraylistภาพไปยังเซิร์ฟเวอร์โดยไม่ต้องใช้ห้องสมุดใด ๆ ฉันใช้Asynctaskเพื่ออัปโหลดภาพเดียวและทำงานได้อย่างสมบูรณ์ด้วยความช่วยเหลือของ httpurlconnection multipart / form-data ตอนนี้ฉันต้องเปลี่ยนรหัสของฉันเพื่ออัปโหลดไฟล์หลายประเภททุกประเภทโดยใช้Arraylist&lt;String&gt;แต่ปัญหาของฉันคือรหัสที่มีอยู่FileinputStreamไม่รองรับ arraylist และฉันไม่รู้ว่าจะใช้อะไรแทนที่จะFileinputstreamอัปโหลด arraylist ไปยังเซิร์ฟเวอร์และฉันไม่ได้ ต้องการใช้ไลบรารีใดก็ได้สำหรับสิ่งนี้ public class multipart_test extends AsyncTask&lt;Void,Void,String&gt; { Context context; String Images; public static final String TAG = "###Image Uploading###"; public multipart_test(Context context,String Upload_Images) { this.context = context; this.Images = Upload_Images; } @Override protected String doInBackground(Void... params) { BufferedReader …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.