我正在嘗試構建一個帶有 2 個按鈕的演示應用程序,一個下載視頻,另一個下載 PDF。我想通過AsyncTask. 到目前為止,我已經有了帶有已實現方法的入門代碼。我還沒有添加我想要下載的代碼,因為我想弄清楚單獨下載背后的邏輯,所以現在,我有日志消息。這是代碼:public class MainActivity extends AppCompatActivity { Button downloadVideo, downloadPDF; DownloadingClass downloadingClass = new DownloadingClass(); private static final String TAG = "omar.asynctaskdemo;"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); downloadVideo = findViewById(R.id.download_video); downloadPDF = findViewById(R.id.download_pdf); downloadVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {} }); downloadPDF.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {} }); } private class DownloadingClass extends AsyncTask<Void, Void, Void>{ @Override protected void onPreExecute() { super.onPreExecute(); Log.d(TAG, "doInBackground: Before"); } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); Log.d(TAG, "doInBackground: After"); } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); Log.d(TAG, "doInBackground: Progress"); } @Override protected Void doInBackground(Void... voids) { Log.d(TAG, "doInBackground: Content to download"); return null; } }}我很感激關于如何去做的簡明解釋。
2 回答

侃侃爾雅
TA貢獻1801條經驗 獲得超16個贊
不要這樣做
DownloadingClass downloadingClass = new DownloadingClass();
總是在你開始任務之前創建:
new DownloadingClass().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
這是因為您不能重用 AsyncTask。它有狀態,一旦狀態為“已完成”就不會再次運行。

料青山看我應如是
TA貢獻1772條經驗 獲得超8個贊
如果您在兩種下載方法中具有相同的輸入/輸出類型,您可以DownloadingClass
通過為每個方法聲明一個對象來使用相同的類型,例如:
DownloadingClass downloadPDF = new DownloadingClass(); DownloadingClass downloadVideo = new DownloadingClass();
然后就打電話downloadPDF.execute();
/downloadVideo.execute();
添加回答
舉報
0/150
提交
取消