在我的应用程序中,我使用闹钟每晚12点运行一项服务,一切正常。
我有三个片段选项卡,每个选项卡都有一个列表视图,点击列表项时会显示详细视图。
如果用户在11:59打开我的应用程序(在服务更新数据库中的基础数据之前),他将在列表视图中获取数据,但是当时钟达到12时,我的处理开始并且数据库被锁定(当服务正在运行以防止多个线程干扰时,我已经在db上实现了独占锁定),因为用户单击列表行,详细视图具有空白字段,因此数据库被锁定并且当前正在更新。
我该如何避免这种情况?我试图通过检查我的服务是否从Fragment选项卡运行来显示加载器对话框我可以正确显示此对话框,但我发现很难终止它。
private boolean isMyServiceRunning() {
ActivityManager manager = (ActivityManager) getActivity().getSystemService(getActivity().ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if ("com.xxx.xxx.MyService".equals(service.service.getClassName())) {
return true;
}
}
return false;
}
然后:
if(isMyServiceRunning()){
Show dialog logic here
}
但我想知道如何从后台进程终止它。任何想法我能做什么?
这样做的第二种方法是启用Write ahead logging,如果有人帮助我找到关于在android中实现WAL的一些好的关键,那将会很棒。