个人笔记

一直在谈人生的意义是什么?是什么呢? 在于你的理想,让越来越多的人认可你的理想,认可你的行为,并一起努力实现它。 在于让更多的人认可你的观念,并一起为之努力奋斗,并实现它。

1. connection timeout 和 read timeout for sockets

connection timeout 是链接初始化的超时时间。如:完成TCP握手的时间。
read timeout 是等待读取数据的时间。

1) What is the difference between connection and read timeout for sockets?

The connection timeout is the timeout in making the initial connection; i.e. completing the TCP connection handshake. The read timeout is the timeout on waiting to read data. Specifically, if the server fails to send a byte seconds after the last byte, a read timeout error will be raised.

2) What does connection timeout set to “infinity” mean? In what situation can it remain in an infinitive loop? and what can trigger that the infinity-loop dies?

It means that the connection attempt can potentially block for ever. There is no infinite loop, but the attempt to connect can be unblocked by another thread closing the socket. (A Thread.interrupt() call may also do the trick … not sure.)

3) What does read timeout set to “infinity” mean? In what situation can it remain in an infinitive loop? and what can trigger that the infinity-loop dies?

It means that a call to read on the socket stream may block for ever. Once again there is no infinite loop, but the read can be unblocked by a Thread.interrupt() call, closing the socket, and (of course) the other end sending data or closing the connection.

详情见:http://stackoverflow.com/questions/3069382/what-is-the-difference-between-connection-and-read-timeout-for-sockets

2. 软键盘操作

  1. 切换显示软键盘
    这个效果是:如果有软键盘,那么隐藏它;反之,把它显示出来。代码方法如下:
      //1.得到InputMethodManager对象
      InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
      //2.调用toggleSoftInput方法,实现切换显示软键盘的功能。
      imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
    
  2. 显示软键盘
      //1.得到InputMethodManager对象
      InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
      //2.调用showSoftInput方法显示软键盘,其中view为聚焦的view组件
      imm.showSoftInput(view,InputMethodManager.SHOW_FORCED);
    
  3. 隐藏软键盘
      //1.得到InputMethodManager对象
      InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
      //2.调用hideSoftInputFromWindow方法隐藏软键盘
      imm.hideSoftInputFromWindow(view.getWindowToken(), 0); //强制隐藏键盘
    
  4. 获取输入法打开的状态
      //1.得到InputMethodManager对象
      InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
      //获取状态信息
      boolean isOpen=imm.isActive();//isOpen若返回true,则表示输入法打开
    

3. getIdentifier()获取资源ID

使用getIdentifier()方法可以方便的通过资源名称获取对应的资源ID。 主要有两种方式:

4. Android笔记

5. 使用System.arraycopy实现数组之间的复制

System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。其函数原型是:

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

注意:src and dest都必须是同类型或者可以进行转换类型的数组.
有趣的是这个函数可以实现自己到自己复制,比如:

int[] fun ={0,1,2,3,4,5,6};
System.arraycopy(fun,0,fun,3,3);

则结果为:{0,1,2,0,1,2,6};
实现过程是这样的,先生成一个长度为length的临时数组,将fun数组中srcPossrcPos+length-1之间的数据拷贝到临时数组中,再执行System.arraycopy(临时数组,0,fun,3,3).

6. 使用JsBridge要注意setWebViewClient函数

JsBridge项目地址:https://github.com/lzyzsd/JsBridge

注意:使用BridgeWebView时,若要设置setWebViewClient()函数, 务必要自定义WebViewClient并继承BridgeWebViewClient,否则java与js无法交互

7. Java并发编程:Callable、Future和FutureTask

Java并发编程:Callable、Future和FutureTaskhttp://www.cnblogs.com/dolphin0520/p/3949310.html

8. 获取状态栏高度

  1. 通过反射获取状态栏高度
    /**
     * 获取状态栏高度
     */
    public static int getStatusBarHeight(Context context){
     int statusBarHeight = -1;
     try {
         Class<?> clazz = Class.forName("com.android.internal.R$dimen");
         Object object = clazz.newInstance();
         int height = Integer.parseInt(clazz.getField("status_bar_height").get(object).toString());
         statusBarHeight = context.getResources().getDimensionPixelSize(height);
     } catch (Exception e) {
         e.printStackTrace();
     }
     return statusBarHeight;
    }
    
  2. 通过资源获取高度
    /**
     * 获取顶部状态栏(Status Bar)高度
     */
    private int getStatusBarHeight(Context context) {
     Resources resources = context.getResources();
     int resourceId = resources.getIdentifier("status_bar_height", "dimen","android");
     int height = resources.getDimensionPixelSize(resourceId);
     Log.v("dbw", "Status height:" + height);
     return height;
    }  
    /**
     * 获取底部导航栏(Navigation Bar)高度
     */
    private int getNavigationBarHeight(Context context) {
     Resources resources = context.getResources();
     int resourceId = resources.getIdentifier("navigation_bar_height","dimen", "android");
     int height = resources.getDimensionPixelSize(resourceId);
     Log.v("dbw", "Navi height:" + height);
     return height;
    }
    

其他方式可参考: http://blog.csdn.net/a_running_wolf/article/details/50477965
http://blog.csdn.net/devilnov/article/details/9309659

9. keytool命令用法

密钥和证书管理工具

命令:

 -certreq            生成证书请求
 -changealias        更改条目的别名
 -delete             删除条目
 -exportcert         导出证书
 -genkeypair         生成密钥对
 -genseckey          生成密钥
 -gencert            根据证书请求生成证书
 -importcert         导入证书或证书链
 -importpass         导入口令
 -importkeystore     从其他密钥库导入一个或所有条目
 -keypasswd          更改条目的密钥口令
 -list               列出密钥库中的条目
 -printcert          打印证书内容
 -printcertreq       打印证书请求的内容
 -printcrl           打印 CRL 文件的内容
 -storepasswd        更改密钥库的存储口令

使用 "keytool -command_name -help" 获取 command_name 的用法
Table of Contents