Android NDK - 应用程序的事件进入后台

时间:2014-06-26 09:14:30

标签: android c++ multithreading android-ndk java-native-interface

我想知道是否有办法确定我的应用程序是从ndk进入后台的。

我有一个使用

生成pthread的应用程序
pthread_create(&_thread, NULL, methodToCall, NULL); //create a thread 

现在这一切都很好。我的问题是我只需要在应用程序处于活动状态时运行该线程。在iOS上,这不是问题,因为系统会暂停创建的线程。在Android上,它甚至会在锁定屏幕上继续运行,直到你完全停止应用程序。

这对电池寿命来说当然不太好。我知道我可以使用我的Activities onStop()方法中的JNI调用。但这似乎相当复杂。

那么有没有更好的方法在jni / c ++中检测到我的应用程序已变为非活动状态?

1 个答案:

答案 0 :(得分:0)

我认为你不能使用一些消息传递函数从你的c ++线程访问你的Android应用程序状态。由于您的应用程序暂停(当用户关闭应用程序或屏幕时),您无法将消息从android传递到您的c ++线程。

我可以想到两种可能对您有用的解决方案:  1.当您的活动“暂停”时 - 将调用“OnPause()”方法,并且您可以“停止”您的线程或使其休眠。然后在“OnResume()”方法中,您可以再次启动它或将其唤醒,这取决于什么线程(如何使用它)。

2.您可以使用一个标志来检查应用是否已暂停。然后让你的c ++线程休眠几秒/毫秒并检查那个标志 - 如果标志打开 - 停止你的线程,否则继续。在这种情况下,您无法唤醒线程,除非您执行类似于第一个的操作(每当应用程序暂停/重新激活时使其休眠/唤醒)。

希望这有帮助, 汤姆。