一些问题和要点

1.    远程读取txt文件,文件首行是数字,下面几行是文字(txt文件用utf-8编码保存),读取首行数字字符串的时候,获取的字符增加一个不可见的字符串,idea中可见(与txt文件编码方式有关,txt用ansi编码保存就没问题,可 一般数据不会存在编码问题),字符串长度也增加了一,导致后面将字符串转换成数字不成功。

最后用暂用str.replaceAll("\\D", "");解决,为什么会出现这个看不见的字符还不得而知。

今天(2015-03-06)了解到原来是,打开记事本会自动在开头加上几个莫名的字符。

2.    昨天碰到一个问题,纠结了快一天,具体是这样的,在百度地图上根据两点经纬度求两点间距离,结果出现许多0.0的结果(集合里所有点,依次求距离),然而ios也用相同的方法却可以得到正确的结果,经过一段调试后发现是 distance = Math.round(distance * 100)/100这句惹的祸,这主要是四舍五入去掉distance小数后两位后面的小数,保留两位小数,这在ios里面可以求的正确结果,但是java里面这样就直接转整形了,所以零点几的数都变成了零, 正确应该这样distance = Math.round(distance * 100)/100.0, 在后一个一百后面加上点零,就正确了,哎当时也没太注意,此时颇有点一零值千金的感觉。

3.PopupWindow 在Acitivity的onCreate方法里面调用showAtLocation方法会报以下错:

android.view.WindowManager$BadTokenException: Unable to add window --token null is not valid; is your activity running?

这个问题应该是PopupWindow的实例生成的时候,它的window对象无法获取到正确的Token,这样必须等到Activity的onCreate方法执行再去调用PopupWindow的一些show方法,解决办法:1,放在Click事件中,2,要想一进入Activity就show的,那么放在onWindowFocusChanged();方法中show 。

如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框

4.对于Spring的配置文件的bean元素,其scope属性有如下几个值:

(a).singleton 单例

(b),prototype 表示每次从容器中取出bean时,都会生成一个新实例.相当于new出来一个对象.

(c).request 该属性是基于web的,表示每次接收一个请求时,都会生成一个新实例.在这种情况下,request与prototype一样.

(d).session 表示每个session中该对象只有一个.

(e)globalSession

5. 一些命令

(1) adb root 获取root权限

(2)adb shell 进入shell界面

(3) adb devices 显示所有在线设备

(4) adb -s 设备名 shell 进入指定设备shell

(5) adb connect wifie.ip:5555 wife连接adb 手机上也需设置一下

  1. # setprop service.adb.tcp.port 5555  
  2. # stop adbd  
  3. # start adbd

(6) monkey -p 包名 -v 次数 monkey测试

(7)C:\Users\admin>jarsigner -verbose -keystore d:\key\GpsCarBaiDu.keystore -signedjar d:\key\signed.apk e:\Baidu_Claim_unsigned.apk gpscarbaidu
-verbose输出详细信息 -keystore密钥库位置 -signedjar要生成的文件 要签名的文件 密钥库文件

6.volatile关键字

由于volatile变量只能保证可见性(一个线程修改后其它线程能够理解看到此变化后的结果)并不能保证是线程安全的,在不符合以下两条规则的运算场景中,我们仍然要通过加锁(使用synchronized或java.util.concurrent中的原子类)来保证原子性。

  • 运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值。
  • 变量不需要与其他的状态变量共同参与不变约束。
使用volatile的第二个语义是禁止指令重排序优化。
“as-if-serial”语义:不管怎么重排序,单线程程序的执行结果不能被改变。编译器、运行时和处理器都必须遵守“as-if-serial”语义。

7.使用HttpURLConnection发送post和get请求
http请求实际上由两部分组成,一个是http头,所有关于此次http请求的配置都在http头里面定义,一个是正文content,在connect()函数里面,会根据HttpURLConnection对象的配置值生成http头,因此在调用connect函数之前,就必须把所有的配置准备好。
紧接着http头的是http请求的正文,正文的内容通过outputStream写入,实际上outputStream不是一个网络流,充其量是个字符串流,往里面写入的东西不会立即发送到网络,而是在流关闭后,根据输入的内容生成http正文。
至此,http请求的东西已经准备就绪。在getInputStream()函数调用的时候,就会把准备好的http请求正式发送到服务器了,然后返回一个输入流,用于读取服务器对于此次http请求的返回信息。由于http请求在getInputStream的时候已经发送出去了(包括http头和正文),因此在getInputStream()函数之后对connection对象进行设置(对http头的信息进行修改)或者写入outputStream(对正文进行修改)都是没有意义的了,执行这些操作会导致异常的发生。


8.时区夏令时
通过Calendar的get方法解决夏令时,冬令时问题
calendar.get(Calendar.DST_OFFSET)/3600000));
System.out.println("zone_offset:"+(calendar.get(Calendar.ZONE_OFFSET)/3600000)

9.Android防杀方法

  • Service设置成START_STICKY,kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样
  • ​通过 startForeground将进程设置为前台进程,做前台服务,优先级和前台应用一个级别​,除非在系统内存非常缺,否则此进程不会被 kill
  • 双进程Service:让2个进程互相保护,其中一个Service被清理后,另外没被清理的进程可以立即重启进程
  • QQ黑科技:在应用退到后台后,另起一个只有 1 像素的页面停留在桌面上,让自己保持前台状态,保护自己不被后台清理工具杀死
  • 联系厂商,加入白名单


  • 10.linux命令
  • 复制文件 sudo cp -r index.js /usr/local/webserver/tomacat/webapps/test/
    删除文件 sudo rm -r test.war || sudo rm -r *.txt 删除所有txt结尾的文件
    sudo ps -x //linux查看进程
    sudo kill -9 3968 7513 //-9后面为进程id号




    你可能感兴趣的:(problem)