相关疑难解决方法(0)

针对番石榴的ProGuard配置,具有混淆和优化功能

正在寻找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)

java android proguard guava

38
推荐指数
7
解决办法
2万
查看次数

Android上的Guava Cache性能不佳

我们在Android应用程序中使用加载Google Guava LoadingCache作为位图.在应用程序中,我正在运行一个绘图线程,它将缓存中的位图绘制到Canvas.如果特定位图不在缓存中,则不会绘制它,因此任何加载都不会阻止绘制线程.

然而,这种绘画导致视觉口吃,每秒帧速率不是我们想要的.我把它钉getIfPresent()在了缓存的方法上.仅此一项占应用总CPU时间的20%.在getIfPresent() LocalCache$Segment.get()需要的时间超过80%:

分析-番石榴cache.jpg

请记住,这只是一个已经存在的位图的查找.永远不会发生负担get().我认为get()LRU队列会有一个簿记开销,它决定了如果段已满就会发生哪些驱逐.但是,这是至少一个数量多么慢的顺序Key-LookupLRU-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)

我的问题是:

  • 我用错了吗?
  • 它的实现是否适用于Android? …

java android guava

19
推荐指数
1
解决办法
9426
查看次数

将Google Guava添加到Android项目 - 显着减慢了构建速度

将Google Guava r09添加到我们的Android项目后,构建时间显着增加,尤其是DEX生成阶段.我知道DEX生成需要我们所有的类+我们依赖的所有jar并将它们转换为DEX格式.番石榴是一个相当大的罐子,约1.1MB

  1. 这可能是构建放缓的原因吗?
  2. 有什么办法可以加快速度吗?

PS通常我是从Intellij构建的,但我也尝试使用Maven构建 - 结果相同.

谢谢

亚历克斯

java android build guava dex

16
推荐指数
1
解决办法
7785
查看次数

如何在Kotlin中创建一个不可变列表,它也是Java中的不可变列表?

我有一个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类完全不可变?

java immutability kotlin immutablelist

10
推荐指数
1
解决办法
7892
查看次数

用于查询集合/对象的Java库

我正在寻找允许我查询集合的Java库.我偶然发现了jFilterJoSql.

但是,似乎JoSql自2010年以来一直处于非活动状态,并且只有2个版本.jFilter似乎相当新,自去年以来没有任何新版本.

当谷歌搜索其中任何一个时,搜索结果的数量很少,这表明他们并没有被广泛使用.

您对这些库有什么建议,或者知道更活跃一次吗?

java collections

5
推荐指数
1
解决办法
5790
查看次数

如何使用GSON获得两个json对象之间的差异?

我使用此代码在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 获取两个对象之间的差异吗?

java android json gson

5
推荐指数
1
解决办法
2万
查看次数

相当于 Java 中的 Ruby #map 或 #collect?

假设我有一个数组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 …

java android

4
推荐指数
1
解决办法
1480
查看次数

标签 统计

java ×7

android ×5

guava ×3

build ×1

collections ×1

dex ×1

gson ×1

immutability ×1

immutablelist ×1

json ×1

kotlin ×1

proguard ×1