在我的应用程序中,我每天晚上 12 点使用警报运行服务,一切都按预期工作。
我有三个片段选项卡,每个选项卡都有一个列表视图,单击列表项会显示详细视图。
如果用户在 11:59(在服务从数据库更新基础数据之前)打开我的应用程序,他将在列表视图中获取数据,但是当时钟敲响 12 时,我的处理开始并且数据库被锁定(我有在服务运行时对数据库实施排他锁以防止多个线程干扰)当用户单击列表行时,详细视图具有空白字段并且正确,因此数据库被锁定并且当前正在更新。
我该如何避免这种情况?我试图通过检查我的服务是否从 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
}
但我想知道如何从后台进程中终止它。任何想法我能做什么?
这样做的第二种方法是启用预写日志记录,如果有人帮助我找到一些关于在 android 中实现 WAL 的好方法,那就太好了。