投稿日:

HTML5とJavaScriptによるiPhone/Android両対応アプリ開発ガイド を発売しました


機会を頂戴いたしまして、弊社代表の野島も執筆に参加した書籍が、2013 年 3 月 11 日に、翔泳社様より出版されました。

614MUTKGzJL._SS500_

Amazon 販売ページ:
http://www.amazon.co.jp/HTML5とJavaScriptによるiPhone/Android両対応アプリ開発ガイド (DESIGN & WEB TECHNOLOGY)/dp/4798129682/

(紹介文)
本格的なスマホアプリを「HTML5とJavaScript」で作ろう! HTML5とJavaScriptを利用したスマートフォンアプリ開発が、2011年から注目されてきています。背景には、PCやタブレット、スマートフォンなど、異なるデバイスでも一定レベルで動作できるWeb技術(HTML5とJavaScript)が整ってきたことがあげられます。本書は、そうしたHTML5とJavaScriptを組み合わせてスマートフォンアプリを開発したい方に向けた書籍です。HTML5とJavaScriptを組み合わせたプログラミングの基本から始まり、スマートフォン向けデバイスAPIと組み合わせた開発、そして実際に開発者の方が作ってみたくなる本格的なスマートフォンアプリの開発手法までを解説しています。これ1冊で、HTML5とJavaScriptを利用したスマートフォンアプリ開発手法をひと通り学べます。

弊社で担当させていただいた部分は2章で、Web技術の基礎について解説しています。
また機会がございましたら是非書店などで手に取っていただけましたら幸いです。

このページのビュー数が多いので、2章について少し補足します。

  • 2章では、HTML、CSS、JavaScript の3つのパートで基礎的な事を解説しています。
  • HTML、CSS のパートでは、本書の読者層を考慮し、HTML5 や CSS3 で今後実用的に利用できるであろう新しい要素や表現方法を紹介しています。特にスマートフォンの開発では現実的でしょう。これらの新しい技術を利用することで、ユーザビリティを高めることが出来たり、またスマートフォンにおける回線速度問題への対応や、いわゆる Retina ディスプレイへの対応など、多くの課題についてよりベターな解決方法を選択出来るようになります。
  • JavaScript のパートでは、JavaScript の特徴的な言語パラダイムを改めて丁寧に解説しています。JavaScript の特性や機能をより正しく理解することで、JavaScript でより高度で大規模なプログラムを書くための基礎知識を整理しています。JavaScript のビギナーにとっては内容は少し高度かも知れませんが、これらの理解が不足している場合、スマートフォンなどのクライアントサイドで動作する本格的なアプリケーションを開発することは難しいかも知れません。

 

投稿日:

Androidで必須なのに意外に抜けている処理


Androidでアプリ作ってたら普通にハンドルしなきゃ行けない処理だろうだけど、意外に抜けてしまっているっぽい処理エトセトラです。見積もりやディレクションの際にも抜けないように注意したいですね。

インターフェース

  • もろもろ処理に時間が掛かって ANR 発生
    ⇒時間のかかる処理は別スレッドで処理
  • 何かでユーザーを待たせたら…
    ⇒プログレスを出す。終わったら知らせる

ネットワークアクセス

  • ネットはだいたい時間掛かるので
    ⇒別スレッドで処理
  • オフラインに処理しようとして失敗
    ⇒処理前にオフラインチェックして、オフラインの時はユーザーに知らせる
  • 通信に時間が掛かり過ぎて帰ってこない
    ⇒タイムアウトを設定する
  • 通信に失敗
    ⇒適切に例外をハンドリング。必要なら処理をリトライさせる

