官方表示:Handler ()此构造函数已弃用。在 Handler 构造期间隐式选择 Looper 可能会导致操作丢失(如果 Handler 不期待新任务并退出)、崩溃(如果有时在没有 Looper 活动的线程上创建处理程序)或竞争条件的错误,与处理程序关联的线程不是作者预期的。相反,使用Executorhttps://developer.android.com/reference/java/util/concurrent/Executor
或明确指定 Looper,使用Looper.getMainLooper()。如果为了兼容性需要隐式线程本地行为,请使用 new Handler(Looper.myLooper())
- new Handler(Looper.myLooper()) 获取当前线程的Looper
- new Handler(Looper.getMainLooper()) 获取主线程的Looper
注:如果是主线程创建handler这两没区别,你要是在子线程里创建handler这两就不一样了。
private Handler mHandler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_DOWN_FAIl: break; } } };
private Handler mHandler = new Handler(Looper.myLooper()) { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_DOWN_FAIl: break; } } };