2016-08-30 10 views
-1
new Timer().schedule(new TimerTask() { 

     public void run() { 
      KeyBoardUtil.showKeyBoard(et_search); 
     } 
    }, 300); 

私はキーボードの使用TimerTaskを示し、それは正常に動作します。 どのように説明するのですか?TimerTaskはUIを更新できませんか?

答えて

4

あなたはrunOnUiThread使用することができます:あなたはThreadPoolExecutorによって管理されるスレッド上でタスクを開始する方法を学んだ前のレッスンで

runOnUiThread(new Runnable(){ 
     public void run() { 
      // Your code 
     } 
    }); 

それとも

Handler mainHandler = new Handler(context.getMainLooper()); 

Runnable myRunnable = new Runnable() { 
    @Override 
    public void run() { 
     // Your code 
    } 
}; 
mainHandler.post(myRunnable); 

developer.android.com

を。この最終レッスンでは、タスクからユーザーインターフェイス(UI)スレッドで実行されているオブジェクトにデータを送信する方法を示します。この機能を使用すると、タスクでバックグラウンド作業が行われ、その結果がビットマップなどのUI要素に移動されます。

すべてのアプリケーションには、ViewオブジェクトなどのUIオブジェクトを実行する独自の特殊スレッドがあります。このスレッドはUIスレッドと呼ばれます。 UIスレッドで実行されているオブジェクトだけが、そのスレッド上の他のオブジェクトにアクセスできます。スレッドプールからのスレッドで実行するタスクはUIスレッドで実行されていないため、UIオブジェクトにアクセスすることはできません。バックグラウンドスレッドからUIスレッドにデータを移動するには、UIスレッドで実行されているハンドラを使用します。

+0

TimerTaskでキーボードを開いたときにアプリがクラッシュしなかった理由を知りたい –

関連する問題