Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發中的技術細節

Android開發中的技術細節

編輯:關於Android編程

1、PendingIntent的使用注意事項

public static PendingIntent getActivity (Context context, int requestCode, Intent intent, int flags)

Android開發中,通知欄消息點擊事件和widget界面view點擊事件都是設置PendingIntent,PendingIntent在系統中是一個Map,它的key是Intent和requestCode。如果 PendingIntent的requestCode一樣並且Intent一樣,那麼系統認為兩個PendingIntent是一樣的。而Intent是否一樣系統只判斷action、category、datauri,不判斷extra。由此可知,當我們在開發中遇到使用PendingIntent開發導致Intent傳入參數沒有及時更新時,首先檢查我們的Intent裡面是不是只設置了extra數據,而沒有添加其他action、category、datauri用於區別來源。

另外PendingIntent的第四個參數flags也需要引起我們的注意:

FLAG_CANCEL_CURRENT:

如果當前系統中已經存在一個相同的PendingIntent對象,那麼就將先將已有的PendingIntent取消,然後重新生成一個PendingIntent對象。

FLAG_NO_CREATE:

如果當前系統中不存在相同的PendingIntent對象,系統將不會創建該PendingIntent對象而是直接返null。

FLAG_ONE_SHOT:

該PendingIntent只作用一次,如果該PendingIntent對象已經觸發過一次,那麼下次再獲取該對象並且再觸發時,系統將會返回一個SendIntentException,在使用這個標志的時候一定要注意哦。

FLAG_UPDATE_CURRENT:

如果系統中已存在該PendingIntent對象,那麼系統將保留該PendingIntent對象,但是會使用新的Intent來更新之前PendingIntent中的Intent對象數據,例如更新Intent中的Extras。這個非常有用,例如之前提到的,我們需要在每次更新之後更新Intent中的Extras數據,達到在不同時機傳遞給MainActivity不同的參數,實現不同的效果。


2、關於Android HttpURLconnection獲取ContentLength 的隱藏問題

(CTWAP網絡環境下HTTP的GET方法獲取網絡數據時返回Content-Length與實際下載數據大小不一致)

問題分析

問題的誘因鎖定為“ctwap/ctnet”和“獲取ContentLength的方式”

經過抓包分析,當客戶端用HttpURLconnection獲取數據並且請求頭RequestMethod為GET的時候,ctwap/ctnet網關會對數據進行過濾處理,進行Gzip壓縮,而android apk包默認是Zip壓縮格式,由 於Gzip壓縮比高於Zip,導致網關對apk包壓縮處理後,length會小於原先值,最後導致客戶端通過HttpURLconnection.getContentLength()獲取的length比apk實際大小要小。

解決方案

<1>獲取ContentLength的時候,請求頭RequestMethod設置成“HEAD”,這樣網關不會對body進行Gzip壓縮計算大小,而是直接返回原始大小。

<2>通過返回頭ContentRange字段獲取ContentLength信息,可作為臨時替代方案,穩定性較差



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved