1

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

一种解决方案是从 App Nap 中选择退出整个应用程序,但如果我们可以排除一些 Java 线程的速度,那就太好了。

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

有人试过用Java做这样的事情吗?有任何想法吗?

谢谢!

4

2 回答 2

3

下面的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 桥的作者

于 2014-08-07T00:35:17.603 回答
1

我是引用的应用程序小睡帖子的作者,通过回溯分析发现了这一点。我不熟悉 Java 开发,但是下面的链接可能会提供一种以推荐方式访问 NSProcessInfo 的方法。有兴趣看看你发现了什么。

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

于 2014-03-20T07:07:10.780 回答