Android周りのスレッド管理に関する考察
自メモ)
なんかUI使ってないのにHandler多用してるコード多いな(汗。現在ExecutorServiceに書き換え中。ソッチのほうが若干速いんだよね。。
スレッド起こしまくる某androidアプリのデバックしてて、どうもexecute失敗=>動かない 事案が発生。厳しいな?(´▽`;)ゞ
通信失敗 => 即時エラーでTOPメニューに戻る
って流れの奴。
どうもExecuterService系の起動 や executeの段階でエラーになっているよう
<やったのは
AndroidがIOSに比べて通信や処理が遅い
Handler =>ExecutorServiceに置換
ってかんじなんですけど。。。
HandlerはGUIスレッドにキューイングされるから?かも知れない。
Handler handler = new Handler(getMainLooper());
としないとメインキューでスタックされない認識だったんだけどな。。。
Handler handler = new Handler();
な記述でもコンパイラの最適化次第でそういう動きをするということ?
executeって成功失敗の判定可能だっけ?そこから調べる感じだったり(´▽`;)ゞ。jsだとwebwarkerあたりになるのかな?
今日でバックしてたのは A=>B B<=A の遣り取りが必ず一気通貫で通らないとダメなわけだから、エラー等で受信or送信エラーで 抜けると処理が止まる => 不安定な挙動なアプリとなると。。
@sakura_bird1 @penguindaa やるならクライアント限定が良。SNSとか鯖Apとかで 「友達と競い合える」というユーザ増加させるための機能とか入れだすと結構大変<API経由で取れなくてExcepiton吐いて表示止まったりとか、鯖AP作る工数コミだったりとか
@sakura_bird1 @penguindaa 最近困ってるのは tw API で ArrayAdapter表示するために非同期で呼んでると(途中でException)アプリごと固まる(thread exception出てもわかんない)ケースがあって凄くポイゾンなのです><
@sakura_bird1 @penguindaa javaの例外キャッチ:Exception で動かすと URL な感じです。中途半端なBitmapを setImageBitmap とかやると固まるみたい。一応try-catch入れてるけど
以前
TextView で twの表示で落ちてたのは android:autoLink="web" の除去で解決したけど、リンク化する時点で落ちるのかな。。。(汗 文言によって落ちる落ちないって結構厳しいな。。。
ArrayAdaptorの要素のImageViewに対して
imgView.setImageBitmap(null);
の箇所のコメント
と
やってた箇所と画像DLを
- doInBackground の中から更に非同期に画像DL =>同期画像DL
- ArrayAdaptorのgetViewの中で非同期に画像DL =>やらない
- imageのキャッシュをしてる LruCacheをsynchronizedで囲む
の辺りの対応で落ち着いたようなおちつかないような。。。対処方法イマイチわからん><
Androidは実はスレッド数に制限あるっぽい*1話も聞いたことあるしな。。
そんなに立ち上げている認識は無いけど別プロセスも合計なんかもしれないし。。
な事も考えたけど、上記の対応をしない同じような処理で 動くアプリは動くんだよね。。
だとすると あとは表示してる文字列の影響なのかな。。。ふむ。。
threadid=1: thread exiting with uncaught exception (group=0x4002d560)
ちなみにこのExceptionで検索かけると
- UIをHandlerで弄ってないからだよ って言う奴と
- ViewPagerとか使ってるからでない?
な奴が出てくるけど
あとException対策でググると
- yan note: Android キャッチされなかった例外を処理する
- 例外catch漏れ対策(UncaughtExceptionHandler) - プログラマってこんなかんじ??
- Androidアプリ開発で例外の発生した場所を特定する | Developers.IO
辺りが出てくるんだけど、このExceptionには無力だったorz
まあ今だとこういうネタでないと注目はされないんだろうけど(汗
UIをWebベースで作れると楽だよね。のお話はよく聞く・・
Java x HTML5の会場でThreadが云々とか話をしたら絶対に引くからな。絶対にやるなよ!
2013-01-25 21:11:49 via web
@mike_neck Thread x WebWorkerの絡みならば…
@ktz_alias HTML5と銘打った勉強会で延々とJavaのThreadの話をしてドン引きされた僕が言うのだから間違いない。
2013-01-25 21:17:39 via web to @ktz_alias
WebWorkerってスレッドではないような…
2013-01-25 21:18:02 via web
*1:同時最大255?