LoginSignup
24
25

More than 5 years have passed since last update.

Amalgam でコードを整理する

Last updated at Posted at 2014-01-21

Amalgam

Android で頻出するコードをまとめた Utility ライブラリを使って、コードの整理をする。

リソース管理

Stream I/O なら以下のように。
try-finally ブロックでストリームを閉じるときの null チェックと例外のキャッチをしてくれる。

ContentResolver resolver = context.getContentResolver();
InputStream stream = null;
try {
    stream = resolver.openInputStream(Uri.parse("content://something/to/read/1"));
    // read stream
} finally {
    CloseableUtils.close(stream);
}

Cursor は Closeable であるが、CloseableUtils を使うと具合が悪い(Closeable#close() では例外となる)ため、以下のようにする。

ContentResolver resolver = context.getContentResolver();
Cursor c = null;
try {
    c = resolver.query(uri, null, null, null, null);
} finally {
    CursorUtils.close(c);
}

Parcel

boolean に関するシリアライズとデシリアライズのメソッドが Parcel にないので、以下のようにする。

public class MyParcelable implements Parcelable {
    private boolean mHoge;
    public MyParcelable(Parcel source) {
        mHoge = ParcelUtils.readBoolean(source);
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        ParcelUtils.writeBoolean(dest, mHoge);
    }
}

Thread

メソッドの呼び出しがどのスレッドで実行されているかをチェックする。
ブロックするメソッドはメインスレッドで呼ばれてほしくないので、もしメインスレッドで呼んでいたら例外を投げたいし、UI を操作するメソッドはメインスレッドで呼ばれてほしいので、それ以外のスレッドで呼んでいたら例外を投げたい、という時に使う。

public <T> T blockingGet(String url, Map<String, String> params) {
    ThreadUtils.checkNotMainThread();

    // ...
}

DialogFragment

LoaderCallbacks のメソッド内での FragmentTransaction は許可されていないので、Handler 経由で表示や非表示の切り替えをする。

DialogFragmentUtils.dismissOnLoaderCallback(fragmentManager, "MY_DIALOG_TAG");
24
25
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
25