小编fra*_*acz的帖子

LocationListener和内存泄漏

根据找到用户位置的示例应用程序,监听活动中的位置更改是个好主意:

class MyActivity extends Activity implements LocationListener {
    @Inject
    private LocationManager locationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
    }

    @Override
    public void onLocationChanged(Location location) {
        // do something with location
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

但是,我不确定.当配置发生更改时,我的活动将被销毁并重新创建,下次将自己注册为侦听器.对旧活动的引用是在LocationManager中进行的,不是吗?

如果我提取LocationListener到单独的对象,我仍然有如何通知当前活动有关新位置的问题(不一定与请求活动相同).

有没有什么共同的模式来解决这个问题?

android location memory-leaks locationlistener

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

如何从gerrit获取给定主题的所有更改

我们希望将主题用于正在开发的更改,但我们需要获取它们,因为我们是从服务器构建的.我们知道我们可以获取提交和更改,但出于简单原因,我们希望使用主题名称进行提取.

我们还没有找到办法.有人知道我们怎么做到这一点?

我们已经放弃了使用分支来测试开发,因为它会给主存储库带来垃圾,我们将不得不删除它们并在全球范围内复制所有这些删除.

git gerrit

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

在lambda表达式中的TimeSpan

我想得到lambda函数,它将查询在最后一分钟提交的项目.如何指定?

var items= Items.Where(i=>DateTime.Now.Subtract(i.Date)...)
Run Code Online (Sandbox Code Playgroud)

c# lambda

3
推荐指数
3
解决办法
1536
查看次数

写入 Lucene.Net 索引时内存使用量持续增长

自从在谷歌上搜索 Lucene.Net 的用法后,我就开始了这个讨论,但我没有发现任何真正有用的东西。\n问题很简单:我在构建和更新 Lucene.Net 索引时遇到问题。特别是,即使我将 SetRAMBufferSizeMB 固定为 256、SetMergeFactor 固定为 100、SetMaxMergeDocs 固定为 100000,它的内存使用量仍在不断增长。此外,每次使用索引时,我都会小心地使用 Close() 和 Commit() 方法。

\n\n

为了使 lucene.Net 适用于我的数据,我从本教程开始:http://www.lucenetutorial.com/lucene-in-5-minutes.html

\n\n

对于 10^5 和 10^6 文档,似乎需要 1.8GB 内存。因此,如果实际 RAM 使用量是 7 倍以上,为什么还要设置 SetRAMBufferSizeMB 参数呢?有人真的知道如何限制内存使用吗?

\n\n

此外,我观察到要处理 10^5 或 10^6 文档,有必要为 x64 平台编译 Lucene.Net。事实上,如果我为 x86 平台编译代码,索引崩溃会系统性地触及 1.2GB RAM。\n是否有人能够使用更少的 RAM 索引相同数量(甚至更多)的文档?在什么硬件和软件设置下?我的环境配置如下:\n- os := win7 32/64 位。\n- sw := .Net Framework 4.0 \n- hw := 具有 6GB RAM 的 12 核 Xeon 工作站。\n- Lucene.Net 版本:2.9.4g(当前稳定版)。\n- Lucene.Net目录类型:FSDirectory(索引写入磁盘)。

\n\n
\n\n

好的,我使用您关于重新使用文档/字段实例的建议测试了代码,但是代码在内存使用方面的执行完全相同。\n这里我针对我在索引过程中跟踪的一些参数发布了一些调试行1000000文件。

\n\n …

optimization lucene.net nlp information-retrieval

3
推荐指数
1
解决办法
2839
查看次数

如何使用通配符模拟泛型方法的行为

我正在使用EasyMock(3.2).我想基于Spring Security为我的部分安全系统编写一个测试.我想嘲笑Authentication它,以便它返回空的权限列表.其方法声明如下:

 Collection<? extends GrantedAuthority> getAuthorities();
Run Code Online (Sandbox Code Playgroud)

所以我写了一个测试:

Authentication authentication = createMock(Authentication.class);
Collection<? extends GrantedAuthority> authorities = Collections.emptyList();
expect(authentication.getAuthorities()).andReturn(authorities);
Run Code Online (Sandbox Code Playgroud)

但是编译器正在抱怨第三条线路andReturn:

The method andReturn(Collection<capture#1-of ? extends GrantedAuthority>) in the type IExpectationSetters<Collection<capture#1-of ? extends GrantedAuthority>> is not applicable for the arguments (Collection<capture#2-of ? extends GrantedAuthority>

我究竟做错了什么?


更新:

当我将声明更改authorities为:

Collection<GrantedAuthority> authorities = Collections.emptyList();
Run Code Online (Sandbox Code Playgroud)

如建议的那样,它仍然没有编译,但错误有点不同:

The method andReturn(Collection<capture#1-of ? extends GrantedAuthority>) in the type IExpectationSetters<Collection<capture#1-of ? extends GrantedAuthority>> is not applicable for the arguments (Collection<GrantedAuthority>)

我确保GrantedAuthority在两个声明中实际上是相同的 - …

java generics easymock

3
推荐指数
1
解决办法
3836
查看次数

如何在每个Spring JSON响应之前添加")]}',\n"以防止常见漏洞

我想为")]}',\n"servlet生成的所有JSON响应添加一个前缀,以防止AngularJS建议的 JSON漏洞.我找到了一种修改响应内容的方法.使用OncePerRequestFilterSpring 的基类,我最终得到:

public class JsonArrayVulnerabilityPreventorFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        PrintWriter responseOut = response.getWriter();
        CharResponseWrapper responseWrapper = new CharResponseWrapper(response);
        filterChain.doFilter(request, responseWrapper);
        if (StringUtils.contains(responseWrapper.getHeader("Content-Type"), "application/json")) {
            responseOut.write(")]}',\n");
        }
        String originalServletResponse = responseWrapper.toString();
        responseOut.write(originalServletResponse);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我引入响应包装器时,Content-Type标头(以及其他几个)从响应中消失了.我已经确认,如果没有包装器,response.getHeaderNames()调用将返回14个不同的头文件(包括内容类型),而使用包装器时,只有9个.它还会破坏字符编码,因为使用包装器时,Content-Type头文件不会告诉浏览器内容是在UTF-8中.为什么?


CharResponseWrapper 这里这里的来源和想法.

public class CharResponseWrapper extends HttpServletResponseWrapper {
    private CharArrayWriter output;

    public String toString() {
        return output.toString(); …
Run Code Online (Sandbox Code Playgroud)

java spring servlets servlet-filters

3
推荐指数
1
解决办法
1547
查看次数

如何使用 Jackson 将嵌套的 ObjectId 序列化为 String?

许多 问题涉及从转换ObjectIdString与杰克逊。所有答案都建议创建自己的JsonSerializer<ObjectId>ObjectId使用@JsonSerialize(using = ToStringSerializer.class).

但是,我有一张有时包含的地图ObjectIds,即:

class Whatever {
  private Map<String, Object> parameters = new HashMap<>();
  Whatever() {
    parameters.put("tom", "Cat");
    parameters.put("jerry", new ObjectId());
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望杰克逊将其转换为:

{
  "parameters": {
    "tom": "cat",
    "jerry": "57076a6ed1c5d61930a238c5"
  }
}
Run Code Online (Sandbox Code Playgroud)

但我得到:

{
  "parameters": {
    "tom": "cat",
    "jerry": {
      "date": 1460103790000,
      "machineIdentifier": 13747670,
      "processIdentifier": 6448,
      "counter": 10631365,
      "time": 1460103790000,
      "timestamp": 1460103790,
      "timeSecond": 1460103790
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经注册了转换(在 Spring 中)

public class …
Run Code Online (Sandbox Code Playgroud)

java spring json jackson

3
推荐指数
1
解决办法
4732
查看次数

如何防止在分离的HEAD中提交

为什么git允许你承诺一个独立的头?有没有可以禁用它的预提交钩子?什么目的?许多新开发人员这样做,我想找到一种方法来禁用它.

git pre-commit-hook git-detached-head

3
推荐指数
1
解决办法
843
查看次数

量角器如何从div获取文本?

试图在我的div中获取文本:

<div class="ng-scope ng-binding">
         Hello this is it!
</div>
Run Code Online (Sandbox Code Playgroud)

在我的茉莉花脚本中(使用xpath):

var helloTxt=driver.findElement(by.xpath('//*[@id="top"]/div/div/div[3]/div[2]/div/div[1]/div[1]/div/div'));
expect(helloTxt.getText()).toBe('Hello this is it!');
Run Code Online (Sandbox Code Playgroud)

代码如下所示:

<div class="container">
        <div data-ng-repeat="message in getMessages() track by $index">
            {{message}}
        </div>
</div>
Run Code Online (Sandbox Code Playgroud)

如何查看邮件{{message}}?是否有另一种方法来访问此div而不使用xpath?或者我该如何解决这个问题?

jasmine angularjs protractor

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

md-select检查md-options中重复选项的标准是什么

我一直在我的项目中使用Angular Material一段时间.使用md-select时,我遇到了一个问题,即我得到重复的md-option值错误.

我知道md-options采用唯一值,我正在为md-options分配一个数组.但是,这是一个对象数组.所以我想知道用于区分对象的标准是什么.API没有说太多.

我的用例要求根据另一个md-select的选择更改md-select的md-options.因此,我正在观看第一个md-select的选择,并在其更改时触发监视并更新第二个md-select的md-options.

以下是我用于将数组分配给md-options的方法:

$scope.$watch('search.selectedTrades', function(newTrades, oldTrades) {
    if ((newTrades.length === 0)) {
        $rootScope.search.selectedTrades = oldTrades;
        return;
    }
    if ($rootScope.search.selectedTrades && $rootScope.search.selectedTrades.length > 0) {
        if (!$rootScope.identity.isClusterManager) {
            $rootScope.search.selectedTrades = newTrades;
            SearchFilterData.setSelectedTrades(newTrades);
            $rootScope.search.selectedClusters = [];
            $scope.clusters = [];
            $scope.subareas = [];
            var clusterKeys = [];
            $rootScope.search.selectedTrades.forEach(function(t) {
                t.lstClusters.forEach(function(c) {
                    if (clusterKeys.indexOf(c.ClusterKey) == -1) {
                        clusterKeys.push(c.ClusterKey);
                        $scope.clusters.push(c);
                    }
                })
            })
        }
    } else {
        $scope.clusters = [];
        $scope.subareas = [];
        $rootScope.search.selectedClusters = [];
        $rootScope.search.selectedSubAreas = [];
        SearchFilterData.setSelectedTrades($rootScope.search.selectedTrades);
    }
});
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,clusterKey是每个对象的唯一实体.所以我用它来将唯一值推送到数组中.然而,在我选择和取消选择各种选项之后,这在几个随机场景中发生.请告知我做错了什么以及标记两个对象重复的标准是什么

angularjs angular-material

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