FunLibという名前のAndroidモンスター

こんにちは、私の名前は由良です。 そして、私は、あなたの多くと同様、プログラマーです。 ご存知のように、プログラマは単なるソフトウェア開発者ではなく、作成者です。 しかし、残念なことに、毎日の仕事では(特にモバイル開発で忙しいとき)新しいものを作成することは困難です。 そして、これはしばしば、少なくともあなたの自由な時間に、フランケンシュタインを組み立てるという欲求を生じさせます(そう、もし望むなら、自転車)。 例えば、私はいつも自分のFrankensteinを作りたいと思っていました。彼はAndroidアプリケーションで基本的なルーチン作業をしてくれます。



そして今、最近、私はついにこの問題についていくつかの自由時間を見つけました( 著者のメモ:ここであなたは私のためだけに幸せになれます )! 今何が流行しているか、何年も前に流行になったものについてのさまざまな記事を読んだ後、私は自分の友人が何を構成するかのおおよそのリストを自分で編集しました。 ここに彼がこれまでに私から学んだことを示します。







FunLibという名前の怪物が生き返るように、 いくつもの要素を1つの山に積み上げなければなりませんでした! ここでは、レトロフィット、イベントバス、ジョブキューなどの星を集めました...しかし、順番に取りましょう! だから、誰が私の頭の中で何に責任がありますか:



インターネットサーフィン



Retrofit + OkHttpを使用してオンラインにします。 これにより、大規模なコミュニティの支援を受けて、すべての作業を迅速かつ正確に行うことができます。 同意して、おおよそこの方法でサービスのリクエストをすることは非常に便利です:



public interface GithubApi { @GET("/search/repositories?sort=stars&order=desc") SearchResult search(@Query("q") String query); }
      
      







そして、伝道者のように、それはなんとクールな結果になるのでしょう! 実際、開発は実際には実装レベルではなく、文字通りインターフェイスレベルで実行されます! 一般に、さまざまな方法で要求を構成するために、多くのものを要求に追加できます。 しかし、以来 これは記事の本質ではありません。独立した研究のために残しておきます。 まあ、または、誰かがこれらのライブラリをどれだけクールに使用しているか、特に彼の動きが些細ではなく隠されていない場合は素晴らしいでしょう ガイド



データベース内のメモリ



ORMLiteはそのメモリを担当します 。 彼らが言うように、すべてのマーカーの味と色は異なります。 このソリューションが最も気に入っています。 特に、このライブラリの利点について、私はこれを次のように考えています。





ここでは、いつものように、必要なクラスとフィールドにそれぞれ@DatabaseTable



@DatabaseField



として注釈を付けます。 その後、データベース内のデータを落ち着いて追加、または必要に応じて取得できます。



 private void saveRepositories(List<Repository> repositories) throws SQLException { Dao<User, ?> userDao = getDbHelper().getDao(User.class); Dao<Repository, ?> repositoryDao = getDbHelper().getDao(Repository.class); for (Repository repository : repositories) { userDao.createOrUpdate(repository.getOwner()); repositoryDao.createOrUpdate(repository); } }
      
      







PS:残念ながら、FunLibはURIを使用してローダーに便利に通知することはできませんが...はい、そのフラグメントを使用したアクティビティは、ローダーを使用した便利な作業のための機能を提供しませんが、すべてが手元にあります ! プルリクエストがあなたを待っています。 さて、または私がこれを行う間待つ:P



並行作業の頭脳



この重要なプロセスでは、 Priority Job Queueというツールが選択されました。 なぜ私たちは独自のサービスを作らなかったのですか? はい、すべてがシンプルです-このライブラリの使用に興味がありました=)はい、マニフェストはクリーンなままです。 そして、これはあまり重要ではありませんが、この解決策は中枢神経系に非常にうまく収まります(もう少し説明します)。 しかし、FunLibと私は座り、考え、Pathチームが私たちに引き継ぐために提供してくれるJobは非常に怪しいと判断しました。 子供にコマンドを与えるのは難しいでしょう。 さて、または彼がそれらを理解することはそれほど容易ではないでしょう。 したがって、 FunJob



という名前で作成されました。これは、 public abstract T doJob() throws Throwable



必要な作業を実行するだけです。



仕事の一例。 注意! モンスターは危険です! 必死の向こう見ずだけを見てください!
 public class SearchJob extends FunJob<List<Repository>> { private String mQuery; public SearchJob(int id, String query) { super(id); mQuery = query; } @Override public List<Repository> doJob() throws Throwable { SearchResult searchResult = ((GithubApi) getApi()).search(mQuery); List<Repository> repositories = searchResult.getRepositories(); return repositories; } }
      
      









中枢神経系または単にDI



データベース、インターネット、および脳への、そしてロボットの身体へのその他の情報の配信などの重要なタスクのために、 Dependency Injectorを実装するDaggerと呼ばれるコンポーネントが使用されました。 幸いなことに、Jobを実行する準備ができたら、私たちの脳はJobを投入できます! したがって、FunJobは、ジョブを実行するときに、データベース、APIに自信を持ってアクセスでき、それが一般的であることを知っています。 結局、脳と体をつなぐことがとても重要です!



そして、チームを脳から身体に送るために、 EvenBusと呼ばれるものが使用されました。 当初はOttoを使用したかったのですが、何らかの理由でFunLibが嫌いだったため、すぐにそれを放棄しました。 まあ、何もありません-EventBusはそのタスクにも対応しています! 体は常に正しいコマンドを時間通りに受け取ります!



レディーステディゴー!



これで、私は停止することに決めたが、私の話を完了し、あなたからの後退を得る。 そしてその後、私はパン粉をさらに開発し続けます。



この例では、FunLibの動作を制御する方法を明確に見ることができます。必要なものは次のとおりです。







追記



おそらく、ローダーについて読んだ後、あなたはついにContentProviderアプリケーションにねじ込むことに決めたと思うでしょう。 しかし、いいえ、私はこれをするつもりはありません、なぜなら 死傷者はいないと思います。 ガイドに 、他のアプリケーションとデータを共有するつもりがない場合、独自のプロバイダーを開発する必要はありません。 私の練習では、他のアプリケーションにデータを提供するようなアプリケーションをまだ作成する必要はありませんでした。 このせいでトマトが私に投げられることはありません! 私たちは皆、さまざまなタスクに遭遇します。



FunJobのどのIDが設定されているかを個別に監視する必要があることも悲しいです。 しかし、何もありません-それは修正され、別のおいしいお菓子になります!



リポジトリへのリンクを見逃した人、キャッチ: https : //github.com/senneco/FunLib



コメントとプルリクエストで会いましょう:D



All Articles