方式一: 获取主线程的looper(UI线程的looper---Looper.getMainLooper())
此方法是通过主线程的looper来实现的,简单使用.
//noinspection Convert2Lambda new Thread(new Runnable() { @Override public void run() { Handler handler = new Handler(Looper.getMainLooper()) { //重点在此处 @Override public void handleMessage(Message msg) { Toast.makeText(getApplicationContext(), "handler-msg", Toast.LENGTH_LONG).show(); } }; handler.sendEmptyMessage(1); } }).start();
方式二: 直接获取当前子线程的looper
new Thread(() -> { Looper.prepare(); @SuppressLint("HandlerLeak") Handler handler = new Handler() { @Override public void handleMessage(Message msg) { Toast.makeText(getApplicationContext(), "handler-msg", Toast.LENGTH_LONG).show(); } }; handler.sendEmptyMessage(1); Looper.loop(); }).start();
或 new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
Toast.makeText(getApplicationContext(), "handler-msg", Toast.LENGTH_LONG).show();
}
};
handler.sendEmptyMessage(1);
Looper.loop();
};
}).start();