【问题标题】:Android NDK - Event for app enters backgroundAndroid NDK - 应用程序的事件进入后台
【发布时间】:2014-06-26 09:14:30
【问题描述】:

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

我有一个应用程序可以生成一个 pthread

pthread_create(&_thread, NULL, methodToCall, NULL); //create a thread 

现在一切正常。我的问题是我只需要在应用程序处于活动状态时运行线程。在 iOS 上这不是问题,因为创建的线程被系统挂起。但是在 android 上,它甚至在锁定屏幕上仍会继续运行,直到您完全停止应用程序。

这当然不利于电池寿命。我知道我可以从我的活动 onStop() 方法中使用 JNI 调用。但这似乎相当复杂。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    希望这会有所帮助, 汤姆。

    【讨论】:

    • 是的。最大的问题不是在后台/离屏时如何挂起线程,而是在应用返回前台时如何重新激活它。
    • 好吧,正如我所说,您需要一个“标志”来告诉您是否应该挂起线程,并在您想要唤醒 POSIX (C++) 线程时更改标志。这是一个很好的例子:stackoverflow.com/questions/14924469/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多