【问题标题】:public onPostExecute method公共 onPostExecute 方法
【发布时间】:2015-10-01 03:38:42
【问题描述】:

我正在使用 AsyncTask 类,但我将它用作公共类。我想在它完成执行后运行一些代码,但我不知道如何在课堂外执行它。例如:

exampleAsyncTaskClass.execute(params); 
//What can I write here to execute code after the AsyncTask is completed

在任务完成后,我是否可以在不使用受保护的 onPostExecute 方法的情况下执行代码。或者有什么方法可以使该方法不受保护?

【问题讨论】:

  • protected 更改为public?不过我不确定那会完成什么。
  • 你可以引入一些变量来检查任务是否已经完成.....例如 if(isfinished){//execute som ecode}
  • @immibis: AsyncTask 是一个内置类
  • @Horatio 而你的 AsyncTask 子类不是。
  • @immibis 好的,所以我可以将类作为公共覆盖,但我将如何传递代码以使其在类外执行?

标签: java android multithreading android-asynctask


【解决方案1】:

您可以将处理程序传递给任务的构造函数,并在任务完成时调用它。

可能是这样的:

public class SomeTask extends AsyncTask<Object, Object, Object>{

    private OnPostExecuteHandler handler;

    public SomeTask(OnPostExecuteHandler handler) {
        this.handler = handler;
    }

    @Override protected Object doInBackground(Object... params) {
        return null;
    }

    @Override protected void onPostExecute(Object o) {
        handler.runOnFinish();
    }

    public interface OnPostExecuteHandler{
        void runOnFinish();
    }
}

及用法:

new SomeTask(new SomeTask.OnPostExecuteHandler() {
    @Override public void runOnFinish() {
        //will be called when the task is finished
    }
}).execute(someParams);

【讨论】:

  • 你能举例说明我如何从另一个类访问它吗?
  • @Horatio 添加。我建议您阅读有关 Java 的基础知识。然后才潜入 Android 开发。
【解决方案2】:

你可以这样做.....

public class Myclass{
boolean isTaskFinished;
if(isfinsihed){
//execute some code
}

ExampleTask exampe=new ExampleTask();
example.execute;



class ExampleTask extends AsyncTask<Object, Object, Object>{
private OnPostExecuteHandler handler;

public ExampleTask (OnPostExecuteHandler handler) {
    this.handler = handler;
}

@Override protected Object doInBackground(Object... params) {
    return null;
}

@Override protected void onPostExecute(Object o) {
    handler.runOnFinish();
}

public interface OnPostExecuteHandler{
    void runOnFinish();
isFinished=true:
    }
}



}

【讨论】:

    猜你喜欢
    • 2011-04-19
    • 2020-09-22
    • 1970-01-01
    • 2018-09-27
    • 2015-12-17
    • 2017-11-23
    • 2011-08-16
    • 1970-01-01
    • 2011-12-06
    相关资源
    最近更新 更多