在Java中禁用App Nap

时间:2014-02-10 22:00:24

标签: java macos osx-mavericks energy

我们的Java应用程序将后台文件传输到服务器。当用户希望将一堆文档添加到服务器并对其他应用程序执行其他操作时,App Nap将变为活动状态并使用进度条和网络传输速度减慢窗口速度。

一个解决方案是从App Nap选择退出整个应用程序,但如果我们可以排除某些Java线程的速度变慢,那将会很棒。

我不确定如何将NSProcessInfo的功能集成到Java ...

有人试图用Java做这样的事吗?有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

以下类From here使用Java-Objective-C Bridge来集成来自Java的NSProcessInfo功能。

import ca.weblite.objc.Client;
import ca.weblite.objc.Proxy;

/**
 * From https://github.com/shannah/Java-Objective-C-Bridge/blob/master/java/test/ca/weblite/objc/NSProcessInfoUtils.java
 */
public class NSProcessInfoUtils {

    private final static long NSActivityUserInitiated = (0x00FFFFFFL | (1L << 20));

    /**
     * To ensure Mac OS X doesn't slow down your app because of App Nap, call this method 
     * @param reason the reason for allowing the app to work at full speed
     * @return the activity id as a Proxy object
     */
    public static Proxy beginActivityWithOptions(String reason) {

        Client c = Client.getInstance();
        Proxy processInfo = c.sendProxy("NSProcessInfo", "processInfo");
        return processInfo.sendProxy("beginActivityWithOptions:reason:", NSActivityUserInitiated, reason);
    }

    /**
     * When the activity is finished, to re-enable app napping call this method 
     * @param activity previously returned by beginActivityWithOptions()
     */
    public static void endActivity(Proxy activity) {

        if (activity != null) {
            Client c = Client.getInstance();
            Proxy processInfo = c.sendProxy("NSProcessInfo", "processInfo");
            processInfo.send("endActivity:", activity);
        }
    }
}

免责声明:我是Java-objective-c网桥的作者

答案 1 :(得分:1)

我是引用的app nap post的作者,通过追踪分析发现了这一点。我不熟悉Java开发,但是下面的链接可能提供了一种以推荐方式访问NSProcessInfo的方法。有兴趣看看你找到了什么。

https://code.google.com/p/rococoa/