ParcsisでのAndroidプログラムの開発方法





6月21日、私たちはParcsisで公開日を開催しました。私は他の講演者の中でも、Android向けのプログラムを開発する方法について話しました。 カットの下には、私のスピーチのテキストがあり、尋ねられた質問を考慮して多少補足され、修正されています。



もちろん、ビジネスプロセスの説明からソフトウェア開発に関するストーリーを開始する必要があります。 それでは始めましょう!



作業プロセス



開発者にとって、2つの重要なドキュメントがあります。



最初はバックログです。 これは、プロジェクトマネージャーが高レベルのタスクを表示しながら入力する、Googleドキュメントのシンプルなスプレッドシートです。 複雑なことは何もありません。



2番目に重要なドキュメントは、デザイナーが描いたアプリケーションレイアウトです。



レイアウトはPDFドキュメントであり、各ページはいずれかの状態のアプリケーション画面の1つであり、デバイス上でどのように見えるかをピクセルごとにレンダリングします。 少し先を見据えて、レイアウトの各ページを個別のpng画像として保存するようにデザイナーに依頼することがよくあるので、後でPixel Perfectを使用して垂直方向に修正します。



開発プロセスは反復に分割されます。 各反復は2週間です。 反復を開始する前に、リード開発者はマネージャーとともに、実装する必要があるバックログからタスクを選択します。 それらに基づいて、Jiraは特定のパフォーマーのタスクを開始します。 タスクの時間は、以前の開発の経験と特定の開発者のスキル、およびリスクに基づいて決定されます。 1日(8時間)を超えるタスクは割り当てられません。 タスクの評価が突然8時間を超える場合、それはより小さなものに分割されます。



反復の最初の1週間は開発用、2週目はテストとバグ修正のために予約されています。



テストの2つのフェーズを特定しました。テスト部門が実行する機能テストと、プログラムレイアウトを作成したデザイナーが直接実行する設計レビュー(ユーザビリティテストを含む)です。 Jiraの両方のフェーズでバグが発生します。



反復は必ずしもリリースで終わるわけではありません。 反復の完了は、いくつかの小さな機能の完了のみを意味します。



私たちの仕事では、プロトタイピングを積極的に使用しています。 これまたはその機能の実装方法が明確でない場合、または実装がまったく可能かどうか不明な場合は、プロトタイプを作成します。



ソースコードはsvnに保存されます。 複雑なタスクやプロトタイプの場合、ブランチを作成します。 ブランチは、タスクが完了するまで存続し、その後トランクでフリーズして削除されます。



難しさ



次に、Android開発者が毎日直面する困難について話し合う必要があります。



レイアウト


最初の困難はレイアウトです。 Androidデバイスには数百の異なる画面構成があります。 理想的には、プログラムはどのデバイスでも正しく動作するはずです。 デバイスを電話とタブレットに分割することは非常に形式的であることに注意する必要があります(マーケティング担当者が何と言っても)。 ソフトウェアの観点から見ると、携帯電話とタブレットの両方が同じデバイスですが、タブレットでのみ動作する3番目のAndroidを除きます。



幸いなことに、画面のセット全体は2つの基準に従ってグループに分割されます。



最初の兆候は、画面の物理的なサイズです 。 現在販売されているデバイスには、画面の対角線が3〜10インチ半のものがあります。 画面サイズのセット全体は、4つの大きなグループに分けられます。 これらは、小さい(小さい)、通常(通常)、大きい(大きい)、非常に大きい(xlarge)画面です。 また、2つの画面の向き(横向きと縦向き)を忘れないでください。



さまざまなサイズとさまざまな向きの画面では、さまざまな使用シナリオが特徴的です。 たとえば、小さな画面のデバイスは通常、片手で、大きな画面では両手で、またはテーブルや膝の上などに置かれます。 したがって、画面のサイズと向きごとに、独自のレイアウトと位置コントロールが必要です。



2番目の記号は、 画面密度 、つまり単位面積あたりのピクセル数です。 現在、4つの画面密度があります:低(ldpi)、中(mdpi)、高(hdpi)、非常に高(xhdpi)。 このパラメーターは、ユーザーインターフェイス要素の場所に影響を与えません。 密度が異なると、異なるグラフィックが使用されます。 つまり、理想的な場合、任意の写真、任意のアイコンをプロジェクトに4回含める必要があります-可能な画面密度ごとに1回、異なるサイズと異なる詳細で。



Android開発者向けのポータルでは、さまざまな特性を持つデバイスの使用に関する統計が定期的に更新されます。



メモリ管理


レイアウトを処理すると、メモリを解放するという特殊性に直面します。



誰もプログラムを閉じるのが好きではありません。 たとえば、デスクトップでは、一部の会計士が数十のWord、1C、Outluk、Linesのドキュメントを開いたままにすることができます。 しかし、モバイルデバイスでは、リソースが非常に限られているため、閉じられていないアプリケーションの多くが大幅に遅くなる可能性があります。 Android OSでは、この問題は非常にエレガントに解決されます。オペレーティングシステムがアプリケーションを閉じるポイントを決定します。 実行中の各アプリケーションには優先順位が与えられ、メモリが不足している場合は、十分なメモリがなくなるまでこの優先順位に従ってアプリケーションが閉じられます。 アプリケーションは最後に閉じられ、現在画面に表示されています。



この問題は、バックグラウンドプロセスから定期的に更新される画面が破壊されるときに発生します。 たとえば、プログレスバーファイルのダウンロード。 この問題を解決するには、ユーザーインターフェイスから非同期プロセスを解放する必要があります 。これには、Androidに標準ツールservicesがあります



ネットワーキング


マーフィーの法則によると、トラブルは常に発生します。 しかし、特に頻繁に、GPRS接続を使用するとトラブルが発生します。 デスクトップでは、原則として、すべてがシンプルです-インターネットが存在するかどうか。 ただし、モバイルデバイス用のプログラムでは、いつでも切断される可能性を提供するだけでは不十分です。 また、接続速度が極端に遅くなることも予測されるはずですが、接続はまだ切断されません(「無制限の」インターネットでの多くの関税は速度が低下します)。 時々、モバイルオペレーターは送信されたトラフィックに侵入し、たとえばサービスの応答にバランス情報を挿入します。 この状況にも留意する必要があります。



さらに、頻繁にネットワークに接続するとバッテリーがすぐに消耗するため、データをキャッシュして接続数を最小限に抑えることをお勧めします。



データ保存


問題は、メモリカードへのアクセス速度がこのカードのモデルに大きく依存していることです。 現在販売されているカードには、読み取り速度が10〜50 Mb / s、書き込み速度が2〜40 Mb / sのカードがあります。 違いは、読み取りで5倍、書き込みで20倍です! 原則として、最上位のデバイスモデルのユーザーでさえ、使用されているメモリカードについてはまったく考えていません。 アプリケーションがアクティブすぎてメモリカードの読み取りまたは書き込みができない場合、作業が遅くなります。 繰り返しますが、インターネット接続の場合と同様に、一般的に使用されるデータにはキャッシュメカニズムを考慮する必要があります。



おわりに



Androidについては、1年余り開発しています。 Playストアには5つのアプリがあります:







ユーザーのあらゆる要望に耳を傾け、これらのアプリケーションを積極的に開発しています。 途中でさらにいくつかのプログラムがありますが、これについてはまだ説明しません。



記事の冒頭の写真-Dmitry Nechaev



All Articles