我有一个TextView,它呈现基本HTML,包含2个以上的链接.我需要捕获链接上的点击并打开链接 - 在我自己的内部WebView中(不在默认浏览器中).
处理链接呈现的最常用方法似乎是这样的:
String str_links = "<a href='http://google.com'>Google</a><br /><a href='http://facebook.com'>Facebook</a>";
text_view.setLinksClickable(true);
text_view.setMovementMethod(LinkMovementMethod.getInstance());
text_view.setText( Html.fromHtml( str_links ) );
Run Code Online (Sandbox Code Playgroud)
但是,这会导致链接在默认的内部Web浏览器中打开(显示"使用完整操作..."对话框).
我尝试实现一个onClickListener,当单击链接时正确触发,但我不知道如何确定单击了哪个链接...
text_view.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
// what now...?
}
});
Run Code Online (Sandbox Code Playgroud)
或者,我尝试创建自定义LinkMovementMethod类并实现onTouchEvent ...
public boolean onTouchEvent(TextView widget, Spannable text, MotionEvent event) {
String url = text.toString();
// this doesn't work because the text is not necessarily a URL, or even a single link...
// eg, I don't know how to extract the clicked link from the greater paragraph of …Run Code Online (Sandbox Code Playgroud) 嗯......我回到原点.我无法想象我的生活.
我收到以下错误:
FATAL ERROR: JS Allocation failed - process out of memory
Run Code Online (Sandbox Code Playgroud)
我可以列举几十个(是的,几十个)我试图找到这个问题根源的东西,但实际上它太过分了.以下是关键点:
我的假设是(因为第二点),泄漏可能不是原因; 相反,似乎可能有一个非常大的SINGLE对象.以下线程支持这个理论:: 在Node.js中使用JSON.stringify导致'进程内存不足'错误
我真正需要的是一些方法来找出应用程序崩溃时内存的状态,或者可能是导致FATAL ERROR的堆栈跟踪.
基于我上面的假设,一个10分钟的堆转储是不够的(因为该对象不会驻留在内存中).
这个问题正在破坏我的生产服务器的稳定性.
回顾一下,基本思路是我的节点服务器有时会间歇性地减速,有时会导致网关超时.正如我从日志中可以看出的那样,有些东西阻塞了节点线程(意味着传入的请求不被接受),但我不能为我的生活找出什么.
问题的严重程度不等.有时应该<100ms的请求需要大约10秒才能完成; 有时它们甚至从未被节点服务器接受.简而言之,就好像一些随机任务正在工作并阻塞节点线程一段时间,从而减慢(甚至阻塞)传入请求; 我可以肯定的一点是,需要修复的症状是"网关超时".
问题来来去去,没有任何警告.我无法将其与CPU使用率,RAM使用率,正常运行时间或任何其他相关统计信息相关联.我已经看到服务器处理大的负载很好,然后在小负载下出现这个错误,所以它甚至看起来与负载无关.在太平洋标准时间凌晨1点左右看到错误并不罕见,这是当天最小的加载时间!重新启动节点应用似乎可能会让问题消失一段时间,但这真的不会告诉我太多.我确实想知道它是否可能是node.js中的一个错误 ...不是很令人欣慰,因为它正在杀死我的生产服务器.
我一直用nodetime记录我的服务器,这是它的主旨:
我还检查了我的MongoDB服务器,其CPU使用率<5%且没有任何请求需要> 100ms完成,所以我非常怀疑是否存在瓶颈.
我已经使用Q-promises(几乎所有)代码使用Q-promises(参见代码示例),当然也避免了像瘟疫这样的Sync()调用.我试图在我的测试服务器(OSX)上复制这个问题,但运气不好.当然,这可能只是因为生产服务器被许多人以如此多的不可预测的方式使用,我无法通过压力测试来复制......
我正在使用Node.js 的Q模块试图在我有很多步骤的情况下避免"厄运金字塔".例如:
function doTask(task, callback)
{
Q.ncall(task.step1, task)
.then(function(result1){
return Q.ncall(task.step2, task);
})
.then(function(result2){
return Q.ncall(task.step3, task);
})
.fail(callback).end();
}
Run Code Online (Sandbox Code Playgroud)
基本上这似乎工作; 如果任何任务步骤引发错误,它将被传递给回调(尽管我欢迎改进,因为我是node.js promises的新手).但是,当我需要尽早中止任务链时,我遇到了问题.例如,如果result1成功返回,我可能想提前调用回调并中止其余的回调,但我尝试这样做的失败...
function doTask(task, callback)
{
Q.ncall(task.step1, task)
.then(function(result1){
if(result1)
{// the rest of the task chain is unnecessary
console.log('aborting!');
callback(null, result1);
return null;
}
return Q.ncall(task.step2, task);
})
.then(function(result2){
console.log('doing step 3...');
return Q.ncall(task.step3, task);
})
.fail(callback).end();
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我看到两个"中止!" 和"做第3步......"打印.
我相信我只是在这里误解了一些基本原则,所以我将不胜感激.谢谢!
组织者中新的Xcode 7"Crashes"选项卡显示了AppStore为我的应用程序发生的一些崩溃.根据文档,应该有一个堆栈跟踪.但是,6次崩溃都没有象征着堆栈跟踪:

当然,当我提交到商店时,我包含了dsym和调试信息.我仍然在我的组织者中提交了提交内容,因此我的机器上仍然存在dsyms.如何在此获得正确的堆栈跟踪?
我开发了一个Chrome浏览器扩展程序,在极少数情况下,它会崩溃(例如,右上方出现一个气泡,说明"_____已崩溃!点击此处重新加载它.")
问题是,当它这样做时,background.html立即消失(死亡),我找不到任何信息来帮助我调试出错的地方.我已经打开chrome://崩溃并看到那里的条目可能与我的问题相对应,但崩溃日志只给我一个提交错误报告的链接(无法下载或查看日志).
基于这个Goole条目查找崩溃日志我发现了一些.dmp文件,但它们基本上是不可读的(.dmp文件似乎是某种非符号化的堆栈跟踪,或者那种性质的东西).
有没有人有一个很好的方法来调试Chrome扩展程序崩溃?
编辑:经过进一步调查,我确定chrome://崩溃与我的扩展崩溃无关.我刚刚崩溃了,但Chrome://崩溃的最新时间戳是几个小时前的.
我在我的EC2服务器上运行ElasticSearch.我无法理解ElasticSearch的日志/调试.
有时候,服务在运行好几天后会消失(我希望它会崩溃).例如:
# curl -XGET http://localhost:9200/
curl: (7) couldn't connect to host
Run Code Online (Sandbox Code Playgroud)
根据这个ElasticSearch页面,我预计我的日志将可用于/var/log/elasticsearch...但是......
# ls /var/data/elasticsearch
ls: /var/data/elasticsearch: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我没有/config/logging.yml以任何方式更改文件.ElasticSearch以root身份运行,因此权限应该没有问题.
我错过了什么?
根据imotov的回复,我发现了我的日志文件/root/elasticsearch/elasticsearch-0.20.5/logs......但正如他预测的那样,它们非常无益.
我检查了我的Java版本:
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)
Run Code Online (Sandbox Code Playgroud)
看起来这是一个非常古老的版本,我正在努力升级它.
我也看了一下我的记忆图

我们可以看到在ES死亡之前有一个奇怪的尖峰.我想在这里发现消息来源.唯一的其他过程应该是节点; 它们的上限分别为4Gb和1.2Gb(一旦ES死亡,只剩下节点,RAM就会下降到1.2Gb,你可以看到).所以要么ElasticSearch超过它的4Gb,要么其他东西导致内存飙升......
FWIW,我正在使用m1.large实例(8GB RAM).
我对我的数据库进行了一些重组,不再需要某些集合.但是,有太多的东西要用手去除(实际上是数千个).每个有问题的集合都以"cache_"开头,并包含一些我想确保完全清理的索引.
我试图了解如何使用mongo shell来遍历所有集合名称并删除以"cache_"开头的集合.根据Queries和Cursors文档,我了解如何循环集合中的文档,而不是如何使用MongoDB shell循环遍历数据库中的集合.
在伪代码中,这就是我需要的:
var all_collections = show collections
for(var collection in all_collections)
if(collection.name.indexOf('cache_')==0)
collection.drop()
Run Code Online (Sandbox Code Playgroud)
FWIW,我已经完成了搜索"mongodb循环通过集合名称"等等,并没有找到任何东西,但也许我sux at teh googlez = P
在一个相关的说明...在进行这种程度的重组后,我应该做一个db.repairDatabase()或任何类型的事情,以确保丢弃的索引等都很好,干净?
谢谢.
哎呀.
我使用mongoose,并意外地创建了一个集合"stats".直到几周后我才意识到这将成为一个问题,所以我现在需要重命名(而不是仅删除)该集合......
但是,我的尝试遇到了一个可预测的问题:
PRIMARY> db.stats.find();
Thu Oct 18 10:39:43 TypeError: db.stats.find is not a function (shell):1
PRIMARY> db.stats.renameCollection('statssnapshots');
Thu Oct 18 10:39:45 TypeError: db.stats.renameCollection is not a function (shell):1
Run Code Online (Sandbox Code Playgroud) 我有一个场景,我需要从我的Node.js/Express RESTful API返回一个非常大的对象,转换为JSON字符串.
res.end(JSON.stringify(obj));
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不能很好地扩展.具体来说,它在我的测试机上运行良好,有1-2个客户端连接,但我怀疑当许多客户端同时请求大型JSON对象时,此操作可能会导致CPU和内存使用量中断.
我一直在寻找一个异步JSON库,但我找到的唯一一个似乎有一个问题(具体来说,我得到一个[RangeError]).不仅如此,它还在一个大块中返回字符串(例如,回调用整个字符串调用一次,意味着内存占用不会减少).
我真正想要的是JSON.stringify函数的完全异步管道/流式版本,这样它就可以在数据直接打包到流中时对其进行写入...从而节省了内存占用,同时也消耗了CPU同步时尚.