最初のAndroidアプリケーションを開発する前に知っておきたい6つのこと

翻訳者から :翻訳はすぐに行われたため、一度に行われたため、場所によっては少し不器用になることがあります。 いずれにせよ、エラーについてどこに書くべきかを知っています。

元の記事へのコメントには、「巨大な」Javaの世界のライブラリを使用していないことや、ピカソの代わりにあらゆる種類のGlideを使用しているなどの一般的な考えがあります(ただし、同意します)。 興味があるかどうかを確認できます。

それでも、githubからスニペットを表示する方法がわからなかったため、コードをコピーしました。



私の最初のアプリケーションはひどいものでした。 実際、それはひどいものだったので、私はそれを市場から削除し、私の履歴書でそれについて言及することさえしなくなりました。 作成する前にAndroid開発についていくつかのことを知っていれば、そのアプリケーションはそれほどひどくないかもしれません。



以下は、最初のAndroidアプリケーションを開発する際に理解しておくべきことのリストです。 これらの教訓は、最初のプログラムのソースコードで実際に犯した間違いから学んだものです。間違いについては、以下で説明します。 これらのことを理解すると、もう少し誇りに思うアプリケーションを作成するのに役立ちます。



もちろん、Android開発の勉強中に何かを書いた場合、ほとんどの場合、後で作成を嫌います。 @codestandardsが言ったように:



1年前に書いたコードがあなたにとって悪くないようであれば、おそらく十分に学んでいないでしょう。— Code Standards(@codestandards) 2015年5月21日


(あなたが一年前に書いたコードがあなたにとって悪く聞こえないなら、あなたはおそらく十分に勉強していないでしょう)



あなたが経験豊富なJava開発者である場合、ステップ1、2、および5は興味がないかもしれません。 一方、ポイント3と4は、これらのポイントの例で示された間違いを犯さなかったとしても、Android Studioで聞いたことのないクールなことを示すことができます。



1.静的なコンテキストリンクを作成しないでください





public class MainActivity extends LocationManagingActivity implements ActionBar.OnNavigationListener, GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener { //... private static MeTrackerStore mMeTrackerStore; //... @Override protected void onCreate(Bundle savedInstanceState) { //... mMeTrackerStore = new MeTrackerStore(this); } }
      
      







誰も作ろうとは思わなかった間違いのように見えるかもしれません。 そうではありません。 私はそれを考えました。 私は同じ間違いをした人々を見ました、そして、なぜこれが重大な間違いであるかをすぐに説明できない人々にインタビューしました。 そうしないでください。 これはヌビア人です。



MeTrackerStoreがコンストラクタに渡されたアクティビティへの参照を保存する場合、このアクティビティはガベージコレクタによって破棄されることはありません(この静的参照が別のアクティビティに再割り当てされるまで)。 これは、mmeTrackerStoreは静的であり、静的変数のメモリは、アプリケーションが実行されているプロセスが完了するまで解放されないためです。 あなたがそうするように誘惑された場合、どうやらコードに何か重大な問題があります。 助けを求める。 UdacityのGoogleコース:「 初心者向けAndroid開発 」が役立つかもしれません。



注:技術的には、メモリリークを引き起こすことなくアプリケーションコンテキストへのリンクを保存できますが、これを行うことはお勧めしません



2.ライフサイクルを制御しないオブジェクトへの「暗黙的な参照」に注意してください





 public class DefineGeofenceFragment extends Fragment { public class GetLatAndLongAndUpdateMapCameraAsyncTask extends AsyncTask<String, Void, LatLng> { @Override protected LatLng doInBackground(String... params) { //... try { //Here we make the http request for the place search suggestions httpResponse = httpClient.execute(httpPost); HttpEntity entity = httpResponse.getEntity(); inputStream = entity.getContent(); //.. } } } }
      
      







このコードにはいくつかの問題があります。 1つに焦点を当てます。 Java(非静的)内部クラスには、それらを含むクラスのインスタンスへの暗黙的な参照があります。



この例では、GetLatAndLongAndUpdateMapCameraAsyncTaskには、それを含むDefineGeofenceFragmentへのリンクがあります。 同じことが匿名クラスにも当てはまります。



GetLatAndLongAndUpdateMapCameraAsyncTaskには、ライフサイクルを制御しないよりも、フラグメントであるオブジェクトへの暗黙的な参照があります。 フラグメントを作成および破棄する責任はAndroid SDKにあります。GetLatAndLongAndUpdateCameraAsyncTaskがまだ実行中のためコレクターでクリーニングできない場合、DefineGeofenceFragmentへの暗黙的な参照により、コレクターもフラグメントを削除できなくなります。



このようなことが起こる理由を説明した素晴らしいGoogle I / Oビデオがあります。



3. Android Studioを動作させる





