我有一些活动,其中一些Handlers
正在以不超过5分钟的间隔执行.活动从a启动BroadcastReceiver
并可以在屏幕关闭时启动等待用户抓取电话并获取用户输入,当发生这种情况时,onPause()
调用活动以确保CPU处于睡眠模式.我没有将活动设置为打开屏幕,因为我想尽可能多地保存电池.
我已经用我的手机对它进行了测试并且工作得很好,而屏幕关闭时都会Handlers
执行所有必须运行的代码.如果我在活动打开时打开和关闭屏幕,一切正常.
现在,我已经到处读到,当屏幕关闭且CPU休眠时,某些设备无法按预期工作,大多数时候都使用加速度计.现在我的问题是,我是否需要获取一个WakeLock
所以当我的活动打开时CPU不会睡觉?我真的想知道这一点,因为正如我之前所说,我不想通过购买昂贵的东西来"浪费"电池WakeLock
.
我更喜欢一个真正了解其工作原理的人的详细答案.
performance android battery android-wake-lock android-handler
我有一个非常奇怪的问题让我发疯.
我有一个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_NODELAY
true:
newsock = serverSocket.accept
newsock.sync = true
newsock.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, true)
Run Code Online (Sandbox Code Playgroud)
这是我的研究:
信息:我每秒都会将netstat数据转储到一个文件中.
ESTABLISHED
.FIN_WAIT1 …
我到处都读到,当你在Java中定义-128到127之间的整数时,它不是创建一个新对象,而是返回一个已创建的对象.
除了让新手程序员比较Integer对象==
以查看它们是否是相同的数字之外,我认为没有任何其他的做法,但我认为这很糟糕,因为他们确实认为他们可以比较任何整数==
,并且也是教学任何编程语言的不良做法:比较两个"不同"对象的内容==
.
为什么要这样做还有其他原因吗?或者在设计语言时(在我看来)像JavaScript中的可选分号一样,这只是一个错误的决定?
编辑:我在这里看到他们解释了行为:为什么整数常量池的行为在127处变化?
我问为什么他们设计它有这种行为,而不是为什么这种行为发生.
我们正在尝试通过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
上面的功能相同的功能.
我们知道,Function
是eval()
因为他们的行为几乎是同样的,但现在的问题是,直到这点Function
是eval()
?也许因为Function()
它有自己的范围而不是eval
在同一范围内运行代码的范围,包含Function
调用的函数实际上是由V8优化的.此外,他们在这里讨论eval
但不是关于Function
构造函数.
另一个隐含在这个问题的问题是,Function()
V8 内部运行的脚本是否正在运行?
我有一个带有一堆插件的源目录.每个插件都有自己的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.
我创建了一些具有自己的数据ACK系统的客户端/服务器应用程序.它最初是在TCP中制作的,因为有一些限制,但基础是考虑UDP.
我发送到服务器的数据包有自己的封装(数据包ID和数据包大小标题.我知道UDP也有校验和所以我没有添加标题.),但是TCP如何工作,我知道服务器可能没有收到整个数据包,所以我收集并缓冲了收到的数据,直到收到完整的有效数据包.
现在我有机会将我的客户端/服务器程序传递给UDP,我知道与TCP的一个区别是数据没有按照发送的顺序接收(这就是为什么我添加了数据包ID头).
我想知道的是:如果我发送多个数据包,是否会收到没有保证订单但保证封装的数据包?我的意思是,如果我发送一个大小为1000字节的数据包和另一个大小为400字节的数据包,服务器将接收2个数据包,1000个字节中的一个和400字节中的另一个,或者有机会接收200个1000个字节,那1000个字节的400个字节以及之后的其他字节如TCP可以做什么?
tcp ×2
android ×1
ant ×1
battery ×1
copy ×1
difference ×1
flash ×1
java ×1
javascript ×1
networking ×1
optimization ×1
performance ×1
ruby ×1
sockets ×1
udp ×1
v8 ×1
wildcard ×1