最近專案需求,需要移植到Android下,探索了許久才找到一個簡單的后臺運行的方法,具體如下:
目前用Qt開發的程式已移植到了windows、linux以及Android三個系統,但是Android不同于windows和linux,后兩者能夠使程式最小化視窗運行,對第三方呼叫的軟體無影響,但是Android系統下把程式放到了非主界面后,就處于休眠狀態,不再運行,因此需要考慮將Android下的程式做成服務,這樣就可以保證程式最小化后,依舊能夠在后臺保持激活狀態。
示例代碼如下:
Int main(int argc, char*argv[])
{
#if defined(Q_OS_ANDROID)
QAndroidService a(argc, argv); //這個訊息事件的回圈可以實作Android服務
//Android服務下不能有界面,因為界面需要QApplication才行
//邏輯處理部分
return a.exec()
#else
QApplication a(argc, argv);
//邏輯處理部分,可以有主界面的
return a.exec();
#endif
}
雖然這樣可以后臺運行,但是在程式啟動的時候,還是占據著主界面,需要有個最小化的功能,此時可以通過JNI來呼叫.java實作,示例代碼如下:(具體用法可以看Qt on android核心編程 這本書)
QAndroidJniObject javaNotification = AndroidJniObject::fromString(infoMsg);
QAndroidJniObject::callStaticMethod<void>("com/hisense/hictp3/NotificationClient","mini","(Ljava/lang/String;)V",javaNotification.object<jstring>());
Java部分代碼就呼叫一個函式
m_instance.moveTaskToBack(true);
但是有幾個問題:
1、 程式放在后臺,當Android記憶體不足時,會清理掉的;
2、 這個程式不能有界面,若需要界面,則另外寫一個app。
uj5u.com熱心網友回復:
你將QApplication換成 QCoreApplication試試看?uj5u.com熱心網友回復:
你可以參考一下:https://doc.qt.io/qt-5/android-services.html#和https://wiki.qt.io/AndroidServices這里有創建服務的方法轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/119711.html
標籤:Qt
下一篇:高德地圖配置
