アプリ本気で1本作った後、参考書みると、吸収率が良くていい感じ
あっ!ってヤバいことに気づくこともあるけど、作った後じゃ無いとただの眠い文字の羅列になってたから
後で、ほぼゼロからググってAndroidアプリ作った後、参考書読んで先に言ってよー!ってなった事ベスト10みたいな記事書きますー
— あたか@ゲーム|ツール開発 (@atagon) March 16, 2019
新しい事に取り組む場合、今までは、参考書でザーッと概要を理解してから取り組む派だったのですが、いつも眠くなって本の内容が頭に入りません。
そこで、3/15(金)にAndroidアプリをリリースしたのですが、この開発は参考書を読まず、iOS開発の知識(語彙)を活かし
「ググる + twitterでフォロワーさんに聞く」
という方法で必死に作りました。
その後、前に買ったけど見たら眠くなったので読んでいなかった参考書を、何とは無しに読んだら、凄い良かったんです!
この本
という訳で、この記事では
- 開発してから参考書を読むとどういいのか?
- Androidアプリを作った後、読んで参考になった事まとめ
を書いていきます!
ちなみに、リリースしたAndroidアプリは、人気イラストレータmizutamaさんとのコラボアプリなので是非お試し下さい!
と、いう宣伝もそこそこに、本題に入っていきます。
開発してから参考書を読むとどういいのか?
まず、前に見た時は知らないことだらけで速攻で眠くなった参考書の内容が、大体知ってる内容になっています。
すると、自分の成長を実感できて、気持ちがアガってきます。
とても気持ちのいい体験です。
そんな気持ちいい状態で、自分なりに実装した部分の再確認、再体験が出来ます。
一気に作って忘れかけてきている知識・経験の定着もされていきます。
知っていることが多いので、倍速で復習できるのも気持ちのいい体験です。
そして何より良いのが、必死に1.5ヶ月Androidを調べて実装してきたけど抜けている知識が見つかる事です。
軽くササッとググるだけでは浮かび上がってこなかった濃い知識が手に入る、ということですね。
これで、短期間で身につけてフワフワしているスキルを定着させながら、抜けていた穴も埋めて、一気に成長できます。
お陰で、Androidが分からなすぎて避けていたのですが、今では自信が付いて、もっとAndroidを学びたい!と思えるようになりました。
Androidアプリを作った後、読んで参考になった事まとめ
では次に、必死にググりながらアプリを1本作ったけど、後で参考書を読んで初めて知った事を全部書いていきます!
これからAndroidアプリを作っていきたい!と思っている人や、既にAndroidは知ってるけど軽く復習しようか、という方の参考になれば嬉しいです。
読んだ本は
「Androidアプリ開発 74のアンチパターン」
という本なので内容としては
「やっちゃいけないことマトメ」
になります。
プレビュー時にのみ表示したいテキストをandroid:textにセットしない
xmlのプレビューで表示確認をするために、TextViewなどのandroid:textにサンプルを入れちゃいますが、表示タイミングによってはその内容が表示されちゃう事があります。
(ありました)
tools:textにセットするとプレビューでしか表示されないので、こっちに入れましょう。
ScrollViewにはidを必ず指定する
指定しない場合、Activityの中断から復帰してViewが再生成された時に、ScrollViewのスクロール位置がリセットされます。
idを指定していた場合は自動でスクロール位置が復元されます。
ListViewでもViewHolderを使う
RecyclerViewでは、ViewHolderの使用が強制されますが、ListViewを使う場合もViewHolderを使う事でスクロール時のパフォーマンスが良くなります。
毎回findViewByIdを呼ぶのは重いからですね。
ListViewの行レイアウト切り替えはViewTypeを使う
ListViewで複数種類の行レイアウトを使いたい場合、1つのレイアウトの中に全部入れ込んで、visibilityで切り替える、という事をやりがちですが、余計な負荷が掛かるので、ViewTypeを使って複数のレイアウトをちゃんと切り替えましょう。
ViewHolderにpositionを持たせない
リストのClick位置を取得するために、ViewHolder自体にpositionをもたせた場合、並べ替え処理でおかしくなります。
ViewHolder#getAdapterPosition()でpositionが取れるのでソチラを使いましょう。
ただし、タイミングによってはgetAdapterPosition()はRecyclerView.NO_POSITIONを返すので、チェックが必須です。
サポートライブラリ版のFragmentを使う
新しく追加されたSDK版のFragmentの機能は、随時サポートライブラリ版のFragmentには追加されていくので、特に理由がなければ、サポートライブラリ版のFragmentを使いましょう。
Fragmentのパラメータをsetterで渡さない
画面の再生成時にsetterで渡した値は失われる可能性があるので、必ずsetArgumentsを利用しましょう。
ネストされたFragmentではgetChildFragmentManagerを使う
ネストされたFragment内で、FragmentMangerを取得したい時に、getFragmentManager()を使うと、フラグメント再生成時にクラッシュする場合があります。
ネストされたFragment内では、getChildFragmentManagerを必ず使いましょう。
呼び出し元のFragmentに結果を通知したい場合にcallbackを使わない
Fragmentの再生成時にcallbackを復元できず、クラッシュします。
Fragment生成時に、親元のFragmentのインスタンスをもらい、setTargetFragmentにセット。
処理が終わってpopBackStack()で画面を戻す前に、getTargetFragment()で親元のFragmentを取得して、親元のonActivityResultを呼んで渡すようにしましょう。
複数の処理を非同期で走らせる場合はexecuteOnExecutorを使う
AsyncTaskは、デフォルトでは1つのワーカースレッドで順番に処理を実行させるので複数のAsyncTaskを走らせても意味がありません。
AsyncTaskを止めるのにcancel()だけではダメ
cancel()ではAsyncTaskは停止しないので、isCancelled()で状態を確認して、キャンセルの処理を記述しましょう。
onActivityResult内で非同期処理をしない
リストで何かを選択させて戻ってきた後、選択肢に合わせてonActivityResultでダウンロードなどの非同期処理をさせた場合、ホームボタンを押された時にリトライできません。
Serviceで行うか、onActivityResultの後に呼ばれるonResumeで行い、リトライが必要なら再表示時にもonResumeが呼ばれるのでその中で行いましょう。
以上です!
FragmentとServiceは使わなくてもアプリは作れちゃうので、ぽっかり穴が空いていて、多めになっちゃいました。
改めて参考書の紹介
この本、僕は良くあるcookbook調の本だと思っていたのですが、0からAndroidを勉強しようとしている人にこそオススメできる素晴らしい本だと初めて気づきました。
(前回読もうと思った時は寝ちゃったから)
開発環境の構築から、プログラミングの基礎、Kotlinの基礎、Androidの基本(Activity, Service, Intent, Manifest, Fragment等々)、デザインの指針、リリースまで、全部詰め込んである欲張りな内容なんです。
それでいて余計な記述が無いのでスリムマッチョな本です。
その分、一般的な入門書と比べるとプログラミング経験が無い人にはキツイかもしれないのである程度開発経験がある人向けです。
2017/9/27発売の本なので、少し古いですが、全部一気に読んでみた感じだと使える内容だけだったので問題ないです。
全部で74個のアンチパターンが書いてあるので、既にAndroidの開発経験がある人にもかなり役立つと思います。オススメ!
twitterでも開発情報をつぶやいているので、フォローお願い致します!