ContentObserver不仅在LG设备中调用



我正在编程一个小部件,每次接到未接来电时都必须更新它自己。为此,在AppWidgetProvider类的onEnabled方法中,我注册了一个ContentObserver。代码如下:

@Override
public void onEnabled(Context context){
this.mcco = new MissedCallsContentObserver(context);
context.getContentResolver().registerContentObserver(Calls.CONTENT_URI, true, this.mcco);
}

类MissedCallsContentObserver的代码如下:

package bembibre.coolstar.windowsmobilewidget.backend;
import bembibre.coolstar.windowsmobilewidget.backend.textproviders.CallsProvider;
import android.content.Context;
import android.database.ContentObserver;
public class MissedCallsContentObserver extends ContentObserver
{
Context context;
public MissedCallsContentObserver(Context context)
{
super(null);
this.context = context;
}
@Override
public void onChange(boolean selfChange)
{
try{
Thread.sleep(1000);
}
catch(Exception e){
}
new CallsProvider(this.context).setData();
}
}

每次手机收到未接来电时,都会自动调用onChange方法。这适用于我测试过的很多设备。但我也在LG L5上测试过。这是唯一一个不工作的设备。为什么?ContentObserver在Samgung设备中和在LG设备中不一样吗?在LG中,永远不会调用onChange方法。我还想问一个关于eclipse调试器的问题。我的三星手机运行良好,但使用索尼Xperia和之前提到的LG,它会在需要时断开连接。由于什么都不做,调试器突然断开连接。我的USB线很完美。还有我的电脑和手机的USB端口。调试器为什么断开连接?logcat中没有抛出异常或错误消息。我不知道问题出在哪里。

我的所有ContentObserver都在类AppWidgetProvider中注册和未注册。我读到这是不安全的,例如在一些LG手机中,它似乎不起作用。我做的是一个粘性的Service(在overriden方法onStartCommand()的末尾,您必须返回常量START_STICKY)。然后,在服务中,我注册了ContentObserver,现在它在所有手机中都能工作。似乎粘性服务永远存在。否则,除非我再次创建服务,否则我的应用程序将停止工作。

创建服务时,我注册ContentObserver,当它被销毁时,我注销它们。当你不再使用ContentObserver时,忘记注销它似乎很危险。

最新更新