Android 的用法解析

1. 問題

    最近在公司業務應用開發中有這樣一個需求:需要改變HomeActivity (launcher 的入口) 的名稱爲FirstActivity,這麼改一下很簡單,那就改吧,按理說也沒有什麼大礙。可是在App 發佈後在某些手機上版本升級後,點擊桌面icon 竟然無法啓動App直接崩潰。

後來追述Log才搞清楚原因:某些手機安裝的launcher 會cache App 的歷史信息,例如HomeActivity的名稱等。所以當App升級到新版本後,點擊桌面icon 仍然會啓動老的HomeActivity,然而新App 的HomeActivity已經更改名稱FirstActivity,因此無法啓動直接崩潰。(如果用戶關機重新啓動,點擊桌面icon App是能夠正常啓動的,因爲launcher cache 的信息已經清除了)

2. 解決辦法

用<activity-alias>重定向HomeActivity

  1. <activity android:name="com.example.FirstActivity"  
  2.     android:exported="true">  
  3. </activity>  
  4.   
  5. <!-- Solution for upgrading issue -->  
  6. <activity-alias android:name="com.example.HomeActivity"  
  7.     android:targetActivity="com.example.FirstActivity"  
  8.     android:exported="true"  
  9.     android:enabled="true">  
  10.     <intent-filter>  
  11.         <action android:name="android.intent.action.MAIN" />  
  12.         <category android:name="android.intent.category.LAUNCHER" />  
  13.     </intent-filter>  
  14. </activity-alias>  

3. 注意

(1)在AndroidManifest.xml 文件中,新的 <activity> 必須放在 <activity-alias>之前定義,否則重定向可能會失敗.

(2)如果你的App引用了其它工程,請務必將 <activity-alias>的定義聲明放在App的AndroidManifest.xml 文件中,不要放在被引用的工程的AndroidManifest.xml 文件中,否則用Eclipse "project -> Run As -> Android Application" 無法啓動你的App.

4. 驗證

   手動安裝,手動點擊icon是可以正常啓動,修改完成!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章