忍者ブログ
やったことの記録 主にlinuxとかperlとか
プロフィール
HN:
隠居SE
性別:
非公開
カテゴリー
P R
ブログ内検索
忍者カウンター
[22] [21] [19] [18] [17] [16] [15] [14] [13] [12] [11]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Androidは時間のかかる処理をUIスレッド上で行うことは、
端末が固まったように見えるのでご法度と言うことらしいので、
スレッド化を試してみました。

でも、無意味にスレッド化しても仕方ないので、
関数を簡単にスレッド化したり、
効果が見込めないと戻せるようにするための書き方を記載しておきます。
もちろん、スレッドなので、戻り値を求めるような関数には使えません。

対象となる関数は、仮に
private void funcFoo( int Var ){
}
とします。

まずは引数をスレッドに渡すために、
引数の値をすべて保持するThreadクラスを継承したワーカーを作ります。
ポイントは、関数が要求する引数と同じ変数を内部に定義し、
コンストラクタで渡し、run()メソッドから元の関数を呼び出します。
private class funcFooThread extends Thread{
    //引数に使う変数
    int Var;
    //コンストラクタ
    public funcFooThread( int Var ) {
        this.Var = Var;
    }
    //スレッド処理
    public void run(){
        funcFoo( Var );
    }
}

あとは、今まで関数を呼び出していたところで、
新しいスレッドを関数と同じ引数で作り、start();するだけです。
funcFooThread thread = new funcFooThread( Var );
thread.start();
これなら、スレッドが上手く機能しなかった時も、
簡単に戻せます。


実のところ、作ってるアプリが動作中に固まったように見えたと言うことではなく、
I/Choreographer: Skipped 280 frames!  The application may be doing too much work on its main thread.
と言う警告が出てたので、重いビューを生成してる場所をスレッド化してみたのですが...
今のところ効果がありません(- -;ウーム


#AndroidStudio #Java #Thread
PR
この記事にコメントする
お名前:
タイトル:
文字色:
メールアドレス:
URL:
コメント:
パスワード:   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
Powerd by NINJAブログ / Designed by SUSH
Copyright © 隠居SEの備忘録 All Rights Reserved.
忍者ブログ/[PR]