正在寻找Guava的ProGuard配置,它将进行模糊处理和优化,因为网站上提供的默认配置不会.
不仅我不能让它导出我的apk,我一直得到:
Warning: com.google.common.collect.MinMaxPriorityQueue:
can't find referenced field 'int UNSET_EXPECTED_SIZE' in class
com.google.common.collect.MinMaxPriorityQueue$Builder
You should check if you need to specify additional program jars.
Run Code Online (Sandbox Code Playgroud) 我们在Android应用程序中使用加载Google Guava LoadingCache作为位图.在应用程序中,我正在运行一个绘图线程,它将缓存中的位图绘制到Canvas.如果特定位图不在缓存中,则不会绘制它,因此任何加载都不会阻止绘制线程.
然而,这种绘画导致视觉口吃,每秒帧速率不是我们想要的.我把它钉getIfPresent()在了缓存的方法上.仅此一项占应用总CPU时间的20%.在getIfPresent() LocalCache$Segment.get()需要的时间超过80%:

请记住,这只是一个已经存在的位图的查找.永远不会发生负担get().我认为get()LRU队列会有一个簿记开销,它决定了如果段已满就会发生哪些驱逐.但是,这是至少一个数量多么慢的顺序Key-Lookup中LRU-LinkedHashmap.get()会给我.
如果一个元素在缓存中,我们使用缓存来获得快速查找,如果查找很慢,则缓存它没有意义.我也尝试了getAllPresent(a),asMap()但它提供了相同的性能.
库版本是:guava-11.0.1.jar
LoadingCache定义如下:
LoadingCache<TileKey, Bitmap> tiles = CacheBuilder.newBuilder().maximumSize(100).build(new CacheLoader<TileKey,Bitmap>() {
@Override
public Bitmap load(TileKey tileKey) {
System.out.println("Loading in " + Thread.currentThread().getName() + " "
+ tileKey.x + "-" + tileKey.y);
final File[][] tileFiles = surfaceState.mapFile.getBuilding()
.getFloors().get(tileKey.floorid)
.getBackground(tileKey.zoomid).getTileFiles();
String tilePath = tileFiles[tileKey.y][tileKey.x].getAbsolutePath();
Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;
return BitmapFactory.decodeFile(tilePath, options);
}
});
Run Code Online (Sandbox Code Playgroud)
我的问题是:
将Google Guava r09添加到我们的Android项目后,构建时间显着增加,尤其是DEX生成阶段.我知道DEX生成需要我们所有的类+我们依赖的所有jar并将它们转换为DEX格式.番石榴是一个相当大的罐子,约1.1MB
PS通常我是从Intellij构建的,但我也尝试使用Maven构建 - 结果相同.
谢谢
亚历克斯
我有一个Java/Kotlin互操作问题.一个Kotlin不可变列表被编译成一个可变的普通java.util.ArrayList!
Kotlin(图书馆):
class A {
val items: List<Item> = ArrayList()
}
Run Code Online (Sandbox Code Playgroud)
Java(消费者):
A a = new A();
a.getItems().add(new Item()); // Compiles and runs but I wish to fail or throw
Run Code Online (Sandbox Code Playgroud)
如何从Java角度使我的Kotlin类完全不可变?
我使用此代码在Android中使用Gson比较两个JSON对象:
String json1 = "{\"name\": \"ABC\", \"city\": \"XYZ\"}";
String json2 = "{\"city\": \"XYZ\", \"name\": \"ABC\"}";
JsonParser parser = new JsonParser();
JsonElement t1 = parser.parse(json1);
JsonElement t2 = parser.parse(json2);
boolean match = t2.equals(t1);
Run Code Online (Sandbox Code Playgroud)
有两种方法可以使用GSON格式的Gson 获取两个对象之间的差异吗?
假设我有一个数组movies = get_movies()
在红宝石中我经常
movies.map {|movie| movie.poster_image_url }这样做。
在 Java 中我能做什么类似的事情?同样优雅、简洁、可读。我知道有无数种方法可以做到这一点,但如果有一种好的方法可以让我不想使用 Groovy 或其他东西,请告诉我。我确信 Java 有一些很棒的方法来做这样的事情。
这是我迄今为止使用来自https://github.com/holgerbrandl/themoviedbapi/的 TheMovieDB API Java 包装器的 Java 代码。
TmdbMovies movies = new TmdbApi(BuildConfig.MOVIEDB_API_KEY).getMovies();
MovieResultsPage results = movies.getPopularMovieList("en", 1);
// The following line is RubyJava and needs to your help!
results.getResults().map {|e| e.getPosterPath() };
// or ... more RubyJava results.getResults().map(&:getPosterPath());
Run Code Online (Sandbox Code Playgroud)
如果您了解很多 Java,但不熟悉 Ruby,请详细了解 Ruby 中的 #map/#collect。http://ruby-doc.org/core-1.9.3/Array.html#method-i-collect
到目前为止,我通过快速浏览看到的最接近回答这个问题的东西...... https://planet.jboss.org/post/java_developers_should_learn_ruby
这些看起来也很接近。http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
多种选择:Java 函数式编程
这也是 Android 的……有什么好东西可以供 Android 开发人员开箱即用,并使这种编程变得容易吗?这是函数式编程风格,对吧?
--
在得到诸如“for 循环没有任何问题”和(基本上)“语法并非一切”等非常好的见解的回复后,我决定我不会尝试让我的所有 Java …