2017-08-07 27 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是範圍「保護」

這意味着你可以從一個子類調用它。受保護的字段或方法可以在類本身以及從它繼承的任何類中訪問。原始計劃應該可以工作。