1. Android的UI时线程不安全的,如果在子线程中更新UI会出现异常,导致程序崩溃。 为了解决如上这些问题,我们常用的做法就是使用Android的异步消息机制实现即可(创建一个Message对象,使用Handler发送出去,然后在Handler的handleMessage ...
1. Android的UI时线程不安全的,如果在子线程中更新UI会出现异常,导致程序崩溃。
为了解决如上这些问题,我们常用的做法就是使用Android的异步消息机制实现即可(创建一个Message对象,使用Handler发送出去,然后在Handler的handleMessage()方法中获得刚才发送的Message对象,然后在这里进行UI操作)。所以说还是很有必要了解异步消息机制的Looper , Handler , Message等原理的。
下面展示一个示例使用,然后通过源码分析吧。
public class MainActivity extends Activity { public static final int UPDATE_TEXT = 1; private TextView text; private Button changeText; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case UPDATE_TEXT: text.setText("Nice yo see you again"); break; default: break; } }}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = (TextView) findViewById(R.id.text); changeText = (Button) findViewById(R.id.change_text);// changeText.setOnClickListener(this); changeText.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { switch ((view.getId())){ case R.id.change_text: new Thread(new Runnable() { @Override public void run() {// 若直接更新TextView的内容会报错,下面使用异步消息处理机制// text.setText("Nice to see you,BUG"); Message message = new Message(); message.what = UPDATE_TEXT; handler.sendMessage(message); } }).start(); break; default: break; } } }); }}
2. Looper , Handler , Message的关系
(1)Looper中有一个Message队列,里面存储的是一个个待处理的Message。
(2)Message中有一个Handler,这个Handler是用来处理Message的。
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:使用异步消息处理更新UI线程
关键词:异步
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。