facebook twitter hatena line google mixi email

「Android/handler」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(遅延処理させてUIスレッドで返す)
 
(同じ利用者による、間の2版が非表示)
行18: 行18:
 
     });
 
     });
 
  }
 
  }
 +
 +
==遅延処理させてUIスレッドで返す==
 +
<pre>
 +
final Handler handler = new Handler();
 +
handler.postDelayed(new Runnable() {
 +
    public void run() {
 +
        handler.post(new Runnable() {
 +
            @Override
 +
            public void run() {
 +
                mLog.debug(TAG, "1000ms後遅延");
 +
            }
 +
        });
 +
    }
 +
}, 1000L); // 1000ms後に処理
 +
</pre>
  
 
==5秒ごとに定期的に実行する方法==
 
==5秒ごとに定期的に実行する方法==
行57: 行72:
 
     }
 
     }
 
  });
 
  });
 +
 +
==関連==
 +
[[Android/マルチスレッド]] [ショートカット]

2019年9月11日 (水) 19:26時点における最新版

handlerの基本的な使い方(UIスレッド(メインスレッド)で実行)

Handler handler = new Handler();
handler.post(new Runnable() {
    @Override
    public void run() {
        Log.i("test", "run()");
    }
});

マルチスレッドで実行中にUIスレッドに戻して実行する方法

public void run() {
    Handler handler = new Handler();
    handler.post(new Runnable() {
        @Override
        public void run() {
            Log.i("test", "run()");
        }
    });
}

遅延処理させてUIスレッドで返す

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    public void run() {
        handler.post(new Runnable() {
            @Override
            public void run() {
                mLog.debug(TAG, "1000ms後遅延");
            }
        });
    }
}, 1000L); // 1000ms後に処理

5秒ごとに定期的に実行する方法

public class MainActivity extends AppCompatActivity {
    Handler mHandler = new Handler();
    private Runnable mHandlerTask = new Runnable() {
        @Override
        public void run() {
            Log.i("test", "run()");
            // 5秒後に実行
            mHandler.postDelayed(mHandlerTask, 5000L);
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 初回呼び出し
        mHandler.post(mHandlerTask);
    }
}

5秒後に実行する方法

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
   @Override
   public void run() {
       // 5秒後処理
   }
}, 5000);

handlerをUIスレッドでなくワーカースレッドで実行

HandlerThread handlerThread = new HandlerThread("custom_name1");
handlerThread.start();
Handler handler = new Handler(handlerThread.getLooper());
handler.post(new Runnable() {
    @Override
    public void run() {
        Log.i("test", "run()");
    }
});

関連

Android/マルチスレッド [ショートカット]