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 中访问受保护的字段或方法。您的原计划应该可行。
我想要一种更通用、更简单的方法来在后台启动方法。所以 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 中访问受保护的字段或方法。您的原计划应该可行。