タグ別アーカイブ: Android

JavaでトレースログのON/OFFをコンパイル時に切り替える。

JavaでAndroidのプログラミングに関わるようになってしばらく経ちますが、そろそろトレースログのON/OFFを上手く切り替える方法が欲しくなってくるものです。ベテランのAndroidプログラマーの方に聞いたところ、if文の条件式に定数(static finalで宣言したboolean型のフィールド)を指定することでON/OFFを切り替えるのが普通だといいます。

その方法は、私なりに以下のように解釈しました。

static final boolean ENABLE_LOGS = true;

if (ENABLE_LOGS) Log.v(“tag”, “message”);

見た目はともかく、これならログを無効にしたときには、実行時のコストが完全になくなりそうです。ただ、ON/OFFを切り替えるにはソースファイルをその都度修正する必要があり、これはいただけません。

続きを読む

AndroidのOpenGL ESでビットマップが真っ黒になる。

現在、AndroidでOpenGL ESを使って描画処理を書いているのですが、深刻な問題に直面していて原因がつかめずにいます。

GLSurfaceViewクラスのonDrawFrameで、Bitmapを作ってCanvasで描画し、それをテクスチャにロードしてポリゴンに貼っているのですが、しばらくするとビットマップが真っ黒になってしまい、まともに表示されなくなります。画面全体が真っ黒になるのではなく、新しく作ったビットマップが真っ黒になるようです。

最初、テクスチャの枯渇を疑ったのですが、不要になったテクスチャは都度削除していますので、高々数百程度しかテクスチャは同時に使っていません。それに、仮にテクスチャが枯渇したのであれば、地のポリゴンの色がそのまま現れるはずですが、必ず真っ黒になるのです。

ビットマップリソースの枯渇も疑いました。この現象に陥ると、自分が作ったアプリだけでなく、システムのアイコンまで真っ黒になることがあるからです。Bitmapはテクスチャをロードしたあとに都度recycleしていますが、実際にリソースが解放されるのはGCのタイミングのようなので、これが原因の可能性はある程度考えられます。

Androidのバージョンは3.1および3.2なのですが、どうもはっきり「これだ!」という原因がつかめません。一応、ビットマップの生成回数を減らすために、極力同じものを使い回すようにして対策しました。ただ、それだと問題が顕在化するまでの時間を引き延ばしただけで、状況次第では再発する危険性が残っています。

ビットマップのGCの問題であれば、時間を引き延ばすだけでも十分な効果が見込める可能性はあります。ただ、はっきりそうだとわからないのが気持ち悪いところです。

Androidの仕事はもうなくなる。

NTTドコモが iPhone を採用することになったため、少なくとも国内では iOS が席巻することになりそうです。Android はシェアを奪われ、結果、Android の仕事は今後激減するのではないかという話を知人から聞きました。

Android も当面なくなりはしないでしょうが、仕事が減ることはある程度間違いないでしょうね。そうなったらなったで、Android の技術者も減ってくるわけですから、場合によっては技術者に希少価値が出てくる可能性もなきにしもあらずです。

私の場合、Android を今になって少しかじりはじめたわけですが、おそらく今後はそんなに深入りすることもなくフェードアウトしていくことになるのだと思います。

らしくない。

リニューアル後のブログの記事を見たところ、Java や Android の記事はあっても C や C++ の記事がありません。以前のブログであれば、Java や Android の記事はまったくなかったので大違いです。

我ながら「らしくない」というのが率直な感想です。今後も Java や Android の記事は書いていくつもりですが、C や C++ の記事がないのは一過性のものですので、そちらを期待して来られた方はもうしばらくお待ちください。

Android アプリに挑戦

私は Java のこともあまり知らなければ Android についても素人と変わらなかったので、これまで Android のアプリ開発の仕事があったも別の担当者にまかせてきました。

ところが最近になって、そうもいってられない状況になってきました。そこで、いよいよ重い腰を上げて Android のアプリ開発に挑戦することになりました。といっても、ほとんどが OpenGL ES を使った開発になるので、典型的な Android アプリとはかなり異なるのですが、これが何とかなればあとは応用が効くはずです。

不慣れな Java についてもある程度知識を深めるとともに、いろいろな実験を行いながら、極めていけたらと考えています。やがては、Android のお仕事も安心して自分で担当できるようになることでしょう。