在Android下用Qt开发后台运行的程序总结
最近项目需求,需要移植到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。