 public ViewPager getmViewPager() { return mViewPager; }
      
      







このスニペットには、Android Studioで「Generate Getter」を使用したときに取得されるものが含まれています。 ゲッターは、生成されたメソッドの名前に接頭辞「m」を残します。 これは最良のオプションではありません。



(接頭辞「m」がインスタンス変数に追加される理由についてさらに懸念がある場合、「m」はコード規約に従って追加されることがよくあります。「member」の略です)



プレフィックスを追加することをお勧めするかどうかに関係なく、Android Studioでは従う規則に従ってコードを記述できることを知っておく必要があります。 たとえば、コードスタイル設定を使用して、Android Studioにインスタンス変数にプレフィックスを自動的に追加し、ゲッター、セッター、およびコンストラクターパラメーターを生成するときにプレフィックスを削除するように指示できます。



画像



一般に、Android Studioはさらに多くのことができます。 ショートカットテンプレート について学ぶことから始めることができます。



4.メソッドは1つのことを行う必要があります





私が書いたクラスの1つには、100行を超える長さのメソッドがありました。 このようなメソッドは、読み取り、変更、および再利用が困難です。 1つのことだけを行うメソッドを作成してみてください。 原則として、20行を超えるすべてのメソッドを疑う必要があります。 そのような方法を探して、Android Studioに助けを求めることができます。



画像



5.あなたよりも賢く経験豊富な人々から学ぶ





些細なことのように聞こえるかもしれませんが、最初のアプリケーションを作成するときにこの間違いを犯しました。



プログラムを作成するとき、あなたは間違っているでしょう。 他の人々はすでにこれらの間違いを犯しています。 これらの人々から学ぶ。 他の人が解決した問題を繰り返すことで、あなたは時間を浪費しています。 私は最初のアプリケーションに多くの時間を費やし、経験豊富な開発者からもう少し時間をかけて勉強すれば回避できた間違いを犯しました。



Pragmatic Programmerを読んでください 。 その後、 効果的なJava 。 これらの2冊の本は、初心者が犯す基本的な間違いを避けるのに役立ちます。 これらの本を使い終わったら、賢い人を探し続けてください。



6.ライブラリを使用する





アプリケーションを作成するとき、より知的で経験豊富な人々がすでに解決している問題に遭遇する可能性があります。 さらに、これらのソリューションの多くは、オープンソースライブラリとして利用できます。 それらを活用してください。



最初のアプリケーションでは、ライブラリがすでに提供している機能を提供するコードを作成しました。 一部のライブラリは標準でした。 その他は、レトロフィットやピカソなどのサードパーティです。 使用するライブラリがわからない場合は、次の3つのことを行う必要があります。



  1. Google I / O Fragmentedポッドキャストシリーズを聴きください。 このシリーズでは、開発者は、Android用に開発する際にどのサードパーティライブラリが重要であると考えるかを尋ねられます。 ネタバレ:これらは主にダガー、レトロフィット、ピカソ、モッキートです。
  2. Android Weeklyにサインアップします 。 それらには、登場した最新のライブラリを含むセクションがあります。 彼に従ってください、そこであなたは何か有用なものを見つけることができます。
  3. アプリケーションで遭遇する問題に類似した問題を解決するオープンソースアプリケーションを探してください。 ここで、開発者が、見つけられなかったサードパーティライブラリ、または知らない標準Javaライブラリを使用したことがわかります。




おわりに





優れたAndroidプログラムを作成することは非常に困難です。 私の過ちを繰り返してあなたの人生をさらに複雑にしないでください。 私が書いたものに間違いを見つけたら、コメントで報告してください(間違ったコメントは彼らの不在より悪いことではありません)。 これが一部の初心者に役立つと思われる場合は、彼と記事を共有してください。 頭痛からそれらを保存します。



All Articles