AsyncTaskLoader の使い方 (6/8) 〜 いろいろな Loader の使用例

AsyncTaskLoader___Android_Developers

AsyncTaskLoader | Android Developers


目次

1. Thread と AsyncTask
2. AsyncTaskLoader の利点
3. LoaderManager の利用
4. よくある間違いと回避法
5. 基本的な Loader の実装
6. いろいろな Loader の使用例
7. データベースと CursorLoader
8. Loader の弱点を克服する


6. いろいろな Loader の使用例

代わりにグローバルなキャッシュ利用する

public abstract class GlobalCacheLoader<T> extends AsyncTaskLoader<T> { 
    ... 
    @Override 
    protected void onStartLoading() { 
        T cachedResult = getCachedResult(); 
        if (cachedResult != null) { 
            // 結果が利用可能であればすぐに配送
            deliverResult(cachedResult); 
        }
        if (takeContentChanged() || cachedResult == null) { 
            // 最終読み込み時のデータが変更されているか、
            // または、利用不可(null)の場合
            forceLoad(); 
        } 
    } 
    ... 
    protected abstract T getCachedResult(); 
}

データ監視部分

* onContentChanged() 
    Loader が開始されていたら forceLoad()、停止していたら フラグをセット。 
* takeContentChanged() 
    フラグの値を返して、クリアする。 
@Override 
protected void onStartLoading() { 
    if (mResult != null) { 
        deliverResult(mResult); 
    }
    if (takeContentChanged() || mResult == null) { 
        forceLoad(); 
    } 
}

続きを読む >>


「スマホ de タッくん」でタクシーを注文する

東京都の法人タクシー業界団体、東京ハイヤー・タクシー協会は2014年1月21日、スマートフォンで、複数の法人タクシー会社の車を対象に配車できる共通配車サービスを開始した。

ニュース - 「東京の全タクシーの半数を呼べる」新スマホアプリが登場:ITpro

東京23区と武蔵野市・三鷹市のエリア内のタクシーを呼ぶことができる。

サービス開始当初に呼べるタクシーは、大和自動車交通、共同無線タクシー協同組合、日本交通3社の約6500台。2014年4月までには、グリーンキャブ、チェッカーキャブ無線協同組合、日の丸交通のタクシーを加えて、対象を約9200台にする。この台数は、東京の法人タクシー全体の45%を占める。

で、以下使い方画面。

GPSで現在位置を送信して予約開始。

20140122-051751

建物名など付加情報を追加入力。

20140122-051940

すると、

続きを読む >>


AsyncTaskLoader の使い方 (5/8) 〜 基本的な Loader の実装

AsyncTaskLoader___Android_Developers

AsyncTaskLoader | Android Developers


目次

1. Thread と AsyncTask
2. AsyncTaskLoader の利点
3. LoaderManager の利用
4. よくある間違いと回避法
5. 基本的な Loader の実装
6. いろいろな Loader の使用例
7. データベースと CursorLoader
8. Loader の弱点を克服する


5. 基本的な Loader の実装

・ Loader 
    ベースとなる抽象化クラス。
・ AsyncTaskLoader 
    Loader の拡張。
・ CursorLoader 
    AsyncTaskLoader の拡張。 
    ContentsProvider 専用。

AsyncTaskLoader の制限事項

private static final int CORE_POOL_SIZE = 5; 
private static final int MAXIMUM_POOL_SIZE = 128; 
private static final int KEEP_ALIVE = 1; 
public static final Executor THREAD_POOL_EXECUTOR 
    = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, 
                                KEEP_ALIVE, TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory); 
private static volatile Executor sDefaultExecutor = THREAD_POOL_EXECUTOR;

内部的に ModernAsyncTask を使用している。

重要: ローダーにアプリケーションのコンテキストの参照のみを保持させることでリークを避ける。

/** 
 * コンテキストに関連付けられているアプリケーション·コンテキストを格納する。
 * ローダーは複数のアクティビティで使用できるので、直接コンテキストを保存することは危険。
 * 
 * @param context アプリケーション・コンテキストを取得するために使用
 */ 
public Loader(Context context) { 
    mContext = context.getApplicationContext(); 
}

Loader 内部クラスの各々は、staticとして宣言されなければならない、さもなければ親への暗黙の参照を維持してしまう。

続きを読む >>


AsyncTaskLoader の使い方 (4/8) 〜 よくある間違いと回避法

AsyncTaskLoader___Android_Developers

AsyncTaskLoader | Android Developers


目次

1. Thread と AsyncTask
2. AsyncTaskLoader の利点
3. LoaderManager の利用
4. よくある間違いと回避法
5. 基本的な Loader の実装
6. いろいろな Loader の使用例
7. データベースと CursorLoader
8. Loader の弱点を克服する


4. よくある間違いと回避法

1. 意味のないローダーIDを作成する

Loader を初期化/再起動するときに、ローダーIDをインクリメントしたり、ランダムに作成する。

Loaderの再利用の妨げとなり、混乱にしかならないので、Loaderの種類ごとに、単一一意のIDを使用する。

2. アプリ内のすべてのローダーに対してのIDを定数で作成する。

各LoaderManagerは 独立しているので、Activity や Fragment内でローダーの種類ごとに privateな定数を作成する。

続きを読む >>


Vine の6秒動画を連結する

操作もかんたんでおもしろすぐる。

Vine

Vine

これから流行るぞ! 6秒ループ動画アプリ『Vine』の使い方&解説 : ライフハッカー[日本版]

で、これ、録画した動画ファイルは端末内に保存されています。

20140119-233414

$ adb shell
shell@hammerhead:/ $ cd /sdcard/DCIM/Vine
shell@hammerhead:/sdcard/DCIM/Vine $ ls
2014_01_07_12_00_003.mp4
2014_01_13_17_52_052.mp4
2014_01_13_17_56_046.mp4
2014_01_14_21_20_005.mp4
2014_01_14_21_24_014.mp4
2014_01_14_21_26_022.mp4
2014_01_14_21_35_023.mp4
2014_01_15_06_30_042.mp4
2014_01_15_11_04_054.mp4
2014_01_17_15_28_059.mp4
2014_01_19_16_01_018.mp4
shell@hammerhead:/sdcard/DCIM/Vine $ pwd
/sdcard/DCIM/Vine

mp4ファイルで端末内に保存していたのですね。

なので、パソコン上にまとめて持ってくるには以下コマンドで。

$ adb pull /sdcard/DCIM/Vine .

連結して1つにしちゃいます。

続きを読む >>