小编Jor*_*lez的帖子

当CPU休眠时,Handler post会不会被解雇?

我有一些活动,其中一些Handlers正在以不超过5分钟的间隔执行.活动从a启动BroadcastReceiver并可以在屏幕关闭时启动等待用户抓取电话并获取用户输入,当发生这种情况时,onPause()调用活动以确保CPU处于睡眠模式.我没有将活动设置为打开屏幕,因为我想尽可能多地保存电池.

我已经用我的手机对它进行了测试并且工作得很好,而屏幕关闭时都会Handlers执行所有必须运行的代码.如果我在活动打开时打开和关闭屏幕,一切正常.

现在,我已经到处读到,当屏幕关闭且CPU休眠时,某些设备无法按预期工作,大多数时候都使用加速度计.现在我的问题是,我是否需要获取一个WakeLock所以当我的活动打开时CPU不会睡觉?我真的想知道这一点,因为正如我之前所说,我不想通过购买昂贵的东西来"浪费"电池WakeLock.

我更喜欢一个真正了解其工作原理的人的详细答案.

performance android battery android-wake-lock android-handler

16
推荐指数
1
解决办法
1万
查看次数

TCP套接字在关闭之前停止接收数据

我有一个非常奇怪的问题让我发疯.

我有一个Ruby服务器和一个Flash客户端(Action Script 3).这是一款多人游戏.

问题是一切都工作正常,然后突然间,随机播放器停止接收数据.当服务器由于不活动而关闭连接时,大约20-60秒后,客户端会收到所有缓冲的数据.

客户端XMLsocket用于检索数据,因此客户端接收数据的方式不是问题.

socket.addEventListener(Event.CONNECT, connectHandler);
function connectHandler(event)
{
    sendData(sess);
}

function sendData(dat)
{
    trace("SEND: " + dat);
    addDebugData("SEND: " + dat)
    if (socket.connected) {
        socket.send(dat);
    } else {
        addDebugData("SOCKET NOT CONNECTED")
    }
}

socket.addEventListener(DataEvent.DATA, dataHandler);
function dataHandler(e:DataEvent) {
    var data:String = e.data;
    workData(data);
}
Run Code Online (Sandbox Code Playgroud)

服务器在每次写入后刷新数据,因此不是刷新问题:

sock.write(data + DATAEOF)
sock.flush()
Run Code Online (Sandbox Code Playgroud)

DATAEOF 是null char,因此客户端解析字符串.

当服务器接受新套接字时,它设置sync为true,autoflush和TCP_NODELAYtrue:

newsock = serverSocket.accept
newsock.sync = true
newsock.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, true)
Run Code Online (Sandbox Code Playgroud)

这是我的研究:

信息:我每秒都会将netstat数据转储到一个文件中.

  • 当客户端停止接收数据时,netstat会显示套接字状态仍然存在ESTABLISHED.
  • 几秒钟后,send-queue会相应地增加发送的数据.
  • tcpflow显示数据包被发送2次.
  • 当服务器关闭套接字时,套接字状态将更改为FIN_WAIT1 …

ruby flash networking tcp actionscript-3

8
推荐指数
1
解决办法
1606
查看次数

Java整数池.为什么?

我到处都读到,当你在Java中定义-128到127之间的整数时,它不是创建一个新对象,而是返回一个已创建的对象.

除了让新手程序员比较Integer对象==以查看它们是否是相同的数字之外,我认为没有任何其他的做法,但我认为这很糟糕,因为他们确实认为他们可以比较任何整数==,并且也是教学任何编程语言的不良做法:比较两个"不同"对象的内容==.

为什么要这样做还有其他原因吗?或者在设计语言时(在我看来)像JavaScript中的可选分号一样,这只是一个错误的决定?

编辑:我在这里看到他们解释了行为:为什么整数常量池的行为在127处变化?

我问为什么他们设计它有这种行为,而不是为什么这种行为发生.

java object-comparison

5
推荐指数
1
解决办法
3100
查看次数

Function()构造函数是否未被V8优化,如eval?

我们正在尝试通过WebSockets接收Web组件的方法.这些组件包含自定义脚本,它们应该在组件内的上下文中运行.

简而言之,我们有一些脚本字符串,并希望运行它们.

现在我们正在使用eval这个,像这样:

function ctxEval(ctx, __script) {
    eval(__script);
    // return things with the ctx
}
Run Code Online (Sandbox Code Playgroud)

并按预期工作,但我读到任何包含的函数eval都没有被V8优化.我想把它转换成new Function()这样:

new Function("ctx", __script)(ctx);
Run Code Online (Sandbox Code Playgroud)

这样我就可以实现与ctxEval上面的功能相同的功能.

我们知道,Functioneval()因为他们的行为几乎是同样的,但现在的问题是,直到这点Functioneval()?也许因为Function()它有自己的范围而不是eval在同一范围内运行代码的范围,包含Function调用的函数实际上是由V8优化的.此外,他们在这里讨论eval但不是关于Function构造函数.

另一个隐含在这个问题的问题是,Function()V8 内部运行的脚本是否正在运行?

javascript optimization v8

5
推荐指数
1
解决办法
571
查看次数

你可以在不使用ant-contrib的foreach的情况下做这个看似简单的Ant复制任务吗?

我有一个带有一堆插件的源目录.每个插件都有自己的lib目录.我希望将每个lib目录的内容合并到lib我的构建中的单个目录中.理论上你会做这样的事情:

<copy todir="build/web/lib">
    <fileset dir="web/plugins/*/lib/" includes="**/*" />
</copy>
Run Code Online (Sandbox Code Playgroud)

但是,当dir属性包含通配符时,Ant会阻塞.ant-contrib是唯一的选择吗,或者你可以用香草蚂蚁做这个吗?

扼流圈的消息是 build.xml:28: [...]/web/plugins/*/lib does not exist.

ant copy wildcard

3
推荐指数
1
解决办法
2364
查看次数

UDP数据包可以像TCP一样部分发送吗?

我创建了一些具有自己的数据ACK系统的客户端/服务器应用程序.它最初是在TCP中制作的,因为有一些限制,但基础是考虑UDP.

我发送到服务器的数据包有自己的封装(数据包ID和数据包大小标题.我知道UDP也有校验和所以我没有添加标题.),但是TCP如何工作,我知道服务器可能没有收到整个数据包,所以我收集并缓冲了收到的数据,直到收到完整的有效数据包.

现在我有机会将我的客户端/服务器程序传递给UDP,我知道与TCP的一个区别是数据没有按照发送的顺序接收(这就是为什么我添加了数据包ID头).

我想知道的是:如果我发送多个数据包,是否会收到没有保证订单但保证封装的数据包?我的意思是,如果我发送一个大小为1000字节的数据包和另一个大小为400字节的数据包,服务器将接收2个数据包,1000个字节中的一个和400字节中的另一个,或者有机会接收200个1000个字节,那1000个字节的400个字节以及之后的其他字节如TCP可以做什么?

sockets udp tcp difference

3
推荐指数
1
解决办法
1200
查看次数