Android: AsyncTask 使用命令模式...我如何发布进度?

Android: AsyncTask using Command pattern ... How Can I publish the progress?

我想要一种更通用、更简单的方法来在后台启动方法。所以 Command pattern 看起来是个不错的选择。

@Full stack ex 描述了 his post with AsyncTask 中命令模式的实现。

问题是:如何通过正常的 AsyncTask Progressdialog 或回调在后台执行的方法中发布进度?

通常我们使用 publishProgress(progress) ...但这是不可能的。 publishProgress 的范围 'protected'。直接调用onProgressUpdate()更新对话框当然不行,越过了后台进程和UI进程的界限。

我如何使用这种或类似的方法并发布进度(通过

private static interface Command {
    public void execute();
}
public static final class MyWsCommand1 implements Command {
    @Override
    public void execute() {
        // ------- TODO YOUR CODE ---------
        publishProgress( 90); // similar to this
    }
}
private static class GenericAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {    
    private Command command;    
    public GenericAsyncTask(Command command) {
        super();
        this.command = command;
    }
    @Override
    protected Result doInBackground(Params... params) {
        command.execute(); 
        return null;
    }
}
private GenericAsyncTask<Object, Object, Object> myAsyncTask1;
myAsyncTask1 = new GenericAsyncTask<Object, Object, Object>(new MyWsCommand1());
myAsyncTask1.execute();

publishProgress is of scope 'protected'

这意味着您可以从 child class 调用它。可以在 class 本身以及从其继承的任何 class 中访问受保护的字段或方法。您的原计划应该可行。