我遇到了一个因URL.setURLStreamHandlerFactory(factory);正在更新的Android应用程序中调用而导致的意外错误.
public class ApplicationRoot extends Application {
static {
/* Add application support for custom URI protocols. */
final URLStreamHandlerFactory factory = new URLStreamHandlerFactory() {
@Override
public URLStreamHandler createURLStreamHandler(final String protocol) {
if (ExternalProtocol.PROTOCOL.equals(protocol)) {
return new ExternalProtocol();
}
if (ArchiveProtocol.PROTOCOL.equals(protocol)) {
return new ArchiveProtocol();
}
return null;
}
};
URL.setURLStreamHandlerFactory(factory);
}
}
Run Code Online (Sandbox Code Playgroud)
介绍:
这是我的情况:我正在维护一种用于企业时尚的非市场应用程序.我的公司销售的平板电脑包含由业务开发和维护的预安装应用程序.这些预安装的应用程序不是ROM的一部分; 它们作为典型的未知源应用程序安装.我们不会通过Play商店或任何其他市场进行更新.相反,应用程序更新由自定义Update Manager应用程序控制,该应用程序直接与我们的服务器通信以执行OTA更新.
问题:
我维护的此Update Manager应用程序偶尔需要自行更新.应用程序更新后,它立即通过android.intent.action.PACKAGE_REPLACED广播重新启动,我在AndroidManifest中注册.但是,在更新后立即重新启动应用程序时,我偶尔会收到此消息Error
java.lang.Error: Factory already set
at java.net.URL.setURLStreamHandlerFactory(URL.java:112)
at …Run Code Online (Sandbox Code Playgroud) 是否有一个Git命令可用于确定合并是否在进程中(即未提交)?我知道我可以简单地检查一下.git/MERGE_HEAD,但对于命令行脚本来说这是正确的和/或面向未来的吗?
我想从现有的字节数组生成一个"新"字节数组,而不必从堆中实际分配.换句话说,"新"字节数组应该与现有数据共享相同的基础数据.问题是我希望新的字节数组具有不同的长度.
byte[] buffer = { 0x01, 0x02, 0x04, 0x08, 0x10 };
byte[] shared = slice(buffer, 1, 3);
/* shared should be { 0x02, 0x04, 0x08 } and have length of 3 */
Run Code Online (Sandbox Code Playgroud)
我这样做是因为我有一个字节数组,我需要从中提取数据包,然后将该数据包传递给单参数方法,该方法只需要一个byte[].我想避免复制数据包中包含的数据.就我的目的而言,可以假设内容buffer不会在范围内发生变化shared.
这可能吗?在使用缓冲区时,似乎是一个常见的事情.提前致谢,