Androidでアプリ作ってたら普通にハンドルしなきゃ行けない処理だろうだけど、意外に抜けてしまっているっぽい処理エトセトラです。見積もりやディレクションの際にも抜けないように注意したいですね。
インターフェース
- もろもろ処理に時間が掛かって ANR 発生
⇒時間のかかる処理は別スレッドで処理 - 何かでユーザーを待たせたら…
⇒プログレスを出す。終わったら知らせる
ネットワークアクセス
- ネットはだいたい時間掛かるので
⇒別スレッドで処理 - オフラインに処理しようとして失敗
⇒処理前にオフラインチェックして、オフラインの時はユーザーに知らせる - 通信に時間が掛かり過ぎて帰ってこない
⇒タイムアウトを設定する - 通信に失敗
⇒適切に例外をハンドリング。必要なら処理をリトライさせる
スレッド
- 複数のスレッドが同じ変数に同時にアクセスして時々変になる
⇒synchronized や volatile を使って正しく同期制御する。 - いくつかのスレッドが同時に走って重たい。そもそも同時に走る必要無ければ…
⇒タスクのキューを用意して、1つ以上のスレッドでタスクを順次処理 - スレッドを途中でキャンセル(UI的にキャンセルに見せて、実際にはキャンセルしないで走らしたままじゃないか?)
⇒Interrupt を正しく使い、また適切に自分で終わらせる(スレッドの基礎知識は正しく身に付けましょう) - ボタンタップでスレッド起動する処理とかで、連打されて同じ処理のスレッドが乱立するようになっていないか?
⇒今の処理が終わるまで次の処理要求はスキップする
⇒今の処理をキャンセルして、次の処理要求を実行する
⇒今の処理が終わるまでボタンを無効にして連打できないようにする - ファイル保存(インターネットやカメラなど、さまざまなデータをデバイスに保存する時)
- どこに保存するかちゃんと検討する?(ローカル領域 or SDカード)
- そのまま保存してても大丈夫か考える?(データを抜かれるリスクと対策の検討?)
⇒暗号化して保存するなど - ディスクいっぱいでエラー(大きなファイルなら意外にある)
⇒ちゃんと例外を処理しよう
他にもあると思いますが、ご指摘いただけると幸いです。