Android 在扫描U盘解析图片缩略图时,拔出U盘导致崩溃
在出现该问题时,发现日志中显示processkiller:....相关信息,然后出现了进程被杀死的日志。
E/ProcessKiller( 2176): Process com.android.xxx (2866) has open file
xxxxxxxx
W/ProcessKiller( 2176): Sending SIGHUP to process 2866
I/ActivityManager( 2250): Process com.android.xxx(pid 2866) has died.
网上查询后发现是由于正在对U盘中的文件操作时,出,拔出U盘的时候,因为占用了U盘中的Test.apk文件,导致process被系统kill了,所以app就挂了。
那怎么解决这个问题呢?
有三种方法:
1.屏蔽信号 sighup,kill信号,自己接受信号并且自己来处理,默认情况下,接受了该信号,就会kill掉调用他的进程
2.找到还有哪里占用资源的地方,统统释放掉。
3.将该部分处理逻辑放到另外一个不相关的进程中去,这样,即使其进程被杀也不会影响到app的使用。
## 屏蔽信号 ##
系统层修改了vold类,当接受到这个信号以后不去进行处理kill的指令,或者屏蔽了我们项目的进程,可以达到效果,但是为了可移植性,添加其他方案,思路如下:
1.写JNI去重写该信号,自己接管这个信号,