2015-10-12 12 views
6

私はアンドロイドには新しく、ドキュメンテーションとチュートリアルを行っていました。syncAdapter、サービス、ローダー、プロバイダ、asynctaskの間で混乱していますか?

サービス

開発者ガイドは、音楽プレーヤーを言って、バックグラウンドで実行時間の長いタスクを実行するためにそこに必要とされるときには、使用すべきであると言います。

Asynctask

apiを使用してデータを得るようなバックグラウンドタスクを実行し、それがonPostExecute()コールバックメソッドの上のUIスレッドを通知するワーカースレッドを作成します。別のスレッドで

ローダー

動作を行う、リスナーに登録し、データセットの変更に通知します。

プロバイダマニフェストファイルでそれらを公開することによって異なるアプリケーション間の

データを共有。 AndroidデバイスとWebサーバー間でデータを同期するための

SyncAdapter

理論的には、私は上記の概念が彼らのために使われているように理解しています。 何を使用するかのように順序を入れにくいですか?その中で何が最高のものになるのでしょうか?どんなシナリオで何を使うべきですか?キャッシングに

私はアンドロイドの初心者ですし、これらの概念を理解しようと言ったように、私はボレーretrospice

ようsqliteまたはライブラリを使用。

ご協力いただきありがとうございます。 ありがとうございます。

+0

あなたの質問は広すぎます。実装したい実際のユースケースを指定して絞り込んでください。 –

+1

@StephanBranczykさんへの返信ありがとうございます。私はちょうど、どのシナリオで、どのようなものを使うのが最善のアプローチなのか、という明確な考えがほしいと思っていました。天気予報を表示するアプリを考えてみましょう。天気予報やサービスのためにaynctaskを使用することもできます。私はsqliteまたはボレーのようなライブラリを使用することができますキャッシングの目的のために。クエリーやその他の目的のためのコンテンツプロバイダ。 Loader for aysncはデータをロードし、データソースをリッスンすることでバインドしたものを変更します。私はちょうど好奇心が強い、よりよい解決のためにこれらのすべてを1つにカプセル化する方法です。私を許して、私はちょうどこれについて混乱しています。 – Ritesh

+1

ここにあなたが理解しやすくなるかもしれないinfographicsです:3番目のオプションはサービスです:https://raw.githubusercontent.com/stephanenicolas/robospice/master/gfx/RoboSpice-InfoGraphics.png – Kalem

答えて

9

物事のカップルがKalebの答えに追加するには:

のContentProvider:

Androidは、データを共有するために、実際に多くの方法があります。 ContentProviderは、アプリケーション間でデータベースを共有する方法です。オフラインの場合に備えて、クラウドからのデータをキャッシュする3つのメールクライアントが携帯端末にあるとします。電子メールのオフラインデータベースを1つだけ維持することは理にかなっています。あなたがアドレス帳、SMSデータベース、またはツイートデータベースを持っている場合も同じことが起こります。また、すべてのデータを更新したい場合は同じことが行われます。毎回3回ではなく、クラウドからそのデータを1回だけ更新するだけで、次のトピックSyncAdapterにつながります。

SyncAdapter:

A SyncManagerは、アンテナの電源が入っている時間を最小限に抑えるために、一度にすべての同期要求を行うのに十分スマートであるため、バッテリーの使用を節約するために。さらに、AccountManagerの助けを借りて、電話機のユーザは同期設定自体を上書きすることができますが、開発者が最初にSyncAdapterを使用することを選択した場合のみです。

また、SyncAdapterはContentProviderでのみ使用できます。したがって、他のアプリとデータを共有したくない場合でも、SyncAdapterを使用する場合は、コンテンツプロバイダを使用する必要があります。つまり、初心者(中間の開発者さえも)が実装するには、ContentProviderは非常に難しいです。私はあなたが今から離れていることをお勧めします。あなたがやりたいことがすでにある場合は、ContentProviderを使うべきですが、独自のコンテンツプロバイダを作成することはお勧めしません。

ローダー:

ローダー良いです。ローカルデータベース(またはContentProvider)からのデータを表示する場合は、それらを使用する方法を学びます。彼らはあなたに時間を節約します。 SyncAdapterとは異なり、ローダはContentProviderを必要としません。彼らはSQLiteに直接アクセスできます。

サービス:

は、それらを使用することを学びます。彼らについてはあまりにも多くのことを言うことがあります。重要なポイントの1つは、AlarmManagerやBroadcastReceiversなどのコンポーネントを使用して、生きている時間を最小限に抑える必要があることです。また、サービスとIntentServiceの違いを知る必要があります。

AsyncTask:

AsyncTaskは、メインUIスレッドをブロックしないようするには、Androidに非常にしばしば必要です。 AsyncTaskを使用しているため、サービスの使用を廃止できるとは思わないでください。

多くのAndroidチュートリアルでは、コンセプトを示すための最小限のコードしかないので、適切なスレッドをスキップすることが多いことに注意してください。必要に応じて独自のスレッドを手動で起動することができますが、AsyncTaskはUIスレッドがブロックされて「アプリケーションが応答しない」というエラーが発生する多くの状況で理想的な選択肢になります。

図書館:

多くの良いライブラリがそこにあります。私はどちらが良いものなのかは言わない。誰もが推奨するものを使用する方法を学びます。それらの図書館はあなたのためにたくさんのことをすることができます(あなたが仕事をするのに十分だと仮定して)。学習曲線は少しありますが、それだけの価値があります。そして、彼らは抽象度のはるかに高いレベルでAndroidを扱うので、通常、スレッドや他の多くのものがあなたの世話をします。

他にも多くのことがありますが、私が言及していないことや言及していないことはたくさんありますが、あなたの質問は広すぎると思います。さらに詳細を知りたい場合は、開発者向けのガイドを読んで、Googleが提供するYouTube動画を見てください。

+0

@Stephanありがとう、私は私の学習曲線についてもっと探求します。それは多くの基本概念をクリアしました。 – Ritesh

+0

SyncAdapterにはContentProviderは必要ありません。スタブアカウントとContentProviderを作成し、別の永続性スキームで使用します。 https://developer.android.com/training/sync-adapters/creating-sync-adapter.html –

+0

また、AsyncTaskを使用しないでください。http://blog.danlew.net/2014/06/21/the-hidden-pitfalls -of-asynctask / –

2

本当に速いの答え:

AsyncTask:UIスレッドをブロック可能性が短いタスク。彼らがキャンセルしていて、あなたがそれらを起動しなければならないかどうか気にしない。

サービス:長い変更をしている場合に使用します。これは、アプリケーションの変更によって干渉を受けたくない場合に使用します。 AsyncTaskより実装が難しいビット。

ローダー:SyncAdapter

データベースアクセス用に設計された:ここでは、リアルタイムのデータを持っていません。瞬時にデータの同期をスケジュールします(同期メール、連絡先データなど)。 1時間ごとに新鮮なデータがあるとします。

プロバイダー:上記とは関係ありません。これはApps間でデータを共有するために使用されます。共有アプリケーションによってデータがどのように取得されるかは気にせず、特定のリソースを求めることができます。

このinfographisは私が最初の3をよりよく理解する助け:https://raw.githubusercontent.com/stephanenicolas/robospice/master/gfx/RoboSpice-InfoGraphics.png

+0

この素晴らしい素早い答えのために@ kalemありがとうございます。それは関連する概念のほとんどをクリアした。特にあなたが分かち合った情報。しかし、私はまだ詳細な答えを得ることを望んでいます。 – Ritesh