[求助]Gallery中播放视频的时候,拔掉TF卡

Angleyuhj 2012-03-24 04:58:08
目前的代码是打算捕获EJECT消息处理。但是看log总是有如下

W/Vold ( 2251): Failed to unmount /mnt/sdcard/extsd (Device or resource busy, retries 9, action 0)
……
E/ProcessKiller( 2251): Process com.cooliris.media (3654) has open file /mnt/sdcard/extsd/DCIM/.thumbnails/.thumbdata3-1763508120
W/Vold ( 2251): Failed to unmount /mnt/sdcard/extsd (Device or resource busy, retries 2, action 1)
E/ProcessKiller( 2251): Process /system/bin/mediaserver (2256) has open file /mnt/sdcard/extsd/video/asf/bf3_faultline_ep3_windowsmedia9_13M_1080P_30fps_WMA2.asf
W/ProcessKiller( 2251): Sending SIGHUP to process 2256


就是在拔掉卡的时候,会判断进程打开的文件,重试10次后回把进程kill掉。
请问,我如何在收到EJECT消息的时候关闭这些打开的文件?如果处理?
...全文
485 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
杰乐 2014-12-16
  • 打赏
  • 举报
回复
我也遇到同样的问题,系统直接杀进程,求解决 D/Vold ( 910): wuxingyu : vm handleBlockEvent D/DirVolume( 910): wuxingyu : handleBlockEvent begin D/MountService( 1276): sendStorageIntent Intent { act=android.intent.action.MEDIA_BAD_REMOVAL dat=file:///mnt/sdb/sdb1 (has extras) } V/MediaPlayerService( 919): [2] notify (0x1e70b50, 3, 2, 0) D/MountService( 1276): wuxingyu : use the mConnectorSpec[1] D/VoldCmdListener( 910): volume unmount_bad /mnt/sdb/sdb1 force_and_revert D/Vold ( 910): Volume sdb1 state changing 4 (Mounted) -> 5 (Unmounting) V/MediaPlayerService( 919): [2] notify (0x1e70b50, 3, 2, 0) I/USBReceiver( 1870): ---------USBReceiver---ACTION_MEDIA_UNMOUNTED-/mnt/sdb/sdb1 I/USBReceiver( 1870): mHandler == null V/MediaPlayerService( 919): [2] notify (0x1e70b50, 3, 2, 0) V/MediaPlayerService( 919): [2] notify (0x1e70b50, 3, 2, 0) W/Vold ( 910): Failed to unmount /mnt/sdb/sdb1 (Device or resource busy, retries 9, action 0) V/android hall( 1856): sdcard status changed! V/cpeng @@@@@@@@@@@( 1856): start check media status. V/cpeng @@@@@@@@@@@( 1856): media status : MEDIA_MOUNTED V/cpeng ( 1856): finish check media status. E/ProcessKiller( 910): Process com.voole.epg (3311) has open file /mnt/sdb/sdb1/voole_video/vooledownload.db W/ProcessKiller( 910): Sending SIGHUP to process 3311 D/Zygote ( 917): Process 3311 terminated by signal (15) W/InputDispatcher( 1276): channel '41734960 com.voole.epg/com.voole.epg.view.movies.home.HomeActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x8 E/InputDispatcher( 1276): channel '41734960 com.voole.epg/com.voole.epg.view.movies.home.HomeActivity (server)' ~ Channel is unrecoverably broken and will be disposed! W/InputDispatcher( 1276): Attempted to unregister already unregistered input channel '41734960 com.voole.epg/com.voole.epg.view.movies.home.HomeActivity (server)' I/ActivityManager( 1276): Process com.voole.epg (pid 3311) has died. I/WindowManager( 1276): WIN DEATH: Window{41734960 com.voole.epg/com.voole.epg.view.movies.home.HomeActivity paused=false} I/ActivityManager( 1276): haveBgApp:true app.setAdj:0 W/ActivityManager( 1276): Scheduling restart of crashed service com.voole.epg/.download.VDownloadService in 5000ms I/WindowManager( 1276): WIN DEATH: Window{416db508 com.voole.epg/com.voole.epg.view.movies.movie.MovieActivity paused=false} I/WindowManager( 1276): WIN DEATH: Window{416b45a8 com.voole.epg/com.voole.epg.view.movies.account.AccountActivity paused=false} I/WindowManager( 1276): WIN DEATH: Window{417445c8 com.voole.epg/com.voole.epg.download.DownManagerActivity paused=false} I/WindowManager( 1276): WINDOW DIED Window{41734960 com.voole.epg/com.voole.epg.view.movies.home.HomeActivity paused=false} W/ActivityManager( 1276): Force removing ActivityRecord{41714048 com.voole.epg/.download.DownManagerActivity}: app died, no saved state E/hwcomposer( 916): hisicomposeimp fail!
jmq_0000 2013-05-24
  • 打赏
  • 举报
回复
楼主我也遇见这个问题,现在解决没有
雨焰 2013-05-24
  • 打赏
  • 举报
回复
你说的EJECT不知道是什么 我知道你的设备,读取tf之后,挂载的位置是/mnt/sdcard/extsd文件夹,你将tf卡拔掉之后,那么该文件夹将不再挂载tf卡,里面内容为空,你不能播放视频了!会报错的!
wlcw16 2013-05-03
  • 打赏
  • 举报
回复
引用 楼主 Angleyuhj 的回复:
目前的代码是打算捕获EJECT消息处理。但是看log总是有如下

W/Vold    ( 2251): Failed to unmount /mnt/sdcard/extsd (Device or resource busy, retries 9, action 0)
……
E/ProcessKiller( 2251): Process com.cooliris.media (3654) has open file /mnt/sdcard/extsd/DCIM/.thumbnails/.thumbdata3-1763508120
W/Vold    ( 2251): Failed to unmount /mnt/sdcard/extsd (Device or resource busy, retries 2, action 1)
E/ProcessKiller( 2251): Process /system/bin/mediaserver (2256) has open file /mnt/sdcard/extsd/video/asf/bf3_faultline_ep3_windowsmedia9_13M_1080P_30fps_WMA2.asf
W/ProcessKiller( 2251): Sending SIGHUP to process 2256
就是在拔掉卡的时候,会判断进程打开的文件,重试10次后回把进程kill掉。 请问,我如何在收到EJECT消息的时候关闭这些打开的文件?如果处理?
现在有一种办法是重写一个写入流 重写wirte方法 fileOutPutSteam有一个getFD().sync(); 方法。调用它,然后抛异常。 不过现在还是会杀进程。还没解决。
wlcw16 2013-05-03
  • 打赏
  • 举报
回复
引用 4 楼 ConnectionUtils 的回复:
[quote=引用 2 楼 Angleyuhj 的回复:] 额 神奇的android 。。。求回答
拔掉TF卡 系统会发送一个广播,用Gallery 去捕获该广播 在自己播放视频代码处理该广播 不一定 非要在EJECT消息处理[/quote] 捕获广播是没有用的。如果不能从EJECT中关闭文件,系统一样会kill掉这个进程。
tian1112yong 2013-04-25
  • 打赏
  • 举报
回复
也是遇到这种问题
csdn_2013 2013-04-25
  • 打赏
  • 举报
回复
引用 2 楼 Angleyuhj 的回复:
额 神奇的android 。。。求回答
拔掉TF卡 系统会发送一个广播,用Gallery 去捕获该广播 在自己播放视频代码处理该广播 不一定 非要在EJECT消息处理
Angleyuhj 2012-03-29
  • 打赏
  • 举报
回复
额 神奇的android 。。。求回答
Angleyuhj 2012-03-26
  • 打赏
  • 举报
回复
没人遇到过吗?

80,493

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