Android Handler用法
16lz
2021-01-23
import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.HandlerThread;import android.os.Looper;import android.os.Message;import android.util.Log;import com.wv1124.adnroid.R;public class HandleTestActivity extends Activity {Handler handler = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Log.d("DEBUG", "Activity-->" + Thread.currentThread().getId());// 生成一个HandlerThread对象,为了使Handler在此线程中执行;HandlerThread handlerThread = new HandlerThread("handler_thread") {@Overridepublic void run() {Log.d("DEBUG", "handlerThread-->"+ Thread.currentThread().getId());super.run(); // 注意,不要重写;}};// 启动线程;handlerThread.start();//Looper p = Looper.myLooper(); //也可以使用主线程的Looper但会使主线程停止执行等待;// handlerThread.getLooper()初始化Handler使Hander在handlerThread的程线中执行;handler = new Handler(handlerThread.getLooper()) {@Overridepublic void handleMessage(Message msg) {Bundle b = msg.getData();int age = b.getInt("age");String name = b.getString("name");Log.d("DEBUG", "Handler-->" + Thread.currentThread().getId()+ " : age is " + age + ", name is" + name);}};// 可以这样发消息;// Message msg = handler.obtainMessage();// Bundle b = new Bundle();// b.putInt("age", 20);// b.putString("name", "Jhon");// msg.setData(b);// msg.sendToTarget();// 工作线程;Thread t = new Thread() {private int i = 0;@Overridepublic void run() {Log.d("DEBUG", "work Thread-->"+ Thread.currentThread().getId() + " start;");Message msg = new Message();Bundle b = new Bundle();b.putInt("age", i++);b.putString("name", "Jhon" + i++);msg.setData(b);handler.sendMessage(msg); // 发消息给Handler所在的线程;if (i < 3) {handler.postDelayed(this, 30000); // 重复定时任务;}Log.d("DEBUG", "work Thread-->"+ Thread.currentThread().getId() + " exit;");}// 注意此方法没有在Handler被调用,Handler直接调用run方法;public synchronized void start() {Log.d("DEBUG", "work Thread start()");super.start();}};t.setName("work thread");t.start(); // 主线程中调用start()方法;// // 定时器功能;// Thread t = new Thread() {// @Override// public void run() {// Log.d("DEBUG", "*");// handler.postDelayed(this, 3000);// }// };// t.start();// Log.d("DEBUG", "t.start()");}}
相关参考:
深入理解Android消息处理系统——Looper、Handler、Thread
更多相关文章
- Android 显示/隐藏 软键盘 方法
- Android中的一些方法-----生生不息
- android 模拟器 PANIC: Could not open: AVD 解决方法
- Android里面WebView加载HTML里面点击按钮调我Android方法
- android 判断是否在主线程的方法
- Android 控件最上层显示方法
- 〖Android〗(CM10.2)Android4.2/4.3中的boot.img打包方法(合适三星e
- android解决UI阻塞问题——创建AsyncTask 子线程
- android 常用方法集合