編輯:關於android開發
最近解決了一個Android APP的bug,發現APP在被後台清理後,會自動重啟。現象很奇怪,有的手機(HTC)後台清理後,程序會再次重啟,而有的手機(小米)則不會。猜想可能是小米手機內部做了處理,當執行後台清理後,對應的APP不會再重啟了。
Debug後發現,APP內部有一個Service,在Service的onStartCommand函數中,返回值是一個int。主要的兩個值是START_STICKY和START_NOT_STICKY。START_STICKY的含義是如果service進程被kill掉,保留service的狀態為開始狀態,但不保留遞送的intent對象。隨後系統會嘗試重新創建service,由於服務狀態為開始狀態,所以創建服務後一定會調用onStartCommand(Intent,int,int)方法。如果在此期間沒有任何啟動命令被傳遞到service,那麼參數Intent將為null。而START_NOT_STICKY是“非粘性的”。使用這個返回值時,如果在執行完onStartCommand後,服務被異常kill掉,系統不會自動重啟該服務。
我們的程序設置的是START_STICKY,程序擇機重啟時,一些變量沒有初始化,導致crash。改為START_NOT_STICKY後,問題解決了。但是還剩下一個問題,老大發現微信的APP不管在HTC還是小米的機器上,執行後台清理後,其Service都還在,這就很奇怪了,同事猜,可能是手機ROM中對特定的程序設置了白名單。個人覺得不大可能,但問題在於,如果所有的APP coder都可以將程序設置為不會被kill掉,為什麼僅僅是微信不被kill?還是我們技術不過硬,沒有找到不被系統kill的方法?
總之,Android系統好亂,還是蘋果大法好,大家都按規矩辦事。
Android IPC 之 AIDL(一) IPC是Inter-Process Communication的縮寫,即跨進程通信。Android中跨進程通信有多種方式,如文
ELF Format 筆記(十一)—— 程序頭結構,elfformatilocker:關注 Android 安全(新手) QQ: 2597294287 程序頭表 (pro
Android中Dialog對話框,androiddialog布局文件xml: 1 <LinearLayout xmlns:android=http://sc
【lushengduan】02、Activity的基本認識 如何彈出一條Toast提示框,lushengduantoast一、Activity的簡要理解 &n