私はListActivity
SMSを持っていContentObserver
ます。ListView
に送受信された SMS が表示されます。SMS データベース (送信/受信) に変更があるたびに、オブザーバーは 内の関数を呼び出してActivity
を更新しますListView
。
これはFROYOで問題なく動作します。しかし、ICSでは次のようになります
android.view.ViewRootImpl$CalledFromWrongThreadException: ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます。
何が問題なのか教えてください。
以下はトップレベルのコードです。
public class MyList extends ListActivity implements OnInitListener{
@Override
protected void onDestroy() {
super.onDestroy();
MyList.this.getContentResolver()
.unregisterContentObserver(smsObserver);
}
@Override
protected void onPause() {
super.onPause();
MyList.this.getContentResolver()
.unregisterContentObserver(smsObserver);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.MyList );
registerSmsEventObserver();
updateList();
}
@Override
protected void onResume() {
super.onResume();
registerSmsEventObserver();
}
updateList() {
//fill up the listview
}
private void registerSmsEventObserver() {
if (smsObserver != null)
return;
smsObserver = new ContentObserver(null) {
public void onChange(boolean selfChange) {
updateList();
}
};
MyList.this.getContentResolver().registerContentObserver(
Uri.parse("content://sms"), true, smsObserver);
}
}