天天看點

qt for android程式保活 程式背景一直運作不被清理掉(未完)1.提高服務優先級:2.建立守護程序3.定時喚醒+持續占有(這個事情qq幹過)

本部落客要就是分享如何讓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

我的最總結果是未實作效果,今後有機會一定繼續把這塊欠缺補上,繼續補在這個部落格 下面。

繼續閱讀