Android之子线程更新主线程
16lz
2021-01-23
子线程更新主线程UI操作的几种方法:
//定义handler static final int SUCCESS = 1; static final int FAIL = 0; Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case SUCCESS: Toast.makeText(MyActivity.this, msg.getData().get("msg").toString(), Toast.LENGTH_SHORT).show(); break; case FAIL: Toast.makeText(MyActivity.this, msg.getData().get("msg").toString(), Toast.LENGTH_SHORT).show(); break; default: super.handleMessage(msg); } } }; //方法一:通过handler.sendMessage,更新UI主线程 private void makeToastByHandlerSendMessage(String msgStr) { Message msg = new Message(); msg.what = 0; Bundle bundle = new Bundle(); bundle.putString("msg", msgStr); msg.setData(bundle); handler.sendMessage(msg); } //方法二:通过handler.post,更新UI主线程 private void makeToastByHandlerPost(final String msg) { handler.post(new Runnable() { @Override public void run() { Toast.makeText(MyActivity.this, msg, Toast.LENGTH_SHORT).show(); } }); } //方法三:通过handler.post,延迟seconds秒后更新UI主线程 private void makeToastByHandlerPostDelay(final String msg, int seconds) { handler.postDelayed(new Runnable() { @Override public void run() { Toast.makeText(MyActivity.this, msg, Toast.LENGTH_SHORT).show(); } }, seconds * 1000); } //方法四:使用runOnUiThread,更新UI主线程 private void makeToastByRunOnUiThread(final String msg) { MyActivity.this.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MyActivity.this, msg, Toast.LENGTH_SHORT).show(); } }); } //方法五:通过view.post,更新UI主线程 private void makeToatByViewPost(View view, final String msg) { view.post(new Runnable() { @Override public void run() { Toast.makeText(MyActivity.this, msg, Toast.LENGTH_SHORT).show(); } }); } //方法六:通过AsyncTask,更新UI主线程 private void makeToastByAysncTask(final String msg) { AsyncTask asyncTask = new AsyncTask() { @Override protected Object doInBackground(Object[] params) { return null; } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); Toast.makeText(MyActivity.this, msg, Toast.LENGTH_SHORT).show(); } @Override protected void onProgressUpdate(Object[] values) { super.onProgressUpdate(values); } }; asyncTask.execute(); }
使用方法:
//1、Handler.SendMessagemakeToastByHandlerSendMessage(msg);//2、Handler.PostmakeToastByHandlerPost(msg);//3、Handler.PostDelaymakeToastByHandlerPostDelay(msg,1);//4、context.RunOnUiThreadmakeToastByRunOnUiThread(msg);//5、View.PostmakeToatByViewPost(btnLogin,msg);//6、AysncTaskmakeToastByAysncTask(msg);
其实通过查看源代码,发现非handler的实现方法最终还是通过handler来实现的。
MyActivity.this.runOnUiThread(new Runnable() {});view.post(new Runnable());// 以上两个方法最终都调用handler的sendMessageDelayed方法public final boolean sendMessageDelayed(Message msg, long delayMillis)
更多相关文章
- android 判断当前线程是不是主线程的几种方法
- Android httpClient Get&Post方法
- Android 给textview添加下划线的一种方法(可复用)
- Android中两种实现倒计时的方法
- Android获取系统内核版本的方法
- Android Studio执行Java类的main方法及解决方法
- Android 延迟执行方法