スレッド

  • 複数のスレッドが同じ変数に同時にアクセスして時々変になる
    ⇒synchronized や volatile を使って正しく同期制御する。
  • いくつかのスレッドが同時に走って重たい。そもそも同時に走る必要無ければ…
    ⇒タスクのキューを用意して、1つ以上のスレッドでタスクを順次処理
  • スレッドを途中でキャンセル(UI的にキャンセルに見せて、実際にはキャンセルしないで走らしたままじゃないか?)
    ⇒Interrupt を正しく使い、また適切に自分で終わらせる(スレッドの基礎知識は正しく身に付けましょう)
  • ボタンタップでスレッド起動する処理とかで、連打されて同じ処理のスレッドが乱立するようになっていないか?
    ⇒今の処理が終わるまで次の処理要求はスキップする
    ⇒今の処理をキャンセルして、次の処理要求を実行する
    ⇒今の処理が終わるまでボタンを無効にして連打できないようにする
  • ファイル保存(インターネットやカメラなど、さまざまなデータをデバイスに保存する時)
    • どこに保存するかちゃんと検討する?(ローカル領域 or SDカード)
    • そのまま保存してても大丈夫か考える?(データを抜かれるリスクと対策の検討?)
      ⇒暗号化して保存するなど
    • ディスクいっぱいでエラー(大きなファイルなら意外にある)
      ⇒ちゃんと例外を処理しよう

他にもあると思いますが、ご指摘いただけると幸いです。

投稿日:

Android の Service は常駐しない


検索で Android の Service 関連の情報を探していると、しばしば「常駐」というキーワードが出てきます(2011年5月現在)。そしてそれはどちらかというと「Serviceは常駐するものだろうに、よく落ちるよー。ちゃんと落ちないようにするには工夫が必要だよー。やっかいダヨネー」という雰囲気のものが多いように思います。

私も最初はそう思っていたのですが、よくよく Service 周りを調べてみると、どうもちょっと違うようです。で、今は次のような考えが正しいと思っています。

「Android の Service は、何らかの常駐的な機能を提供するコンポーネントでは無い」

で、それでそう考えると、例えば次のような、Service の仕様もしっくり納得できます。

  • startService は別スレッドで実行されるわけじゃない
  • stopSelf しなくても、いつの間にか kill されて落ちてたりすることもあったりする
  • Service が kill されて再起動した時、onCreate は呼ばれるが、onStart は呼ばれない

まぁ、そう気付いてから↓改めてリファレンスを見ると、なんとなくそういうことが書いてあったりして、ちょっとお恥ずかしい感じです……。(*^ ^*;

http://developer.android.com/intl/ja/reference/android/app/Service.html#WhatIsAService

(↓What is a Service? の部分の翻訳が含まれている記事もありました)
http://d.hatena.ne.jp/adsaria/20100914/1284435095

でもちょっと遠まわしな記述ですよね?(私、最初は意味がわからずに読み飛ばしてました)

で、そんなことに気付いたところで、あんまり意味も無いものかも知れませんが、私個人的には、最初にどう作ろうか考えている時点で、早めに正しい方向性を見出せるような気がいたします。

では常駐はどう作るか?

ってか、そもそも「常駐」って言葉の定義も結構曖昧ですが(笑)、例えば、定期的なプログラムの実行であれば AlarmManager を利用するのが良さそうです。また、外部からの何らかのアクションに対応するには、BroadcastReceiver を使うのが良さそうです。

以上でーす。久しぶりの記事がこんなんですみません。(^ ^;

でも、とりあえず、Service が「常駐」のための正しい手段だと思ってると、ちょっぴり問題のある設計をしていまいそうにも思ったので、それだけです。

ではー。

追記です。

ブックマークしてくださった方のコメントに、「 『Android の Service は、何らかの常駐的な機能を提供するコンポーネントでは無い』 メモリが足りなくなったりしない限り、サービスは残ると思っていた。」とありましたので、補足ですが、基本、startService すれば、stopService しない限り、service は起動していると思います。

ただ、再起動したらサービスは落ちてますし、メモリが足りなくなってキルされたりしたときの挙動とか見ていると、「『Serviceが常駐の為の機能』と思っていると、間違った設計をしてしまう可能性がある」ことや「Serviceそのものを有効に利用できない」ということを記事には書いているつもりでした。誤解のありませんように、です♪