Android项目:从U盘的ROOM数据库中读取数据,然后加载到一个Activity的RecycleView上面,等数据加载完毕,界面显示完毕,生命周期走到OnResume,可以正常浏览,此后用户没进行任何操作,然后突然拔掉U盘,页面闪退,如何解决这个问题?加了U盘监听广播,但是还没收到U盘被拔出的广播就闪退了,这个办法行不通,请想其他办法
时间: 2024-03-27 18:39:02 浏览: 53
一种解决方法是在第一个Activity中添加U盘状态监听,当U盘被拔出时,弹出提示框并关闭当前Activity。具体实现如下:
1. 在第一个Activity中,添加一个U盘状态监听的BroadcastReceiver:
```
private BroadcastReceiver usbStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null && action.equals(Intent.ACTION_MEDIA_EJECT)) {
// U盘被拔出,关闭当前Activity并弹出提示框
finish();
Toast.makeText(context, "U盘已拔出", Toast.LENGTH_SHORT).show();
}
}
};
```
2. 在第一个Activity的onCreate方法中,注册U盘状态监听的BroadcastReceiver:
```
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 注册U盘状态监听的BroadcastReceiver
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_EJECT);
registerReceiver(usbStateReceiver, filter);
// 加载数据到RecycleView
loadRecycleViewData();
}
```
3. 在第一个Activity的onDestroy方法中,取消注册U盘状态监听的BroadcastReceiver:
```
@Override
protected void onDestroy() {
super.onDestroy();
// 取消注册U盘状态监听的BroadcastReceiver
unregisterReceiver(usbStateReceiver);
}
```
这样当U盘被拔出时,会关闭当前Activity并弹出提示框,避免了闪退的问题。
阅读全文