2012/08/09

Android:JellyBeanで変更・非推奨となったメソッド・定数


JellyBeanで変更・非推奨となったメソッド・定数をいくつか抜粋。


●コンテンツの変更通知 -ContentObserver-

今までは監視したいURIの数だけObserverを用意する必要がありました。
JB以降は変更されたコンテンツURIも同時にObserverへ通知されるので、Observerを複数用意する必要がなくなります。

android.database.ContentObserver.dispatchChange(boolean)
非推奨となりました。
代わりにandroid.database.ContentObserver.dispatchChange(boolean, Uri)を使いましょう。


android.database.ContentObserver.dispatchChange(boolean, Uri)
新規追加のメソッドです。
引数Uriは変更のあったコンテンツのURIを指定します。


android.database.ContentObserver.onChange(boolean, Uri)
新規追加のメソッドです。
監視しているコンテンツに変更があった場合に呼ばれます。
引数Uriは変更のあったコンテンツのURIになります(nullの場合は"不明"を意味します)

JBより古い環境で互換性を維持したい場合、onChange(boolean)をオーバーライドする必要があります。
// Implement the onChange(boolean) method to delegate the change notification to
// the onChange(boolean, Uri) method to ensure correct operation on older versions
// of the framework that did not have the onChange(boolean, Uri) method.
@Override
public void onChange(boolean selfChange) {
    onChange(selfChange, null);
}

// Implement the onChange(boolean, Uri) method to take advantage of the new Uri argument.
@Override
public void onChange(boolean selfChange, Uri uri) {
    // Handle change.
}


●データベース関連

メンテがちらほら。
acquireUnstableContentProviderClientは何気に影響範囲の広い修正です。
「Android:JellyBean以降のContentResolver.queryの挙動」

android.database.Cursor.deactivate()
非推奨となりました。
requery()が既に非推奨化されている(Honeycombからだったかな?)ので、これも非推奨です。
requery()の非推奨化時の忘れ物かな?


android.database.sqlite.SQLiteOpenHelper.setWriteAheadLoggingEnabled(boolean)
新規追加のメソッドです。
WALの有効/無効指定です。
引数booleanがtrueならenableWriteAheadLogging()、falseならdisableWriteAheadLogging()が実行されます。


android.content.ContentResolver.acquireUnstableContentProviderClient(Uri)
android.content.ContentResolver.acquireUnstableContentProviderClient(String)
新規追加のメソッドです。
信用できないContentProviderに対するクライアント(ContentProviderClient)を取得します。
過去の記事でも取り上げました。
「Android:高速化。ContentResolver?ContentProviderClient?」



●クエリ/リクエストのキャンセル -CancellationSignal-

コンテンツへのクエリがキャンセルできるようになりました。
これにより、コンテンツをロードするLoaderとそのサブクラスも同時に拡張されています。

また、"オペレーションのキャンセル"という抽象的な例外クラスOperationCanceledExceptionが追加されました。
クエリやローダをキャンセルした際にスローされるOperationCanceledExceptionにも注目です。

android.content.ContentResolver.query(Uri, String[], String, String[], String, CancellationSignal) 
新規追加のメソッドです。
cancellationSignalが指定できるようになり、クエリを中断することができます。
cancellationSignalについては追々調査。


android.content.AsyncTaskLoader.cancelLoadInBackground()
新規追加のメソッドです。
ローダの処理をキャンセルします。
cancelLoadInBackgroundはloadInBackground()処理が走っていない、あるいは既に終了している場合N.O.Pとするのが通例です。


android.content.AsyncTaskLoader.isLoadInBackgroundCanceled()
新規追加メソッドです。
ローダがキャンセル処理を受け付けたかどうかを確認します。


android.content.Loader.registerOnLoadCanceledListener(OnLoadCanceledListener<D>)
新規追加メソッドです。
ロード処理のキャンセルをlistenするリスナーを登録します。


android.content.Loader.unregisterOnLoadCanceledListener(OnLoadCanceledListener<D>)
新規追加メソッドです。
ロード処理のキャンセルをlistenするリスナー登録を解除します。


android.content.Loader.cancelLoad()
新規追加メソッドです。
ロード処理のキャンセルを試みます。


android.content.Loader.deliverCancellation()
新規追加メソッドです。
OnLoadCanceledListenerへのキャンセル通知を行います。


android.content.Loader.onCancelLoad()
新規追加メソッドです。
Loaderのサブクラスは、このメソッドをオーバーライドしてロード処理のキャンセル要求(cancelLoad)に応えます。



●その他

android.content.res.Configuration.ORIENTATION_SQUARE 
非推奨となりました。
⇒過去の記事で取り上げています「画面の向き:ORIENTATION_SQUARE


android.view.ActionProvider.onCreateActionView () 
非推奨となりました。
代わりにandroid.view.ActionProvider.onCreateActionView(MenuItem)を使いましょう。
JBより古い環境をサポートしたい場合は、このメソッドをオーバーライドして、有効なActionViewを返します。


android.view.ActionProvider.onCreateActionView(MenuItem)
新規追加のメソッドです。
JB以降はこのメソッドでActionViewを生成することが推奨されます。

以上です。