Android确保在主线程中执行更新ui操作
利用Activity的runOnUiThread(Rannable)把动作放在rannable中,确保动作是在UI线程中执行的;
通过源码:
/** * Runs the specified action on the UI thread. If the current thread is the UI * thread, then the action is executed immediately. If the current thread is * not the UI thread, the action is posted to the event queue of the UI thread. * * @param action the action to run on the UI thread */ public final void runOnUiThread(Runnable action) { if (Thread.currentThread() != mUiThread) { mHandler.post(action); } else { action.run(); } }
发现,如果action是在主线程中,就直接执行,如果不是就post,这实质还是通过handler机制处理线程与UI线程的通信;
用法很简单,但要确保调用者是Activity对象,调用如下:
VideoActivity.this.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "在主线程中的", Toast.LENGTH_LONG).show(); } });