Android(5)Handler和Bundle
来源:互联网 发布:琅琊榜骑兵进阶数据 编辑:程序博客网 时间:2024/06/06 15:51
1 Handler的简单使用
注意:handler对线程的处理post,并不是启动了一个新的线程,而是在当前线程调用run方法。
1.1 当触发startbtn的方法后,每隔3秒打印一次日志;当endbtn被点击后,才不再循环打印日志。
public class HandlerActivity extends Activity{ private Button startbtn = null, endbtn = null; // 创建一个handler对象 Handler handler = new Handler(); // 将要执行的操作写在线程对象的run方法中 Runnable updateThread = new Runnable() {@Overridepublic void run() {System.out.println("UpdateThread");// 在此执行postDelayed或者post方法,循环工作handler.postDelayed(updateThread, 3000);}}; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); startbtn = (Button) findViewById(R.id.startbutton); endbtn = (Button) findViewById(R.id.endbutton); startbtn.setOnClickListener(new StartBtnListener()); endbtn.setOnClickListener(new EndBtnListener()); } class StartBtnListener implements OnClickListener {@Overridepublic void onClick(View v) {// 调用handler的post方法,将要执行的线程对象添加到队列中handler.post(updateThread);} } class EndBtnListener implements OnClickListener {@Overridepublic void onClick(View v) {handler.removeCallbacks(updateThread);} } }
1.2 将Handler与Progressbar结合,不断更新进度条
理解线程队列和消息队列
public class HandlerActivity extends Activity{private ProgressBar bar = null; private Button startbtn = null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); startbtn = (Button) findViewById(R.id.startbutton); startbtn.setOnClickListener(new StartBtnListener()); bar = (ProgressBar) findViewById(R.id.bar); } class StartBtnListener implements OnClickListener {@Overridepublic void onClick(View v) {bar.setVisibility(View.VISIBLE);updateBarHandler.post(updateThread);} } Handler updateBarHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);bar.setProgress(msg.arg1);updateBarHandler.post(updateThread);} }; // 线程类, 该类使用匿名内部类的方式进行声明 Runnable updateThread = new Runnable() {int i = 0; @Overridepublic void run() {System.out.println("Begin Thread");i = i + 10;// 得到一个消息对象,Message类是由android操作系统提供Message msg = updateBarHandler.obtainMessage();msg.arg1 = i; // 使用arg1成员变量传递参数try {Thread.sleep(1000);} catch (Exception e) {e.printStackTrace();}// 将msg对象加入到消息队列当中updateBarHandler.sendMessage(msg);if(i==100) {System.out.println("thread end end end !");updateBarHandler.removeCallbacks(updateThread);}}}; }
2 通过HandlerThread和Handler实现新开线程处理msg,通过Bundle对象承载Msg的数据
通过HandlerThread获取Looper,交给Handler,从而实现Handler在新开线程中对msg的处理
public class HandlerActivity extends Activity{ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); System.out.println("acitivty--->"+Thread.currentThread().getId()); System.out.println("activityName-->" + Thread.currentThread().getName()); HandlerThread handlerthread = new HandlerThread("new_thread"); handlerthread.start(); MyHandler myhandler = new MyHandler(handlerthread.getLooper()); Message msg = myhandler.obtainMessage(); msg.obj = "abc"; Bundle b = new Bundle(); b.putInt("age", 20); b.putString("name", "jhon"); msg.setData(b); msg.sendToTarget(); // 消息发送给目标对象,也就是调用obtainMessage方法的对象// myhandler.sendMessage(msg); } class MyHandler extends Handler { public MyHandler() {} public MyHandler(Looper looper) { super(looper); }@Overridepublic void handleMessage(Message msg) { // 在新线程当中处理msgSystem.out.println("handler---->"+Thread.currentThread().getId()); System.out.println("handleMessage " + msg.obj + msg.getData().getString("name"));} }}
阅读全文
0 0
- Android(5)Handler和Bundle
- Android Handler Intent Bundle 和 BroadcastReceiver
- android-关于Handler和Bundle的使用
- android 线程通信Handler Bundle
- Android 七 Handler Bundle Message 简单用法
- android中handler和bundle有什么区别和联系 都是用来传递消息吗都是信息的载体吗
- Android中的状态保存-SharedPreferences和Bundle(文末小彩蛋)
- android MessageQueue,Looper和Handler(转载)
- ProgressDialog 和 handler (Android中的多线程)
- android---Timer和Handler
- Android Handler和ThreadHandler
- android looper和handler
- Android Handler和ThreadHandler
- Android Looper和Handler
- Android Looper和Handler
- android handler和looper
- Android Looper和Handler
- Android Looper和Handler
- 【LeetCode题解】198. House Robber
- 关于CABasicAnimation转场后动画停止问题解决
- python TCP/IP 服务器/客户端
- Linux 常用命令
- tomcat服务器
- Android(5)Handler和Bundle
- leetCode---Valid Anagram
- 二叉树顺序存储和遍历
- Intellij IDEA 弹窗License activation 报 this license BIG3CLIK6F has been cancelled 错误的解决。
- Android Studio检测没有用到的资源
- Hashtable与ConcurrentHashMap区别
- 简单工厂模式
- 【5.20_专辑】来聊聊程序猿的那些花式表白
- 阿里云 CentOS LNMP 环境搭建