すべてはKotlinから始まりました。 偶然、新しい言語についての記事に出くわしました。Androidでそれを書くことができます。 このトピックに触れて、最初はAndroid向けのアプリケーションがJAVAで書かれていることを知りました。 Android用のアプリケーションを書くのがどれほど面倒か、実際のプラットフォームの利点を知ることにしました。 実際、本質的に、JSアプリケーションとAndroidアプリケーションは同じ機能を実行します。 同時に、実験を行うことにしました。 JAVAとAndroid開発の微妙さを知らずに、Googleだけをアシスタントとして使用して、12時間でできること。 問題の声明で私が開発したアイデアが生まれました。

問題の声明
外部サービスから世界のすべての空港のリストを取得し、空港コードを使用して、外部サービスからのフライト状況に関する情報を含むオンラインスコアボードを取得します。 Google Playにあるアプリケーションの100%でこのような機能を実装するには、一連のアクションを実行し、アプリケーションの内部を確認する必要があります。 個人的には、最初のページで空港に入場してオンラインスコアボードを取得できるアグリゲーターは見つかりませんでした。 アイデアとアプリケーション自体はシンプルですが、フライトをする人が使用する機能です。 そのような情報へのアクセスは即座に行われるべきです。
私は、航空の開発に関して多くの機会を開く素晴らしいサービスを見つけました。
developer.flightstats.com登録済み1か月間無料のアカウントを取得しました。
彼はJavaScriptの開発経験に頼って直感的に行動しました。 Photoshopのスケッチ画面スケッチ。 コンパイルされたアプリケーション要件。
検索フォーム
- アプリケーションは、世界中のすべての空港のリストを「ドロップダウンリスト」タイプのコンポーネントにロードする必要があります。
- フィルターを使用して空港を選択し、UTC / LT時間(現地時間)を切り替えることができます
結果フォーム

開発
次はMe、Google、Android Studioです。経験から、コードを整理する必要があることを理解しています。 プロジェクトの構造を直感的に定義しました。 彼は、次のグループ(モデル、ストア、ビュー、フィールド、API、アダプター)を特定しました。無意識、またはむしろ経験が、この瞬間に私を動かしました。 それから彼はレイアウトを楽しんでいた。 Android Studioは非常に直感的なエディターです。これが、Androidアプリケーションを作成しようと思ったきっかけの1つです。 Intellijのアイデアの場合-すべてが快適です。 さらに、エディターは無料でアクセスでき、制限はありません。定期的に開発および更新されます。 レイアウトは2回形になりました。 仕事の全期間にわたって単一の不具合ではなく、すべてが整っています。
最初の段階で私を守った瞬間、ソースの90%で、検索と作業はコンポーネントIDによって実行されました。 IDを扱うことは悪い習慣であると一般に受け入れられています。Androidは通常の習慣であることが証明されています。 DataBindingという素晴らしい薬物の1つであるGoogleは、findViewByIdから逃れることができます。 しかし、初期段階と1年前の原則では、接続は一方向に機能していました。 奇妙に聞こえますが、DataBindingが1つの方法です。 DataBindingが完了するように実装を記述する必要がありました。 JSでの実装に基づいて、データバインディングライブラリが現在提供している概念に驚かされました(ほとんどの場合、ネットワークで見ることができます)。 ViewModelで。 ある種のハイブリッドコントローラとViewModelのように見えます。

次に、コミュニケーションの質問が来ました。最初にグーグルで検索されたものはショックに突入しました。 通常のAJAXリクエストを行うには、コード70行をプルする必要がありました。 バックグラウンドプロセスを作成し、そこで接続マジックを実行してから、バッファーを介して応答を収集します。 「それはそんなに難しいことではありません!」そして、検索を続けました。 Retrofit2に関する記事は、結果の1つで見つかりました。 Retrofitを使用すると、より楽しくなり、一般的にコミュニケーションの面で生きることができます。 サーバーとのやり取りのインターフェースを決定し、データとビジュアルコンポーネントのペアリングを開始しました。

おそらく経験不足のため、スピナーフィルター(コンボボックスとも呼ばれます)をいじる必要がありました。 その過程で、あるタイプを別のタイプに変換することから、JavaでのOOPの実装方法への質問が多数発生しましたが、すべてが答えと例に加えて直感を備えたスタックオーバーフローの基本でした。 一般的に、いくつかの点を除き、すべてが時計仕掛けのようになりました。 デートで頭痛がすることを期待していなかったもの。 なんらかの理由で、JAVA(またはたぶんそれが私に起こった)defaulはすべてをUTCで示しました。
一般に、完全な停止を引き起こす乗り越えられない瞬間はありませんでした。 私が理解していなかったこと(なぜダフォールトの振る舞いのようにしたのですか?!) Viewクラスに動的データ(別名「アクティビティ」)がある場合に頭痛の原因となるのは、Viewが破棄されて何かを行う必要があるときにそれらが単に失われることです。 この機会を与えてください。ただし、オプションで、向きを変えるときに画面を交換したい人に。 この問題に関してAndroid開発者の意見を聞くのは興味深いです。全体像が見えないかもしれません。
すごい
重い負荷の下で衝撃を受けたインターフェイスのパフォーマンス。 テストのために、8つのスピナーを作成し、それぞれに4,000件のレコードを投げました(各レコードには一連のプロパティがあります)。 このような状況では、JSアプリケーションが負担になり、すべてのレコードを一度に表示する必要があり、それらのレコードを操作するためのアクセス権がある場合、画面ハングまたは一般的に「Aw」をキャッチする可能性が高くなります。 出力バッファリングをドラッグするか、何らかの方法でアルゴリズム的に解決する必要があります。 ただし、ボリューム全体を一度に必要とするタスクがあります。
オンザフライでのマルチスレッドおよびバックグラウンドプロセス。 Webワーカーの助けを借りてJSで行う必要があることですが、Android用に開発するときに1回または2回解決できるいくつかの困難があります。 さらに、バックグラウンドは非常に大きなボリュームを引き出す可能性があります。 これは、複雑な工学計算を伴うオフラインアプリケーションの開発にとって大きな価値です。
ブラウザー用のアプリケーションは、高負荷のインターフェース(大量のデータの同時出力)やバックグラウンドで大量の計算が必要な場合に、独自のパフォーマンスの上限があります。 ここでは、Androidアプリケーションへの脱帽です。 しかし、平均的な統計を行う必要がある場合は、javascriptの開発速度が速くなります。
まとめ
Androidで書くのは時間がかかり、JSでアプリケーションを書くよりも何倍も時間がかかりますが、グーグルはプラットフォームを集中的に開発および拡張しています。 本の後ろに1週間座ってAndroid開発の理論を説明すると、おそらくAndroidアプリケーションを作成しようとする考えが失われ、この12時間で得たスキルと経験は得られないでしょう。 本当に問題に遭遇し、内部から世界を見て、Androidアプリケーションの機能の最初の評価を取得し、将来、JSで実装するのが困難なタスクに直面し、在庫の知識をまだ見ることができます。 練習は、スキルと経験を達成するための迅速な方法です。
何が起こったのか:世界中の空港のオンラインスコアボードを表示するためのAndroidアプリケーション。
あとがき
さらに12時間ある場合は、アイデアをさらに発展させたいと考えています。
イゴール