2011-07-02 19 views
5

質問:私はActivity.findViewByIdをUIスレッドでのみ呼び出す必要がありますか?findviewbyidをUIスレッドで呼び出す必要がありますか?

私が求めている理由は、それを任意のスレッドから呼び出すことであり、完璧に動作します。 しかし、私はユーザーのうちの1人から例外を受け取りました。findViewByIdNPEのどこかで、findViewTraversalで失敗します。

だから、その原因になるのでしょうか?

+1

ユーザーインターフェイスが変更されたり破棄されたりすると、スレッドにエラーが発生します。あなたは、UIスレッドのこのようなUI関数を使用する必要があります – Spidy

答えて

5

Android UIツールキットはスレッドセーフではなく、常にUIスレッドで操作する必要があります。

出典:Painless threading

スレッドセーフではないため、別のスレッドでAPIを使用するとどうなるかわかりません。それはうまくいくかもしれない、それはうまくいかないかもしれません、ほとんどの時間に働くかもしれない、うまくいかないかもしれない、またはそれは動作し、他のものを壊すかもしれません。あなたは分からない。

したがって、正しいアプリケーションが必要な場合は、UIスレッドでこれを行う必要があります。

+0

ありがとう、UIスレッドで移動するのが適切なようです。 – Andy

関連する問題