1

Asynctask を使用するアプリケーションを作成しようとしています。特に、通信が行われている間にアクティビティが凍結されることなく、さまざまなアクティビティでさまざまな JSON を使用してさまざまな http 請願を作成したいと考えています。

最初は、これらのアクティビティで asynctask をプライベート 内部クラスとして使用することを考えていましたが、多くのコードを共有していることがわかりました。そのため、http 請願の結果を受信したときに監視する必要があり、別のクラスにいるときに onPostExecute で直接アクティビティを妨害するのは良くないため、単一のクラスを作成してブロードキャスト レシーバーで遊ぶことを考えました。

私が知りたいのは、より効率的でより良い実践とは何かということです。共有コードを持ち、asynctask を拡張するクラスを作成してから、そのクラスを拡張するアクティビティごとに内部クラスを実行するか、ブロードキャストを送信し、必要に応じて各アクティビティでそれらを受信する単一の asynctask を作成します。

下手な英語で申し訳ありません。必要に応じて、より明確に指定してみます。

前もって感謝します

4

3 に答える 3

1

私が見つけた最善の方法は、単に AsyncTask を拡張する public クラスを作成し、それを使用するすべてのアクティビティで onPostExecute 関数をオーバーライドすることです。

例:

MyDataTask dataTask = new MyDataTask() //you can add your parameters in class constructor
        {
            @Override
            protected void onPostExecute(Object result) //replace Object with your result type
            {
                MyActivity.this.doStuff(result); //use result in current activity
            }
        };

カスタム関数を作成して、データタスクでプライベート変数を設定することもできます

dataTask.AddParam("user", username);
dataTask.AddParam("pass", pass);

そして、あなたの引数でそれを実行するだけです...

dataTask.execute(myArgs);
于 2013-06-27T11:31:10.843 に答える
1

Async タスク クラスを単一のクラスとして使用しました。そして、すべての Webservice 呼び出しに対して、一意の IntentFilter を使用して応答をブロードキャストしました。その放送受信機をすべてのクラスに配置します。あなたは完璧な解決策を持っています。うまく機能しています。

于 2016-02-02T09:46:54.190 に答える