【问题标题】:Call onResume() method from Asynctask's onPostExecute() Method从 Asynctask 的 onPostExecute() 方法调用 onResume() 方法
【发布时间】:2026-01-30 03:50:02
【问题描述】:

我正在调用 Asynctask,在完成 doInBackground(String...arg0) 之后,我想在 onPostExecute() 方法中调用 onResume()。

【问题讨论】:

  • 不要自己调用Activity生命周期方法..将onResume中的代码单独调用..
  • 调用方法为ActivityName.this.onResume();
  • 自己调用Activity生命周期方法不是个好主意
  • 后者不打算由您调用,它是一种方便的方法,可以在其状态更改为 resume 时整理或准备活动。实现在您的 onResume() 覆盖中调用的另一个过程.
  • 一条大红警告信息 :) 不要这样做,请。

标签: android android-asynctask onresume


【解决方案1】:

您不应该显式调用活动生命周期方法,它们通常调用基类版本 - 即。 super.onResume(),所以你可能会弄乱活动状态。而是将相关代码从 onResume 移动到某个外部函数,并在您的 onPostExecute 中调用此函数。

【讨论】:

    【解决方案2】:

    AsyncTask 完成后 将此行放入 onPostExecute()

    notifyDataSetChanged();
    

    这会自动调用 onResume()

    或者如果这不是工作然后调用对话框。 当对话框打开时 Activity gosein onPause() 当 DialogBox 关闭时,它将调用 onResume() 这会工作

    【讨论】:

      【解决方案3】:

      只需调用 Activity.this.onResume();关于你的执行后方法

      【讨论】:

        【解决方案4】:

        1.首先,您需要通过执行此操作在您的 asyncTask 类中引用您的 Activity 说 MainActivity。 MainActivity 活动=(MainActivity)上下文。 context 是您在从 Activity 调用 asynctask 类期间传递的变量。 2.现在您可以通过这样做轻松调用。 活动.onResume()。

        【讨论】:

          【解决方案5】:

          为什么需要这样做?

          如果你的异步任务是一个嵌套类,直接调用一个方法。

          public MainActivity extends Activity{
              //all the usual functionalities
          
              public void methodAfterAsyncTask(){
                  //do stuff here
              }
          
              private CustomAsyncTask extends AsyncTask<Void,Void,Void>{
                  @Override
                  public onPostExecute(){
                      super.onPostExecute();
                      methodAfterAsyncTask();
                  }
              }
          
          }
          

          如果你是 OOP 的坚定信徒并且喜欢干净的代码 :)..我使用这种方法

          MainActivity.java

          public MainActivity extends Activity{
              //all the usual functionalities
          
             public void onResume(){
                  super.onResume();
                  new CustomAsyncTask(new AsyncListener(){
                         public void postTaskMethod(){
                         //do stuff here
                         }
          
                  }).execute();
             }
          
          
          
          }
          

          AsyncListener.java

          public interface AsyncListener{
              void postTaskMethod();
          }
          

          CustomAsyncTask.java

           publicCustomAsyncTask extends AsyncTask<Void,Void,Void>{
                  private AsyncListener listener;
          
                  public CustomAsyncTask(AsyncListener listener){
                              this.listener=listener;
                  }
          
                  @Override
                  public onPostExecute(){
                      super.onPostExecute();
                      if(null!=listener)
                      listener.postTaskMethod();
                  }
              }
          

          【讨论】: