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

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

15
ดาวน์โหลดไฟล์ด้วย Android และแสดงความคืบหน้าใน ProgressDialog
ฉันพยายามเขียนแอพพลิเคชั่นเรียบง่ายที่ได้รับการอัพเดต สำหรับสิ่งนี้ฉันต้องการฟังก์ชั่นง่าย ๆ ที่สามารถดาวน์โหลดไฟล์และแสดงความคืบหน้าในปัจจุบันProgressDialogได้ ฉันรู้วิธีการทำProgressDialogแต่ฉันไม่แน่ใจว่าจะแสดงความคืบหน้าในปัจจุบันและวิธีการดาวน์โหลดไฟล์ได้ตั้งแต่แรก

21
ตัวอย่าง AsyncTask Android
ฉันกำลังอ่านเกี่ยวกับAsyncTaskและฉันลองใช้โปรแกรมอย่างง่ายด้านล่าง แต่ดูเหมือนจะไม่ทำงาน ฉันจะทำให้มันทำงานได้อย่างไร public class AsyncTaskActivity extends Activity { Button btn; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btn = (Button) findViewById(R.id.button1); btn.setOnClickListener((OnClickListener) this); } public void onClick(View view){ new LongOperation().execute(""); } private class LongOperation extends AsyncTask<String, Void, String> { …

7
พื้นฐานของ Android: ใช้งานรหัสในเธรด UI
ในมุมมองของการเรียกใช้รหัสในเธรด UI มีความแตกต่างระหว่าง: MainActivity.this.runOnUiThread(new Runnable() { public void run() { Log.d("UI thread", "I am the UI thread"); } }); หรือ MainActivity.this.myView.post(new Runnable() { public void run() { Log.d("UI thread", "I am the UI thread"); } }); และ private class BackgroundTask extends AsyncTask<String, Void, Bitmap> { protected void onPostExecute(Bitmap result) { …

21
วิธีการแสดง Toast ใน Android
ฉันมีตัวเลื่อนที่สามารถดึงขึ้นมาแล้วแสดงแผนที่ ฉันสามารถเลื่อนตัวเลื่อนขึ้นและลงเพื่อซ่อนหรือแสดงแผนที่ เมื่อแผนที่อยู่ข้างหน้าฉันสามารถจัดการเหตุการณ์การสัมผัสบนแผนที่นั้นได้ ทุกครั้งที่ฉันสัมผัส a AsyncTaskจะถูกไฟขึ้นมันจะดาวน์โหลดข้อมูลบางส่วนและสร้างToastข้อมูลนั้น แม้ว่าฉันจะเริ่มงานในกิจกรรมการสัมผัสแล้วไม่มีขนมปังแสดงให้เห็นจนกระทั่งฉันปิดตัวเลื่อน เมื่อตัวเลื่อนปิดและแผนที่จะไม่ปรากฏอีกต่อไปToastปรากฏขึ้น ความคิดใด ๆ เริ่มงานกันดีกว่า แก้ไข: public boolean onTouchEvent(MotionEvent event, MapView mapView){ if (event.getAction() == 1) { new TestTask(this).execute(); return true; }else{ return false; } } และonPostExecuteทำขนมปัง Toast.makeText(app.getBaseContext(),(String)data.result, Toast.LENGTH_SHORT).show(); ในใหม่TestTask(this)นี่คือการอ้างอิงถึงMapOverlayและไม่ได้MapActivityดังนั้นนี่คือปัญหา

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

17
วิธีรับผลลัพธ์ของ OnPostExecute () ไปยังกิจกรรมหลักเนื่องจาก AsyncTask เป็นคลาสแยกต่างหาก
ฉันมีสองคลาสนี้ กิจกรรมหลักของฉันและคนที่ยื่นออกมาในAsyncTaskตอนนี้ในกิจกรรมหลักของฉันฉันต้องการที่จะได้รับผลจากในOnPostExecute() AsyncTaskฉันจะส่งผ่านหรือรับผลลัพธ์ไปยังกิจกรรมหลักได้อย่างไร นี่คือตัวอย่างรหัส กิจกรรมหลักของฉัน public class MainActivity extends Activity{ AasyncTask asyncTask = new AasyncTask(); @Override public void onCreate(Bundle aBundle) { super.onCreate(aBundle); //Calling the AsyncTask class to start to execute. asyncTask.execute(a.targetServer); //Creating a TextView. TextView displayUI = asyncTask.dataDisplay; displayUI = new TextView(this); this.setContentView(tTextView); } } นี่คือคลาส AsyncTask public class AasyncTask …

3
คำเตือน: คลาส AsyncTask นี้ควรเป็นแบบคงที่หรืออาจเกิดการรั่วไหล
ฉันได้รับคำเตือนในรหัสของฉันที่ระบุว่า: คลาส AsyncTask นี้ควรเป็นแบบคงที่หรืออาจเกิดการรั่วไหล (android.os.As.TyncTask แบบไม่ระบุชื่อ) คำเตือนที่สมบูรณ์คือ: คลาส AsyncTask นี้ควรเป็นแบบสแตติกหรืออาจเกิดการรั่วไหล (android.os.As.TyncTask แบบไม่ระบุชื่อ) ฟิลด์แบบสแตติกจะรั่วบริบท ชั้นในแบบไม่คงที่มีการอ้างอิงโดยนัยถึงชั้นนอกของพวกเขา หากคลาสภายนอกนั้นเป็นตัวอย่าง Fragment หรือ Activity การอ้างอิงนี้หมายความว่าตัวจัดการ / ตัวโหลด / ภารกิจที่ใช้เวลานานจะมีการอ้างอิงถึงกิจกรรมที่ป้องกันไม่ให้ถูกรวบรวมขยะ การอ้างอิงฟิลด์โดยตรงกับกิจกรรมและแฟรกเมนต์จากอินสแตนซ์ที่ใช้เวลานานเหล่านี้อาจทำให้เกิดรอยรั่วได้ คลาส ViewModel ไม่ควรชี้ไปที่วิวหรือบริบทที่ไม่ใช่แอปพลิเคชัน นี่คือรหัสของฉัน: new AsyncTask<Void,Void,Void>(){ @Override protected Void doInBackground(Void... params) { runOnUiThread(new Runnable() { @Override public void run() { mAdapter.notifyDataSetChanged(); } }); return null; } …

12
AsyncTask มีข้อบกพร่องทางแนวคิดจริงๆหรือฉันแค่ทำบางสิ่งหายไป?
ฉันได้ตรวจสอบปัญหานี้มาหลายเดือนแล้วและหาวิธีแก้ปัญหาที่แตกต่างกันไปซึ่งฉันไม่พอใจเพราะมันเป็นแฮ็คขนาดใหญ่ ฉันยังไม่สามารถเชื่อได้ว่าคลาสที่มีข้อบกพร่องด้านการออกแบบทำให้มันเข้ากับกรอบงานและไม่มีใครพูดถึงมันดังนั้นฉันคิดว่าฉันต้องพลาดบางสิ่งบางอย่าง AsyncTaskปัญหาอยู่ที่ ตามเอกสารนั้น "อนุญาตให้ดำเนินการพื้นหลังและเผยแพร่ผลลัพธ์บนเธรด UI โดยไม่ต้องจัดการกับเธรดและ / หรือตัวจัดการ" ตัวอย่างแล้วยังแสดงให้เห็นว่าบางอย่างที่เป็นแบบอย่างวิธีการที่เรียกว่าshowDialog() onPostExecute()นี้ แต่ดูเหมือนว่าที่วางแผนอย่างสิ้นเชิงกับผมเพราะแสดงโต้ตอบเสมอต้องมีการอ้างอิงถึงที่ถูกต้องContextและ AsyncTask ไม่ต้องถืออ้างอิงที่แข็งแกร่งให้กับวัตถุบริบท เหตุผลชัดเจน: เกิดอะไรขึ้นถ้ากิจกรรมถูกทำลายซึ่งก่อให้เกิดงาน? สิ่งนี้สามารถเกิดขึ้นได้ตลอดเวลาเช่นเนื่องจากคุณพลิกหน้าจอ หากงานนั้นจะมีการอ้างอิงถึงบริบทที่สร้างคุณไม่เพียง แต่จะถือวัตถุบริบทที่ไร้ประโยชน์ (หน้าต่างจะถูกทำลายและการโต้ตอบ UI ใด ๆจะล้มเหลวด้วยข้อยกเว้น!) คุณยังมีความเสี่ยงในการสร้าง หน่วยความจำรั่ว ยกเว้นว่าตรรกะของฉันมีข้อบกพร่องนี่แปลเป็น: onPostExecute()ไร้ประโยชน์อย่างสิ้นเชิงเพราะวิธีนี้จะทำงานบนเธรด UI ได้ดีเพียงใดหากคุณไม่สามารถเข้าถึงบริบทใด ๆ คุณไม่สามารถทำอะไรที่มีความหมายได้ที่นี่ วิธีแก้ปัญหาหนึ่งคือการไม่ส่งอินสแตนซ์บริบทไปยัง AsyncTask แต่เป็นHandlerอินสแตนซ์ ใช้งานได้: เนื่องจากตัวจัดการผูกบริบทและภารกิจไว้อย่างหลวม ๆ คุณสามารถแลกเปลี่ยนข้อความระหว่างกันโดยไม่เสี่ยงต่อการรั่วไหล (ใช่ไหม) แต่นั่นหมายความว่าสถานที่ตั้งของ AsyncTask คือคุณไม่จำเป็นต้องกังวลกับตัวจัดการผิด ดูเหมือนว่าการใช้ Handler ในทางที่ผิดเนื่องจากคุณกำลังส่งและรับข้อความในเธรดเดียวกัน (คุณสร้างมันบนเธรด UI และส่งผ่านมันใน onPostExecute () …

7
เรียกใช้ AsyncTasks หลาย ๆ ตัวในเวลาเดียวกัน - เป็นไปไม่ได้ใช่ไหม?
ฉันพยายามเรียกใช้ AsyncTasks สองรายการในเวลาเดียวกัน (แพลตฟอร์มคือ Android 1.5, HTC Hero) อย่างไรก็ตามมีเพียงคนแรกที่ถูกประหารชีวิต ต่อไปนี้เป็นตัวอย่างข้อมูลสั้น ๆ เพื่ออธิบายปัญหาของฉัน: public class AndroidJunk extends Activity { class PrinterTask extends AsyncTask<String, Void, Void> { protected Void doInBackground(String ... x) { while (true) { System.out.println(x[0]); try { Thread.sleep(1000); } catch (InterruptedException ie) { ie.printStackTrace(); } } } }; @Override public …

6
การใช้“ วงกลมเคลื่อนไหว” ใน ImageView ขณะโหลดเนื้อหา
ขณะนี้ฉันกำลังใช้ listview ของมุมมองที่ต้องการให้แสดงหนึ่งวินาที สิ่งที่ฉันทำในปัจจุบันคือการใช้ @ id / android: คุณสมบัติที่ว่างเปล่าของ listview เพื่อสร้างข้อความ "กำลังโหลด" <TextView android:id="@id/android:empty" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FF0000" android:text="Loading..."/> ตอนนี้ฉันต้องการแทนที่ด้วยวงกลมภาพเคลื่อนไหวที่ใช้ในกล่องโต้ตอบการโหลดแทนข้อความนี้ฉันเดาว่าคุณทุกคนรู้ว่าฉันหมายถึงอะไร: แก้ไข: ฉันไม่ต้องการไดอะล็อก ฉันต้องการแสดงให้เห็นว่าภายในเค้าโครงของฉัน ขอบคุณมากสำหรับความช่วยเหลือของคุณ!

8
Android Fragment getActivity () บางครั้งส่งคืนค่าว่าง
ในรายงานข้อผิดพลาดคอนโซลนักพัฒนาซอฟต์แวร์บางครั้งฉันเห็นรายงานที่มีปัญหา NPE ฉันไม่เข้าใจสิ่งที่ผิดปกติกับรหัสของฉัน ในอีมูเลเตอร์และแอปพลิเคชันอุปกรณ์ของฉันทำงานได้ดีโดยไม่ต้องใช้แรงกดอย่างไรก็ตามผู้ใช้บางคนได้รับ NullPointerException ในคลาสแฟรกเมนต์เมื่อเรียกเมธอด getActivity () กิจกรรม pulic class MyActivity extends FragmentActivity{ private ViewPager pager; private TitlePageIndicator indicator; private TabsAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { pager = (ViewPager) findViewById(R.id.pager); indicator = (TitlePageIndicator) findViewById(R.id.indicator); adapter = new TabsAdapter(getSupportFragmentManager(), false); adapter.addFragment(new FirstFragment()); adapter.addFragment(new SecondFragment()); indicator.notifyDataSetChanged(); adapter.notifyDataSetChanged(); // push …

5
ข้อโต้แย้งใดที่ถูกส่งผ่านไปยัง AsyncTask <arg1, arg2, arg3>
ฉันไม่เข้าใจสิ่งที่ฉันควรจะใส่ที่นี่และข้อโต้แย้งเหล่านี้จบลงที่ไหน? ฉันควรจะใส่อะไรดีและมันจะไปที่ไหน ฉันต้องรวมทั้ง 3 รายการหรือรวม 1,2,20 อันด้วยหรือไม่

12
AsyncTask และการจัดการข้อผิดพลาดบน Android
ฉันแปลงรหัสของฉันจากการใช้เพื่อHandler AsyncTaskสิ่งหลังสุดยอดมากในสิ่งที่ทำ - การอัพเดตแบบอะซิงโครนัสและการจัดการผลลัพธ์ในเธรด UI หลัก AsyncTask#doInBackgroundสิ่งที่ไม่ชัดเจนให้ฉันเป็นวิธีการจัดการกับข้อยกเว้นหากสิ่งที่ไปยุ่งเหยิงใน วิธีที่ฉันทำคือมีตัวจัดการข้อผิดพลาดและส่งข้อความถึงมัน มันใช้งานได้ดี แต่มันเป็นวิธีที่ "ถูก" หรือมีทางเลือกที่ดีกว่า? นอกจากนี้ฉันเข้าใจว่าถ้าฉันกำหนดตัวจัดการข้อผิดพลาดเป็นฟิลด์กิจกรรมก็ควรดำเนินการในเธรด UI อย่างไรก็ตามบางครั้ง (คาดเดาไม่ได้มาก) ฉันจะได้รับข้อยกเว้นโดยบอกว่ารหัสที่ถูกเรียกใช้Handler#handleMessageนั้นกำลังรันอยู่บนเธรดที่ไม่ถูกต้อง ฉันควรเริ่มต้นตัวจัดการข้อผิดพลาดActivity#onCreateแทนหรือไม่ วางrunOnUiThreadลงในHandler#handleMessageดูเหมือนซ้ำซ้อน แต่ก็ดำเนินการอย่างน่าเชื่อถือ

6
ข้อแตกต่างระหว่าง Service, Async Task & Thread หรือไม่?
อะไรคือความแตกต่างระหว่าง Service, Async Task &amp; Thread หากฉันไม่ผิดพวกเขาทั้งหมดจะใช้ทำบางสิ่งในพื้นหลัง ดังนั้นวิธีการตัดสินใจที่จะใช้และเมื่อใด

5
Asynctask vs Thread ใน Android
ใน UI เพื่อทำงานเบื้องหลังบางอย่างฉันใช้ไฟล์Thread. แต่ตามที่คนอื่นแนะนำตอนนี้ฉันใช้AsyncTask. อะไรคือความแตกต่างหลักระหว่าง a Threadและ an AsyncTask? ในสถานการณ์ใดฉันควรใช้ a ThreadหรือAsyncTask?

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