本部落客要就是分享如何讓qt開發的android程式在手機上運作,切換到背景的時候,程式仍然在一直運作,為什麼這麼做呢,因為我有需求是app連接配接藍牙後,程式切換到背景,仍然能接受到藍牙發送的資料并儲存時間等資訊,但是在實際實驗中發現,在app切換到背景後,定時器中的計數就停止了,說明鎖屏或者切換背景程式處于低優先級狀态,在打開程式後,定時器中的計數接着按home鍵之前的數,說明程式是沒有被打死的,程式的記憶體還在,是以,問題就來了,如何讓程式在背景持續運作,并且有消息能處理。看似簡單的問題,實際操作起來很難,像一些程式,qq,微信,,,大公司的程式很輕而易舉的就可以實作背景運作,但他們絕對不是用qt開發的,是以,我的目标就是用qt來實作這個功能,因為我不是搞安卓開發的,隻是業餘,玩玩而已,哈哈,正文開始:
1.提高服務優先級:
通常保活都離不開Server,一般情況下,播放**媒體播放**等服務會被系統授予較高的優先級,
但是,如果該服務占用資源過高,還是容易被gc掉,是以這裡我背景循環播放一段隻有幾十Kb的音量為0的音頻。
2.建立守護程序
簡單的說,就是建立2個以上的服務,服務之間互相喚醒
具體做法就是在一個服務的**onDestory()**銷毀時,發送一個廣播給其他還活着的服務,
活着的服務收到廣播立即喚醒被回收的服務。
這裡注意,守護程序裡面盡量少做事,少占記憶體。
3.定時喚醒+持續占有(這個事情qq幹過)
- 監聽一些系統廣播,比如鎖屏廣播(因為現在很多高版本的Android系統會在系統鎖屏時進入打盹模式,背景的很多東西容易被清理)
- 收到鎖屏廣播後,建立一個隻有1像素的頁面。(頁面其實是看不見的),提高程序優先級
- 系統解鎖後,移除這個1像素頁面。
https://blog.csdn.net/gf771115/article/details/77457053
2019年5月19日01:28:55 腦殼疼,還沒搞定,采用WakeLock方式,但是
一直失敗,明天繼續嘗試,累死了睡覺
2019年5月19日20:20:02
搞不出來,很難受,在網上了解了幾個方式,都想去嘗試,但是有的方式能 嘗試,無效果, 有的方式壓根都不知道去如何嘗試,技術差得遠,愁人。
想要嘗試的幾種方式:
1.使用wakelock,使主線程持有鎖,不會被挂起,直到程式退出才釋放鎖,不知道是不是這樣用,反正沒有效果
2.使用 雙線程,互相喚醒,我就是建立了一個子線程,但是不知道如何去實作兩個線程之間互相喚醒
3.建立service,讓程式在背景之後,service保持運作,資料都在service内處理,這個service貌似在java中,建立一個定時器,
然後把你想要處理的資料放在這裡處理,那麼問題來來,因為使用的是qt,隻會qt調用java檔案去執行一些Android原生的功能,不知道怎麼把qt的程式内容發給java然後再去處理,這就很坑了。
4.背景播放一段0音量的音頻檔案,提高程式的優先級,未實作。
附上幾個參考連結,希望對各位看官有所幫助:
https://blog.csdn.net/ryantang03/article/details/8628753
http://blog.chinaunix.net/uid-29355319-id-4491428.html
https://www.jianshu.com/p/48ed37738a9e
https://blog.csdn.net/hello_json/article/details/84954039
https://blog.csdn.net/jun4331247/article/details/51182390
我的最總結果是未實作效果,今後有機會一定繼續把這塊欠缺補上,繼續補在這個部落格 下面。