編輯:關於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信息,可作為臨時替代方案,穩定性較差
今天測試發現了游戲的一個問題,系統郵件,如果發了tab,在android上一打開郵件內容就會crash。而且他們很確定是tab的問題。 憑我多個月的經驗(確實
選擇要包裹的代碼塊,然後按下ctrl + alt + t
本文實現一個簡易的人品計算器來實踐在不同Actitity之間數據傳遞intent的數據傳遞從A界面打開B界面 把A界面的數據傳遞給B界面1. intent.setData
android切換Theme主流三種方式來切換Theme,第一種是通過內置的style來切換,一般用於夜間模式/日間模式切換。第二種是通過apk來實現插件化,第三種是通過