出于某种原因,我的Android ContentObserver被多次注册。 ContentObserver在我的主Activity中被定义为内部类。然后在我的onCreate()方法中实例化并注册。停止Android ContentObserver多次注册
我认为,多次调用onCreate(),以及我的主要活动一般被多次实例化。为了防止这种情况,我已经试过加入launchMode我的Android清单,但它似乎并没有工作过:
<activity android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleInstance">
我也试过在我的onCreate注册之前注销Oberservers,但我想是因为这是我主要活动的一个新实例,它什么都不做。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.contentResolver = this.getApplicationContext().getContentResolver();
this.myObserver = new MyObserver(this.contentResolver);
this.contentResolver.unregisterContentObserver(this.myObserver);
this.contentResolver.registerContentObserver(MainActivity.myObserveUri, true, this.myObserver);
}
private class MyObserver extends ContentObserver {
public MyObserver(ContentResolver contentResolver) {
super(null);
//My Code
}
}
有关如何防止这种情况发生的任何想法?我还有一个runnable和一个在我的主Activity中创建的处理程序,我已经设置了定期运行,这也遇到了同样的问题。理想情况下,修复也可以解决这个问题。我很确定,潜在的问题是我的主要Activity不止一次实例化,但由于launchMode没有修复它,我不确定接下来要转向哪里。
任何帮助,非常感谢。谢谢
观察员是为了我的主要活动无限期地运行下去,我从来没有调用finish()。这是否意味着创造新活动的唯一方式是系统是否暂时摧毁旧系统?如果是这样,我想我可以在onDestroy()中取消注册我的ContentObserver,然后不久之后它将在onCreate()中重新注册。这会工作吗?我想我宁愿保留我的初始观察员,并停止创建其他人。 – Colin 2011-04-22 20:17:42
非常广泛的主题... onDestroy()/ onCreate()出现各种原因 - 横向到纵向移动(如果您的应用程序/视图允许),操作系统内存回收... 你真的需要知道底层框架。 – Dan 2011-04-22 20:21:50