Android AsyncTask 等待其他函数完成

Posted

技术标签:

【中文标题】Android AsyncTask 等待其他函数完成【英文标题】:Android AsyncTask wait other function to finish 【发布时间】:2020-12-16 06:23:01 【问题描述】:

我尝试在 android 中异步执行两个函数。所以我需要第一个函数代替第二个函数。我尝试使用 AsyncTask 来执行此操作。但问题是第一个函数不能等到第一个函数完成。

    private class DemandeConge extends AsyncTask<Void, Void, Void> 
    protected void onPreExecute() 
        super.onPreExecute();
        Log.i("we are here", "**************On pre Exceute......***************");
        p=new ProgressDialog(getActivity());
        p.setMessage("Please wait...It is downloading");
        p.setIndeterminate(false);
        p.setCancelable(false);
        p.show();
        Log.i("we are here", "**************On pre Exceute......***************");
    

    @Override
    protected Void doInBackground(Void... params) 
        Log.i("we are here", "**************oOn doInBackground...***************");
        getSoldeConge();
        Log.i("we are here", "**************On doInBackground...***************");
        return null;
    

    @Override
    protected void onProgressUpdate(Void... values) 
        super.onProgressUpdate(values);
        Log.i("we are here", "**************onProgressUpdate...***************");
        Log.i("we are here", "**************onProgressUpdate...***************");
    

    /**
     * `onPostExecute` is run after `doInBackground`, and it's
     * run on the main/ui thread, so you it's safe to update ui
     * components from it. (this is the correct way to update ui
     * components.)
     */
    @Override
    protected void onPostExecute(Void param) 

        Log.i("we are here", "**************onPostExecute...***************");
        Log.i("we are here", "**************onPostExecute...***************");

        Log.i("we are here", "add conge()");
        p.dismiss();

    

    @Override
    protected void onCancelled() 
        super.onCancelled();
        p.dismiss();
        Log.i("we are here", "**************onCancelled...***************");

    

我有两个函数,第一个是 getSoldeConge();,它通过改造获取一些数据,第二个函数将在第二个函数完成时执行 Log.i("we are here", "add conge()");,但在我的情况下,第二个函数将在第一个函数完成之前运行。

【问题讨论】:

【参考方案1】:

改造调用已在后台线程中完成,因此您无需从Asynctask 调用它们。我们需要查看改造代码以进一步帮助您。

顺便说一句,您不应该在 2020 年使用 AsyncTask。如果您要坚持使用 Java,请使用 RXJava。或ExecutorService

【讨论】:

以上是关于Android AsyncTask 等待其他函数完成的主要内容,如果未能解决你的问题,请参考以下文章

使 android AsyncTask 等待结果

等待 AsyncTask 完成,然后在 Android Java 中执行下一个代码

Android AsyncTask 等待完成以检索数据并将其显示在 ListView

java 另一个等待线程 - 字体:https://stackoverflow.com/questions/2321829/android-asynctask-testing-with-android

Android AsyncTask问题

如何使 AsyncTask“doInBackground()”等待一个数组列表