2017-08-07 50 views
0

我想要一个更通用和更简单的方法在后台启动方法。所以Command pattern看起来很不错。使用命令模式的Android:AsyncTask ...我如何发布进度?

@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(); 
+0

* publishProgress的范围是'protected'*你可以从儿童班叫它 –

+0

谢谢。 我交换了扩展AsyncTask的GenericAsyncTask的Command模式。你能把你的评论放在答案中吗?然后我会+1和V. – tjm1706

回答

1

publishProgress是范围“保护”

这意味着你可以从一个子类调用它。受保护的字段或方法可以在类本身以及从它继承的任何类中访问。原始计划应该可以工作。