Activityに別名をつける


<activity-alias>の使い道についてはそちらを参照していただくと使い方の例はとてもわかりやすいですが、もっと単純な使い方をしてみたのでメモ。

ここでは、いいかげんな設計の結果、ショートカットで起動するActivityの名称およびパッケージが変更したくなった場合に<activity-alias>を使ってリンク切れを回避してみます。その名のとおり、activityにエイリアスを付けられるってことです。


例えば、既にリリース済みのバージョンの機能で生成されるショートカットが明示的Intentによって起動先を指定しているActivityが途中から気が変わってパッケージ構成とか変更したくなることってよくありますよね?(あんまりあっちゃいけませんが、無いとなったら話が進まないのであることにします。)こういったときに<activity-alias>を使わないと、旧バージョンで作成したショートカットを選択した時に「そんなActivity無い」と怒られます。感のいいユーザさんならショートカット作成しなおしますが、そうではないユーザさんはアプリの再インストールをしちゃったりします、データのバックアップもせずに。それで怒りのメールが飛んで来るわけです。
怖い。
そういうわけで回避方法を考えます。

例えば、 旧バージョンのショートカットは、
com.awwa.view.ControlActivity2
を呼び出しているのに、新バージョンでは、
com.awwa.ui.TrainActivity
を呼び出したい。
なんてときに<activity-alias>が使えます。

こんなかんじ(AndroidManifest.xml)。
要はandroid:nameに外から見える名前をつけて、android:targetActivityに実際のActivityを指定します。
android:nameに指定するActivityは実在しなくても構いません。
        

            
                
                
            
        
これで心置きなく適当な設計をして、後から好きなように名前を変更しても旧バージョンとの互換性が保たれるというわけです。めでたし。 
なんか、その名のとおり普通の使い方過ぎてアレですが。

コメント

このブログの人気の投稿

Execノードを使う

Joinノードを使う(その4)

SendGridのX-SMTPAPIヘッダの使い方(Section Tags、Substitution Tags編)