bolts-android
4401 ワード
Androidクライアントのプログラミングには、uiスレッドで時間のかかる操作ができないという明確なルールがあります.これにより、ネットワークリクエスト、ファイルの読み書きなどの操作は非同期であることが要求される.非同期操作が完了すると、uiインタフェースを再更新する必要があることが多い.最も直接的な考えはコールバックであり,uiスレッド内でuiコンポーネントを更新することが難しくないことを保証する限りである.しかし、場合によっては、多層非同期操作が必要になることが多く、メンテナンスにしても作成にしても課題になります.公開内容の例として、まずすべての画像をアップロードし、画像を順次アップロードします.画像のアップロードが完了したら、インタフェースを呼び出してコンテンツを公開します.これはよくあるシーンで、私たちはまずコールバックで実現して、感じています.まず,画像アップロードのインタフェースを定義し,非同期操作であるためコールバックを追加する.
一連のコードは、少なくとも以下のいくつかの点でコードのメンテナンスに不利です.
画像のリリースは再帰的に使用され、コードがはっきりしていないため、作成とメンテナンスが不便で、最後の統合が大変で、多層コールバックに使用されました.JAvaはjsよりも、コールバック伝達を定義するのが苦痛です.
Boltsはタスクのパッケージを提供し、すべての操作をTaskと抽象化し、2つの結果のみを含み、エラー&成功した.開発者が使いやすい一連のインタフェースを提供しています.私たちは依然として発表内容を例に、Boltsの使用方法とメリットを説明します.まず、単一のピクチャアップロードインタフェースを定義します.
第2のステップでは、複数のピクチャがアップロードされるインタフェースを定義します.牛が追い詰められたところが来ましたね.
再帰なし再帰なし再帰なし.エラーコードは直接下に渡され、エラー後に自動的に中断されます.
ステップ3では、パブリッシュコンテンツのインタフェースを定義します.
前にRxJavaを見たことがあって、1種の扁平化のプログラミング方式で、非同期の処理に対してもとても便利で、しかし包みはとても大きくて、全体のプログラミングの思想ももとのモードととても大きい違いがあって、前に1つの小さいプロジェクトの上で役に立つことができて、それから振り回して振り回して、ずっと順調ではありません.
Boltsは軽くて、役に立つクラスもTask一つで、コードも多くなくて、とても好きです
private void uploadImage(Image image, ImageUploadCallback callback) {...}
第2ステップでは、複数のピクチャがアップロードされるインタフェースを定義し、ピクチャを順次アップロードする場合、再帰大法を用いる必要がある.△私は再帰が好きではありません.再帰は考えなければならないので、書くにしても維持するにしても、はっきり考えることができます.private void uploadImages(List images, UploadAllImageCallback callback) {
Image poped = images.remove(0);
uploadImageRecursive(images, poped, callback);
}
private void uploadImageRecursive(final List left, Image image, final UploadAllImageCallback callback) {
uploadImage(image, new ImageUploadCallback() {
public void onFinished(Exception e, String url) {
if (e != null) {
if (callback != null) callback.onFinished(e/*failed*/);
return;
}
if (left.isEmpty()) {
if (callback != null) callback.onFinished(null/*sucess*/);
return;
}
Image poped = left.remove(0);
uploadImageRecursive(left, poped, callback);
}
})
}
ステップ3では、パブリッシュコンテンツインタフェースを定義します.private void httpPublishPost(Post post, HttpPublishPostCallback callback) { ...}
第4歩は、公開画像と公開内容を統合する.public void publishPost(Post post, PublishPostCallback callback) {
uploadImages(post.images, new UploadAllImageCallback() {
public void onFinished(Exception e) {
if (e != null) {
if (callback != null) callback.onFinished(e);
return;
}
httpPublishPost(post, new HttpPublishPostCallback() {
public void onFinished(Exception e) {
if (callback != null) {
callback.onFinished(e);
}
}
})
}
})
}
一連のコードは、少なくとも以下のいくつかの点でコードのメンテナンスに不利です.
画像のリリースは再帰的に使用され、コードがはっきりしていないため、作成とメンテナンスが不便で、最後の統合が大変で、多層コールバックに使用されました.JAvaはjsよりも、コールバック伝達を定義するのが苦痛です.
Boltsはタスクのパッケージを提供し、すべての操作をTaskと抽象化し、2つの結果のみを含み、エラー&成功した.開発者が使いやすい一連のインタフェースを提供しています.私たちは依然として発表内容を例に、Boltsの使用方法とメリットを説明します.まず、単一のピクチャアップロードインタフェースを定義します.
private Task uploadImage(Image image) {
return Task.callInBackground(new Callable() {
public Void call() {...
throw new Exception(); //for error//orreturn null;//for success.}});
}
ここで画像がアップロードされ、コールバックではなくTaskオブジェクトが返されます.Taskは、実行が完了したイベントをリスニングし、実行結果を取得するために使用することができる.第2のステップでは、複数のピクチャがアップロードされるインタフェースを定義します.牛が追い詰められたところが来ましたね.
private Task uploadImages(List images) {
Task task = Task.forResult(null);
for (Image image : images) {
task = task.onSuccessTask(new Continuation>() {
public Task then(Task task) throws Exception {
return uploadImage(image);
}
});
}
return task;
}
メリット:再帰なし再帰なし再帰なし.エラーコードは直接下に渡され、エラー後に自動的に中断されます.
ステップ3では、パブリッシュコンテンツのインタフェースを定義します.
private Task httpPublishPost(Post post) { ...}
ステップ4では、公開画像と公開コンテンツインタフェースを統合します.public Task publishPost(Post post) {
return uploadImages(post.images).onSuccessTask(new Continuation>() {
public Task then(Task task) throws Exception {
return httpPublishPost(post);
}
});
}
Boltsは最近使用され始めたばかりで、非同期処理に大きな助けになりました.前にRxJavaを見たことがあって、1種の扁平化のプログラミング方式で、非同期の処理に対してもとても便利で、しかし包みはとても大きくて、全体のプログラミングの思想ももとのモードととても大きい違いがあって、前に1つの小さいプロジェクトの上で役に立つことができて、それから振り回して振り回して、ずっと順調ではありません.
Boltsは軽くて、役に立つクラスもTask一つで、コードも多くなくて、とても好きです