动态使用ContentObserver的问题

        笔者在使用ContentObserver来监控一些设置的变化时,对于跨进程来通讯来说是非常方便的。但是笔者也遇到一些问题,比如我能不能动态的监控呢?

  好比这种情况,我设置了某个设置的监听,也收到了这个设置的变化通知,但是处于有些原因,我又要把这个设置项的值修改成其他特殊需求的值,如果不改变监听的话,我自己设置进入新值以后,我的监听函数不是一样被执行了嘛!这是我不希望发生的,笔者也不想发生这种情况,就尝试了以下方法:

     收到这个值以后,动态unregisterContentObserver这个设置,然后设置这个值,最后再registerContentObserver回来,从简单流程上看这是可以的。但是笔者在实践中发现,这是有问题的,也就是在代码unregisterContentObserver这个设置后,再设置这个设置项时,变更通知还是收到了,也就是没有取消掉注册监听。笔者分析了一下,可能还是unregisterContentObserver的一些特性,数据库的操作,可能需要一些时间延时等待完成。但是,在这个流程中要加入延时的话,有事不可接受的,这个非常郁闷,笔者还不知道怎么解决,只能想其他办法去绕开这种情况,有知道细节的朋友可以指定一下。

    另外,ContentResolver在连续写时,可能只执行一次,比如,一个设置项在代码中先设置成A,再设置成B,然后设置成C,按理说监控函数有会来三次变更,但是实际上可能是来1次,笔者也碰到来2次的情况,没测试上来三次的情况。

时间: 2024-09-20 09:02:23

动态使用ContentObserver的问题的相关文章

基于ContentObserver来动态取消或添加屏幕超时任务

                 前面也说了,ContentObserver可以来监控数据库里某一项数据的变化,当然也可以同时监控多个数据项的变化.笔者在项目中需要修改到屏幕超时的需求,比如在车载业务中,倒车事件发生的时候,是不需要屏幕超时变黑的,相当于这个计时timer要Reset一下,同样在蓝牙电话也要Reset一下,最好就是在这种特殊任务的时候,这个屏幕超时计时任务就不要跑起来,这样是最好的,那怎么实现呢?             笔者通过研究phonewindowsmanger.cpp中

Android采取ContentObserver方式自动获取验证码_Android

Android 自动获取验证码的两种方式分别是BroadcastReceiver及ContentObserver,两种方式都需要进行注册.取消注册两个步骤 记得添加权限,本文介绍ContentObserver方式. 照旧先上ContentObserver代码 /** * Created by weifeiyang on 2016/7/29 0029. */ import android.app.Activity; import android.content.SharedPreferences;

Android采取ContentObserver方式自动获取验证码

Android 自动获取验证码的两种方式分别是BroadcastReceiver及ContentObserver,两种方式都需要进行注册.取消注册两个步骤 记得添加权限,本文介绍ContentObserver方式. 照旧先上ContentObserver代码 /** * Created by weifeiyang on 2016/7/29 0029. */ import android.app.Activity; import android.content.SharedPreferences;

采用动态广播和观察者模式来分别实现验证码自动填写

采用动态广播和观察者模式来分别实现验证码自动填写 用户体验是至关重要的,我之前也实现过,就是通过短信广播的形式去监听,但是近期看了一下观察者模式,觉得实现起来也是极好的,那具体怎么做呢?大家跟我一起看下去 这里,我将用两种方式来实现短信自动填写,一种是短信广播,一种是观察者模式 我们再开始之前先定义一下规则,就是我们的短信号码和模板,一般的短信推送,你的服务号码是固定的,当然,也有可能你的量级比较大,所以在全国各地都有,但是我们这里就假设为一般的应用,所以 服务中心号码:6505551212 短

Android 自定义SeekBar动态改变硬件音量大小实现和音量键的同步(推荐)

1,上图: 2,代码: MainActivity.Java package com.hero.zhaoq.seekbarchangeddemo; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObse

PS制作方脸猪GIF动态图

  PS制作方脸猪GIF动态图.这篇教程是向小编介绍用photoshop软件制作QQ表情动图之方脸猪wink方法,教程很不错,很值得大家学习,一起来看看吧. 方法/步骤 首先新建图层,画一个粉色的矩形,作为猪脸. 用钢笔画出耳朵,栅格化图层,填充为粉色,描边为黑色,复制耳朵图层,水平翻转,按住shift键移动到水平对面,并合并两个耳朵图层.裁剪图像,只剩矩形大小. 分类: PS入门教程

jquery实现动态改变div宽度和高度

  这篇文章主要介绍了jquery实现动态改变div宽度和高度,效果非常不错,而且兼容性也很好,有需要的小伙伴可以参考下. 完整代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/x

学ASP动态网页必备:IIS 错误代码

iis|错误|动态|网页     400 无法解析此请求.     401.1 未经授权:访问由于凭据无效被拒绝.     401.2 未经授权: 访问由于服务器配置倾向使用替代身份验证方法而被拒绝.     401.3 未经授权:访问由于 ACL 对所请求资源的设置被拒绝.     401.4 未经授权:Web 服务器上安装的筛选器授权失败.     401.5 未经授权:ISAPI/CGI 应用程序授权失败.     401.7 未经授权:由于 Web 服务器上的 URL 授权策略而拒绝访问

Spring实现动态数据源,支持动态添加、删除和设置权重及读写分离

当项目慢慢变大,访问量也慢慢变大的时候,就难免的要使用多个数据源和设置读写分离了. 在开题之前先说明下,因为项目多是使用Spring,因此以下说到某些操作可能会依赖于Spring. 在我经历过的项目中,见过比较多的读写分离处理方式,主要分为两步: 1.对于开发人员,要求serivce类的方法名必须遵守规范,读操作以query.get等开头,写操作以update.delete开头. 2.配置一个拦截器,依据方法名判断是读操作还是写操作,设置相应的数据源. 以上做法能实现最简单的读写分离,但相应的也