みなさん、こんにちは。私はスマートデバイス(スマートフォンやタブレット端末)で動くモバイルアプリケーション開発のAndroidアプリケーション開発の講師を担当しています。
さて、みなさんはモバイルアプリケーションというと、どのようなものを想像されるでしょうか?
メール、SNS等のコミュニケーションアプリ、ニュースや天気予報などの情報収集アプリを思い浮かべられる方も多いのではないでしょうか?
これらのアプリには、共通点があります。それはインターネット上のサーバと通信して情報を取得する機能を持っているということです。
そういえば、メールやSNS、ニュース、天気予報などはアプリだけでなくWebブラウザで見られるものもありますよね。
今回は、Androidアプリケーションの中でもよく使われる機能の一つである、通信機能のお話をしたいと思います。
Androidアプリケーションを開発された方、または興味を持たれている方であれば、AndroidアプリはJava言語で記述する、ということもご存じだと思います。
Java言語は「もっともプログラマー人口が多い言語」と言われることもあるほど、大変普及している言語です。
そのため、Java言語でのプログラミングテクニック・ノウハウに関する情報はとてもたくさんあります。
本屋に行けば、選びきれない位たくさんのJava言語に関する本が売られていますし、ネットで検索すれば、Java言語によるソースコード例はたくさん見つかります。
Androidアプリの開発経験はないけれど、他のプラットフォームでアプリを作られた方であれば、すでに情報をお持ちであったり、今回お話しする通信機能を実際に作られた方もいらっしゃると思います。
では、その通信機能をAndroidでもそのまま動かすことができるでしょうか?
例えば、ユーザーインターフェースのような見た目に関する機能であれば、Android特有のプログラミングテクニックを知る必要があることはかんたんに想像できますが、サーバとの通信のような、見た目に影響しない機能については、そのまま動きそうな気もしませんか?
実は、このお話は半分だけあっています。AndroidもJavaの標準的なAPIを使って通信機能を実装することはできますが、そのほかに、必ず考慮しなければならない事があるのです。
Androidはシングルスレッドモデルを採用しています。シングルスレッドモデルを簡単に説明すると、ある処理を行っている途中で別の処理を行うことができないしくみのことです。
サーバとの通信には、ある程度の時間がかかります。場合によってはサーバから応答が返ってくるまで数十秒から数分くらい待たされることがあります。この間、別の処理を行うことができないと、どのようなことが起こるでしょうか?
例えば、スマートフォンであれば電話機能があります。サーバとの通信中に別の処理を行うことが出来なければ、通信中に電話がかかってきても電話アプリを起動することができません。電話アプリが起動しなければ電話がかかってきたことすら気づくことができなくなります。これはとても困りますよね?
ところで、ここまで読まれた方で、少し疑問に思われた方もいらっしゃると思います。
Androidでふたつ以上の処理を同時に実行している、例えば音楽を流しながらWebブラウザでインターネットを検索するといったことができるのでは?という疑問を持たれた方もいらっしゃるのではないでしょうか?
実は、Androidはシングルスレッドモデルといっても、すべての処理が複数同時にできないわけではありません。画面の表示やタッチ、スワイプなどの操作といった、ユーザーインターフェースに関する処理だけが複数同時に実行できないのです。 ユーザーインターフェースに影響しない処理については、バックグラウンドで処理することで、複数の処理を同時に実行することができます。
音楽の演奏をバックグラウンドで実行すれば、Webブラウザと同時に動かすことができるのです。
サーバとの通信をバックグラウンドで処理すれば、先ほどの例のような、電話がかかってきたのに電話アプリに切り替わらない、といったことは起きなくなります。
バックグラウンドでの処理は、Javaの標準的なAPIを使っても実現できます。
もちろん標準APIを使ってもいいのですが、Androidではバックグラウンド処理を非常によく使うので、バックグラウンド処理をより使いやすくするための専用のAPIが用意されています。
このようなAndroidプログラミングにおける注意点やAndroid固有のAPI、カメラやセンサといったスマートデバイスに内蔵された機能を利用するアプリ開発について、より詳しくは次のコースで取り扱っております。ご興味のある方は、ぜひコース概要をご確認ください。
その他、モバイルアプリケーションにおいて必要となる知識や技術について、研修コースをご提供しています。こちらもご参考にしてください。
https://www.knowledgewing.com/kw/coursemap/ca506101.htm関連コースマップ
みなさまと講習会でお会いできるのを楽しみにしています!!
(2015/05/21)