何つかっちゃダメなんだ?
AndroidのAPIというのは大きく変遷してきた。
Android2.x、3.x、そして今では4.x系まで進んでいる。
Honeycomb (3.x)、
Ice Cream Sandwich (4.0.x)、
Jelly Bean (4.1.x, 4.2.x, 4.3.x)と
なんだかついていけないですね。
古くから開発をしているベテランの人はさておき、
大体の人が2.x系から開発を始めた、もしくは今から始めるという方なのではないでしょうか。
そこで、今回は2.x系から開発をしている方を対象に、また今から開発を始める人でも
流れが分かるように、APIの変遷について書いてみようと思う。
ということで、ネット上で情報が散乱している、非推奨クラスやメソッドについて
ある程度まとめてみた。(まだまだあると思うし、非推奨の定数などは含んでなかったりする)
非推奨になったやつ | 代替API | どこから? |
---|---|---|
ServiceのonStart メソッド | ServiceのonStartCommandメソッド | 1.6 |
TabActivity | ActionBar | 3.x |
TabHost | ActionBar | 3.x |
PreferenceActivity | PreferenceFragment | 3.x |
AsyncTask | AsyncTaskLoader | 3.x |
Activity.showDialog()などActivityのDialog関連のメソッド | DialogFragment | 3.x |
Contacts | ContactsContract | 3.x |
AbsoluteLayout | FrameLayoutあるいはRelativeLayout | 3.x |
android.text.ClipboardManager | android.content.ClipboardManager | 3.x |
ActivityGroup | FragmentLayout | 3.x |
Activity#managedQuery | ontentResolverのquery | 4.x |
Gallery | HorizontalScrollView、ViewPager | 4.1.2 |
SlidingDrawer | 独自実装もしくはAndroid Open Source Projectのコードを使用 | 4.2 |
DigitalClock | TextClock | 4.2 |
DateUtilsの一部 | SimpleDateFormatとか | 4.2 |
TwoLineListItem | RelativeLayout、LinearLayoutで自作 | 4.2 |
非推奨じゃないが他のクラスでも出来るよってやつ | 代替API | どこから? |
---|---|---|
Intent、ContentProvider | SystemClipboard | 3.x |
では、具体的な話の後に、もうちょっと大枠の変化の流れについて書いてみよう。
(これらは結構語りつくされた感がある)
FragmentとActionBarの登場
上の表を見ても分かる通り、3.x以降FragmentとActionBarが登場したことをきっかけにして、
非推奨のクラスが増えた。
・ Fragment
3.x以前は1画面に対して1Activityであったが、Fragmentの存在でそうではなくなった。
1画面上で複数の画面を表示し、操作を出来るようになったのである。
しかも、Activityのライフサイクルよりもさらにコアな部分のライフサイクルを操作できるようになった。
これにより、処理効率も少し良くなった。
アバウトに言うとそういうことである。
従って、Fragmentに取って代られたやつらが@depreacatedになったわけだ。
・ ActionBar
ActionBarのUIにより、タブというUIの意味がなくなった。
だからTab関連の古いAPIについては非推奨となっている。
簡単に言えば「ふるいのダサいよね」ってことだ。
それに加えて、標準の実装がしっかりしているので
ActionBarの方が開発者がそれぞれ実装する手間が少ないといえよう。
なんでいきなり変わったの?
そもそも、FragmentもActionBarもタブレットのために生まれたといっても良いと思う。
(ご存じのとおり3.x系はタブレット端末である)
ここらへんは推測なのだが、2.x系の小さい画面だとアクションバーっていうのはあまり効果的ではない。
タブレットの大きな画面なら常にオプションメニューを表示していた方が便利っていうデザイン設計が元になって出来たのが、
ActionBarなんじゃないかと思う。
もちろんAPIとしても単純なTabHostよりも優れた機能になっているというのもあるのだが。
Fragmentについても、タブレットの大きな画面だからこそ、
サイドにコンテンツのメニューを出したり(ちょうどこのブログのように)、
複数の画面を用意しようというような設計思想が生まれたのだと思う。
そこから派生して、4.x系ではなんとかこの優れたAPIを継続的に
利用できないかという考えに至ったんじゃないかな。
APIの変更が頻繁に起こると、開発者には優しくないしね。アンドロイドの基盤API作る方にも優しくないし。
その結果、4系の端末が4.8インチとか非常にデカくなったんじゃないかと、
勝手に解釈して、妙に納得している。
これは覚えておいた方がいい
その他、AsyncTaskとダイアログ関連が非推奨になったことは重要。
非同期処理やダイアログの処理は必ずどこかでぶつかるはずなので、
押さえておくべきポイントである。
AsyncTaskLoaderを使いましょう。 DialogFragmentを使いましょう。
まとめ
非推奨のクラスとメソッドについて一覧化し、
そのうえでOSごとのAPIの変遷について書いてみました。
一覧をある程度把握しておけばOSバージョンの違いにより例外吐いて落ちる、、、とかいう
事象に遭遇した時も、なんとなく察しがつくんじゃないかな。
(僕も4.x系の端末でAsyncTask実装のアプリ使用したら不具合起きたことあったし)
ざっくりいうと、以下の指針を守っていれば良いと思います。
・これから覚える or 実装していくのであれば、4.xに対応したアプリケーション実装を目指そう。
・ActionBarとFragmentとAsyncTaskLoaderは最低限対応しよう。
・2.xにも対応したい場合はandoid-support-v4.jarを使おう。
あと、Galleryとか使えなくなっちゃうのもなかなか痛いよね。。。
それぞれの、細かい使い方とかしっかり覚えていかないとなぁ。僕も。
出典
http://blog.local-c.com/archives/620
http://www.ric.co.jp/book/contents/pdfs/895_deprecated.pdf
http://yuki312.blogspot.jp/2012/08/androidjellybean.html
※なお、この記事のAlertDialog.Builderは非推奨じゃないのに、非推奨って勘違いして書いてたっぽいです。ご覧いただいてた方申し訳ありません。 記載を削除しました
0 件のコメント:
コメントを投稿