我正在使用以下代码从服务创建通知:
NotificationManager notificationManager = (NotificationManager) ctx
.getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence tickerText = "bla ...";
long when = System.currentTimeMillis();
Notification notification = new Notification(R.drawable.icon,
tickerText, when);
Intent notificationIntent = new Intent(ctx, SearchActivity.class).
putExtra(SearchActivity.INTENT_SOURCE,
MyNotificationService.class.getSimpleName());
PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0,
notificationIntent, 0);
notification.setLatestEventInfo(ctx, ctx.getString(R.string.app_name),
tickerText, contentIntent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(1, notification);
Run Code Online (Sandbox Code Playgroud)
日志清楚地表明方法startActivity被调用两次:
04-02 23:48:06.923: INFO/ActivityManager(2466): Starting activity: Intent { act=android.intent.action.SEARCH cmp=com.xy/.SearchActivity bnds=[0,520][480,616] (has extras) }
04-02 23:48:06.923: WARN/ActivityManager(2466): startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { act=android.intent.action.SEARCH cmp=com.xy/.SearchActivity bnds=[0,520][480,616] (has extras) } …Run Code Online (Sandbox Code Playgroud) 我有什么选择使ByteBuffer线程安全?众所周知,它不是线程安全的,因为它保护位置,限制和一些(/ all?)方法依赖于这个内部状态.
对于我的目的,如果多个读线程是安全的就足够了,但对于其他未来的访问者,我想知道我需要知道哪些技术/技巧/陷阱才能使其完全线程安全.
我的想法:
我可以使用哪些其他技巧?我如何使用DirectBuffer实现"读取时克隆字节" - 它是否可能?可能会将完整的ByteBuffer(ByteBuffer.slice)切成一个解决方案吗?
更新:是什么意思在这个问题与"复制(同步时),以获得一个新的实例指向同一个映射字节"
我试图让自己熟悉,SecurityManager但即使这个简单的场景也失败了.当我从IDE或命令行中运行以下内容时,我得到以下异常 ;
access denied ("java.util.PropertyPermission" "java.home" "read")
Run Code Online (Sandbox Code Playgroud)
我以为我用这段代码允许了所有内容:
Run Code Online (Sandbox Code Playgroud)Policy.setPolicy(new Policy() { @Override public PermissionCollection getPermissions(CodeSource codesource) { Permissions perm = new Permissions(); perm.add(new AllPermission()); return perm; } }); System.setSecurityManager(new SecurityManager()); System.out.println(System.getProperty("java.home"));
这与JVM的派生策略有关吗?我怎么干净利落setPolicy()?
以下代码似乎也出现了同样的误解:
System.setSecurityManager(new SecurityManager());
final Permissions allPermission = new Permissions();
allPermission.add(new AllPermission());
AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
System.out.println(System.getProperty("java.home"));
return null;
}, new AccessControlContext(new ProtectionDomain[]{new ProtectionDomain(null, allPermission)}));
Run Code Online (Sandbox Code Playgroud)
更新:第二种情况是可以理解的,因为提供的权限只是一个进一步的限制:(javadoc)操作是通过调用者保护域拥有的权限与指定的域所拥有的权限的交集来执行的.AccessControlContext
最近我读了一个研讨会的工作说:
匹配算法[对于一般图]可以扩展到加权情况,这似乎是可以在多项式时间内解决的"最难"的组合优化问题之一.
我立即想到了以下问题:
你知道其他"P-hard"问题吗?
现在我想把P-hard定义为:"在这个问题的文献中发现了一个多项式算法(1950年以后)".(或者,如果已经有一个确定性算法可以解决多项式时间内的问题,那怎么能更好地定义"硬"?)
我正在使用JavaScript(node.js)进行一些服务器端编码,我想编写有效的xml.
我发现了两个库,但我相信还有更多/更好!?
要求:开源(用于商业用途)
如果项目快速,小巧且易于使用(按此顺序),那将会很酷.我想有一个更低级别访问ala
doc.addElement('xy').addAttr('name', 'bob');
Run Code Online (Sandbox Code Playgroud) 使用Java在Android上映射大型文件的内存效果很好.但是,即使有多个映射调用,当总共映射超过~1.5GB时,它也会失败:
mmap failed: ENOMEM (Out of memory)
Run Code Online (Sandbox Code Playgroud)
请参阅此处的完整讨论.注意:它在服务器Linux上不会失败.为应用程序启用了android:largeHeap ="true".
以下Java代码被称为几百次,每次调用请求~1MB:
ByteBuffer buf = raFile.getChannel().map(allowWrites ? FileChannel.MapMode.READ_WRITE : FileChannel.MapMode.READ_ONLY, offset, byteCount);
Run Code Online (Sandbox Code Playgroud)
避免请求一个通常难以找到的大的连续内存块.请在此处查看完整代码.请记住,将"段大小"(即单个地图调用的大小)加倍无效,这意味着它会停在相似的内存位置.另外值得注意的是,两个略低于极限的应用程序正在执行正常(暗示每个进程限制).
使用多个文件而不是一个具有多个映射的文件会有帮助吗?
我已经读过,这可能是虚拟地址空间的每个进程限制.哪里可以找到更多相关信息?我可以用NDK更改此设置,例如如何调用ulimit?可以由madvise帮我一点吗?
更新
有关可在Java中使用的mmap工具,请参阅此处的答案
我不是Java newby,但我只知道垃圾收集.现在我想通过一些实践经验来改变它.我的目标是延迟不到0.3秒,或者在极端情况下0.5也可以.
我有一个-Xmx50gb(-Xms50gb)的应用程序,并设置其他GC选项:
-XX:+UseG1GC -Xloggc:somewhere.gc.log -XX:+PrintGCDateStamps
Run Code Online (Sandbox Code Playgroud)
但是现在我偶尔因为垃圾收集而长时间暂停超过5秒,尽管似乎有足够的可用内存.我找到的一个原因:
[GC pause (G1 Evacuation Pause) (young) 42G->40G(48G), 5.9409662 secs]
Run Code Online (Sandbox Code Playgroud)
为什么GCG1仍然为此做"停止世界"?(或者至少我看到它正好在这个时候停止我的应用程序)为什么它会做这样的负面清理,如果它不是真的有必要,因为有超过12%的可用RAM空闲.另外我认为默认值-XX:MaxGCPauseMillis是200毫秒,为什么这个值被违反29或甚至50(见下文)?
延迟的另一个原因是:
[GC pause (Metadata GC Threshold) (young) (initial-mark) 40G->39G(48G), 10.4667233 secs]
Run Code Online (Sandbox Code Playgroud)
这可能通过这个答案解决,例如只增加元数据空间-XX:MetaspaceSize=100M
顺便说一句:使用JSE 1.8.0_91-b14
更新:此类事件的详细GC日志
2016-08-12T09:20:31.589+0200: 1178.312: [GC pause (G1 Evacuation Pause) (young) 1178.312: [G1Ergonomics (CSet Construction) start choosing CSet, _pending_cards: 3159, predicted base time: 1.52 ms, remaining time: 198.48 ms, target pause time: 200.00 ms]
1178.312: [G1Ergonomics (CSet Construction) add young regions to CSet, …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个简单易用的Java系统,它为我创建了一个REST服务.所以我找到了dropwizard,但据我可以使用谷歌,它发现它缺乏热部署,虽然码头能够这样做.使用maven-shade-plugin时,至少需要10秒才能构建该东西.此外,我的IDE报告说,当涉及shade-plugin时,它不能使用编译保存功能(也就是热部署).
我可以用某种方式使用hotdeployment吗?或者我可以使用什么呢?
更新:如果没有什么能解决这个问题,我可能会使用球衣和guice等的组合,这在本文中有所解释
我需要一种比Bresenham线绘制算法慢一点的算法,但必须更精确.使用'exact'我的意思是:应该打印每个触摸的像素.不多也不少!这意味着使用更粗的线或类似物不是一种选择,因为将涉及太多的像素.此外,我并不需要一个图形框架或类似就像是问 之前,我需要的算法!应用程序实际上不是"图形",它位于像素为"图块" 的地理区域.
对我来说主要的问题是我需要子像素精度,这意味着一条线可以从0.75/0.33开始,而不仅仅是0/0,就像整数值的情况一样.我尝试在过去几个小时内创建一个可行的解决方案,但无法使其正常工作 - 边缘情况太多了.
首先,我认为抗锯齿的版本就像从算法吴应,但它打印像素过多(尤其是起点和终点),并在某些情况下,还惦记着,例如在非常短的线条一些像素.
然后我试着让Bresenham在我用'else if'取代第二个'if'的地方工作,这里指出了它,但它更接近但仍然不存在.然后我尝试将Bresenham从整数移动到浮点精度,这导致无限循环(因为x,y值跳过完成条件if (y1 == y2 && x1 == x2)).
我可以使用天真的线条绘图解决方案,但delta我应该使用哪个?例如,如果我使用0.1,我仍然会错过一些像素并使用较小的值,它可能会花费太长时间(仍然会错过像素).
C/Java/...中的工作解决方案将不胜感激.至少它应该适用于八分之一,但一个完整的解决方案会更好.
更新:我提出了以下想法:使用朴素行光栅化,您可以为每个点计算4个像素候选.然后检查这4个像素,如果该线真正穿过它们.但我不确定线/盒交叉点是否足够快.
java ×6
algorithm ×2
android ×2
android-ndk ×1
bresenham ×1
bytebuffer ×1
dropwizard ×1
graphics ×1
hotdeploy ×1
javascript ×1
jms ×1
math ×1
mmap ×1
np-hard ×1
queue ×1
raytracing ×1
rest ×1
rmi ×1
xml ×1