我想知道是否有办法确定我的应用程序是从ndk进入后台的。
我有一个使用
生成pthread的应用程序pthread_create(&_thread, NULL, methodToCall, NULL); //create a thread
现在这一切都很好。我的问题是我只需要在应用程序处于活动状态时运行该线程。在iOS上,这不是问题,因为系统会暂停创建的线程。在Android上,它甚至会在锁定屏幕上继续运行,直到你完全停止应用程序。
这对电池寿命来说当然不太好。我知道我可以使用我的Activities onStop()方法中的JNI调用。但这似乎相当复杂。
那么有没有更好的方法在jni / c ++中检测到我的应用程序已变为非活动状态?
答案 0 :(得分:0)
我认为你不能使用一些消息传递函数从你的c ++线程访问你的Android应用程序状态。由于您的应用程序暂停(当用户关闭应用程序或屏幕时),您无法将消息从android传递到您的c ++线程。
我可以想到两种可能对您有用的解决方案: 1.当您的活动“暂停”时 - 将调用“OnPause()”方法,并且您可以“停止”您的线程或使其休眠。然后在“OnResume()”方法中,您可以再次启动它或将其唤醒,这取决于什么线程(如何使用它)。
2.您可以使用一个标志来检查应用是否已暂停。然后让你的c ++线程休眠几秒/毫秒并检查那个标志 - 如果标志打开 - 停止你的线程,否则继续。在这种情况下,您无法唤醒线程,除非您执行类似于第一个的操作(每当应用程序暂停/重新激活时使其休眠/唤醒)。
希望这有帮助, 汤姆。