1

ここにある Android-Async-Http ライブラリを最適に実装する方法について、設計方法論へのアドバイスを探しています:リンク

私は過去にこのライブラリを使用したことがあり、非常にうまく機能しましたが、実装方法を変更することで解決できると信じているいくつかの小さな問題に遭遇しました。

私が抱えていた問題は、リクエストを行い、(ユーザーがアクティビティを閉じたため) アクティビティがアクティブでなくなったときに非同期コールバックが実行され、表示されているエラーメッセージ/コンテンツが実際にはできないため、エラーがスローされることです。利用できなくなったため、その時点でアクティビティにアクセスします。ただし、その問題はこの質問の主な関心事ではなく、非同期コールバックで UI にアクセスしようとしていることが原因です。

私の問題に対するいくつかの解決策を探しているときに、次の提案がありました。

@Zapnologica コールバックを実装するときに、基本的に UI/Context の存在に依存したくありません。はるかに優れた設計は、返されたデータで必要なことは何でも行う Service を使用してから、コンテキストがまだ存在しないか、フラグメントが非表示/非アクティブ化された状態にあります。

これにより、ライブラリを正しく実装していないという考えに至りました。HttpClient現在、アクティビティ/フラグメントから呼び出すの静的インスタンスがあります。次に、ライブラリの非同期コールバックで対応するコードを実行します (コールバックは呼び出し元のアクティビティ スレッドで実行されるため)。以下に例を示します。

Network.Post(getApplicationContext(), URL, RequestParams, new  public AsyncHttpResponseHandler  {     

        @Override
        public void onStart() {             
        }

        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] response) {
          UpdateListviewAdapter(ParseNetworkResponse(response));
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
            Toast.makeToast("Error", Toast.LONG).show();
            }
        }
    };
}

現在、この実装は適切であり、仕事をしています。ただし、私は新しいアプリを開始しているので、最初から始めて、ライブラリを可能な限り最適に実装して、さらに問題が発生しないようにしたいと考えています。上記の引用文でsmarekから与えられたポイントが気に入っています。

  • サービスを利用する
  • インテントをブロードキャストするか、ServiceConnection を使用して応答をアクティビティに中継します

この 2 つの提案について詳しく知りたいと思います。

サービスを使用してネットワーク リクエストを作成するというアイデアが気に入っています。このようにして、実際のネットワーク リクエストの実装をすべてのアクティビティとフラグメントから分離し、JSON の解析、エラー処理などの可能な処理を行うことができます。別のスレッド。したがって、UI スレッドから負荷を取り除くことは良いことです。ただし、サービスについて読んだことにはいくつかの懸念があります。それは次のとおりです。

  1. その Android は、リソースをクリーンアップする必要がある場合、いつでもサービスを閉じたり終了したりできます。これが発生した場合、アプリの接続が失われますか? または、アンドロイドは現在実行中のアプリケーションで使用されているサービスを閉じませんか?

  2. ライブラリの静的インスタンスをHttpCLientサービスに入れますか? どうすればこれを行うことができますか?

アクティビティは私の「NetworkignService」に連絡して、X url にリクエストを送信し、必要なパラメーターを渡すことを伝えますか。次に、そのサービスがネットワーク リクエストを送信し、応答を待ってから、その応答を処理します。それがエラーまたは成功した応答であること。次に、サービスが呼び出すアクティビティでパブリックメソッドを定義し、必要なとおりに応答データを提供しますか? UI で行う必要があるのは、データを表示することだけですか?

私は次のことを達成しようとしています:

  • 集中化されたコード / ライブラリの実装へのアクセス。
  • ネットワーク リクエストの集中型エラー処理
  • UI スレッドからできるだけ多くの負荷を取り除く
  • ネットワークサーバー/実装を複数のプロジェクトで再利用できるように、動的かつ拡張可能にします。
  • アプリケーション内のアクティビティ、フラグメント、またはその他のサービス/クラスから Http リクエストを作成できます。

提案された解決策についてアドバイスや提案をいただけますか? 基本的に私が探しているのは、アクティビティとフラグメントからネットワーク要求を行うことができる優れた設計パターン/原則です。

4

0 に答える 0