小编And*_*Dev的帖子

你能安全地同步Java方法参数吗?

拿这个代码:

public class MyClass {
    private final Object _lock = new Object();
    private final MyMutableClass _mutableObject = new MyMutableClass()

    public void myMethod() {
        synchronized(_lock) { // we are synchronizing on instance variable _lock
            // do something with mutableVar 
            //(i.e. call a "set" method on _mutableObject)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,想象一下将myMethod()中的代码委托给传递锁的一些辅助类

public class HelperClass {
    public helperMethod(Object lockVar, MyMutableClass mutableVar) {
        synchronized(lockVar) { // we are now synchronizing on a method param, 
                                // each thread has own copy
            // do something with …
Run Code Online (Sandbox Code Playgroud)

java parameters methods locking synchronized

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

如何使用动态数据实时更新Android ListView?

我有一个后台线程加载数据,我想在Android ListView中显示.数据经常变化(即每秒1-2次).有时,数据集中的行数也会发生变化(但肯定不会像单元格中的数据那样频繁变化).

据我所知,有两种方法可以更新单元格中的数据:

  1. 让后台线程通知UI线程新数据准备就绪,然后UI线程可以调用BaseAdapter.notifyDataSetChanged().但是,我在不止一个地方读过,如果经常调用该方法,它会很慢,因为ListView必须重新构建其所有子视图Views.

  2. 如果数据集计数未更改,我可能会找到与更改的数据关联的所有可见ListView单元格,并手动更新值而不调用notifyDataSetChanged().这可能会有效,但我认为不幸的是,当我通知List List适配器应该为我处理更新通知和机制时,我必须手动更新视图.如果数据集计数随时间变化(即不仅ListView的每个单元格内的数据发生变化,而且ListView中的单元格总数可以根据提供实时数据的后台线程增长或缩小,此方法也不起作用).

我当然会感谢其他已实现此方案的人的想法,以及他们如何优化代码简单性,最重要的是性能.

performance android listview background redraw

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

如何在Java客户端中存储服务器密码以便以后重新连接?

我有一个客户端应用程序通过安全/ SSL套接字连接到服务器.应用程序启动时,用户需要登录.现在我要求我需要将实际密码发送到服务器(通过SSL加密),而不是发送密码哈希的首选方法.话虽如此,我如何安全地将密码存储在客户端内存中,以便在客户端由于连接丢失而需要在幕后重新连接到服务器时可以重新使用此密码?

我可以轻松地加密密码,甚至可以将其放入KeyStore并稍后检索它以进行重新连接,但是,即使我这样做,在我看来,如果他在调试器中访问了应用程序,黑客也可以检索密码.当需要在客户端暂时存储密码时,这只是生活中的事实吗?

是否有更好/首选的方法来实现相同的目标(即允许客户端重新连接到服务器而无需用户在初次登录后再次输入密码)?从服务器发送的过期登录令牌是否是更好的方法(我可以将此过期令牌传递回服务器而不是重新连接时的密码)?

最后,一般来说,当应用程序被正确"剥离"调试符号时,有人将调试器连接到Java桌面或Android上正在运行的应用程序是多么容易?我是否需要担心这种情况,或者Java是否会保护我的运输应用程序没有附加调试器或其他内存分析器?

java passwords debugging keystore

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