フェンリル

Developer's Blog

投稿者別アーカイブ(森河内)

[追記あり] Android 開発で気をつけたいこと 〜変数名と Context について〜

2016年5月27日追記

こんにちは。共同開発部 開発担当の戸澤です。

2012年に書かれた以下の記事内容に関しては、ApplicationContextの使用を推奨する点で不適切であるとご指摘をいただいています。 詳しくは http://ytrino.hatenablog.com/entry/2016/05/26/033936 をご覧ください。

誤解を招かないよう、この追記分ではみなさんのご指摘を踏まえた Context の使い方について追記しています。オリジナル記事は後半に残しています。みなさまのご指摘に感謝します。

Contextの使い方

AndroidにおけるApplicationContextとActivityContextの使い分けについてですが、 Application全体のライフサイクルでcontextに依存する必要がある処理以外は、基本的にActivityContextを用いるべきです。

ApplicationContextを使用する状況

アプリケーション全体で使用する長いライフサイクルを持つインスタンスでcontextに依存しているもの。

例)Realmの初期化

RealmConfiguration config = new RealmConfiguration.Builder(context).build();
Realm realm = Realm.getInstance(config);

ActivityのContextを使用する状況

Android DeveloperのGoogle +への投稿(https://plus.google.com/+AndroidDevelopers/posts/36bAFHpKbCH)でも説明されていますが、Viewを生成する場合は、ApplicationContextを用いるとActivityに設定されたThemeを適切に設定することができずデザイン上の不具合を招くケースが発生します。
Activity上のViewやインスタンスでcontextを渡す必要がある場合は、以下の使い方が適切です。

・Activity内で使う場合

 → this(自身をcontextとして渡す)

・Fragment上で使う場合

 → Fragment.getActivity()でFragmentを載せているActivityを取得する

まとめ

Contextは依存するインスタンスのライフサイクルを考慮して適切なものを使用する必要がある。

・アプリケーション全体のライフサイクルで使用する場合のみ、十分に検討した上でApplicationContextを使う。

・ViewやIntentの生成やFragment上で使用するcontextにはActivityのcontext(this)を用いる。

・AlertDialog.Builder等直接getActivity()できないがViewをinflateするのにcontextが必要なケース。

 → getContext()メソッドが用意されているのでそちらを使う。

今後もFenrir Developer’s Blog では開発者の皆様に有益な情報をご提供できるよう、エンジニア一同努めてまいりますのでよろしくお願いいたします。

オリジナル記事

以下、2012年当時のオリジナル記事です。冒頭に書いたような指摘をふまえてお読みください。


こんにちは。共同開発部でエンジニアをしている森河内です。

最近は Android の開発を担当しています。Androidの開発では設計から開発まで担当することが多いです。最近ソースコードレビューをする機会があり、レビューしていて取りあえず気をつけてほしいなと感じたことを今回は2点ほど書きました。

変数名の付け方

変数名は分かりやすく命名するというのは基本だと思います。個人的には日本語をアルファベットで書くのはかっこわるいような気がするので、極力英語で書くように努めています。また、Android では以下のようなルールを守ることが推奨されています。

public と static 以外 : 変数名は m で始める
static : 変数名は s で始める
public : 小文字で始める
定数 : アンダースコアを含む大文字だけにする

続きを読む

android 開発におけるリソース管理 〜ディレクトリ名の規則について〜

はじめまして。共同開発部で開発者をしています森河内です。
私自身、今までは iOS を中心に開発を行ってきたのですが、まだまだ手伝い程度ですが最近 Android アプリの開発も始めました。まだまだ、わからない事も多いのですが、折角 Android 開発を始めたので、 Android ネタでこのブログを書いてみたいと思います。

Android には iOS とは違い様々な端末が存在します。また、Android 端末は世界中で使われていますので、Android 開発を行っていると多言語対応もしたいことが多いと思います。Android では以下の画像のように解像度の違う端末や多言語に対応するにはリソースディレクトリ内の drawable ディレクトリや layout ディレクトリ名の後に修飾子をつける事で対応する事が出来ます。修飾子の付け方は、各ディレクトリ名の後に「 – ( ハイフン ) 」をつけてその後に値を入れると実現できます。全てをあげるときりがないので代表的なものを紹介したいと思います。

続きを読む

UIView を簡単に拡大・縮小・回転させる transform プロパティ

UIView には、transform というプロパティがあります。このプロパティを使うと簡単に UIView を拡大・縮小・回転させることができます。transform プロバティの型は CGAffineTransform です。transform の中身は 3×3 の行列で、 z 軸の回転行列として扱うことができます。初期値は、単位行列になっています。

続きを読む

Core Animation で画像を回す

データのダウンロード中など待ち状態のときに、画像をくるくる回して読み込み中だということを表したいことってありますよね。アニメーション GIF や複数の画像の切り替えでも表現できますが、今回は1枚の画像を Core Animation の transform プロパティを使って回す方法を紹介したいと思います。

まず、アニメーションには CABasicAnimation を使います。作成するときに、animationWithKeyPath に transform をセットします。

続きを読む