android之handler

淩亂°似流年 2021-12-12 23:41 418阅读 0赞

Android程序中一些操作是不能放在activity中的,因为非常耗时,如下载过程。这时,需要使用handler,即重新启动一个与activity并行的线程,下面是使用handler的一个小例子:

  1. package com.example.handlertest;
  2. import android.os.Bundle;
  3. import android.os.Handler;
  4. import android.app.Activity;
  5. import android.view.Menu;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.widget.Button;
  9. public class MainActivity extends Activity {
  10. //声明两个按钮控件
  11. private Button startButton = null;
  12. private Button endButton = null;
  13. @Override
  14. public void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. //根据控件的ID得到代表控件的对象,并为这两个按钮设置相应的监听器
  18. startButton = (Button)findViewById(R.id.startButton);
  19. startButton.setOnClickListener(new StartButtonListener());
  20. endButton = (Button)findViewById(R.id.endButton);
  21. endButton.setOnClickListener(new EndButtonListener());
  22. }
  23. class StartButtonListener implements OnClickListener {
  24. @Override
  25. public void onClick(View v) {
  26. // TODO Auto-generated method stub
  27. //将要执行的线程对象加入消息队列中
  28. //异常的消息处理:post方法执行后便返回,updateThread和activity线程就并行运行了
  29. handler.post(updateThread);
  30. }
  31. }
  32. class EndButtonListener implements OnClickListener {
  33. @Override
  34. public void onClick(View v) {
  35. // TODO Auto-generated method stub
  36. handler.removeCallbacks(updateThread);
  37. }
  38. }
  39. //创建handler对象
  40. Handler handler = new Handler();
  41. //隐名内部类的方式实现Runnable接口,将要执行的操作写在线程对象的run方法中
  42. Runnable updateThread = new Runnable() {
  43. public void run() {
  44. System.out.println("UpdataThread");
  45. //在run方法内部,执行postDelayed或者post实现循环
  46. handler.postDelayed(updateThread, 3000);
  47. }
  48. };
  49. @Override
  50. public boolean onCreateOptionsMenu(Menu menu) {
  51. // Inflate the menu; this adds items to the action bar if it is present.
  52. getMenuInflater().inflate(R.menu.main, menu);
  53. return true;
  54. }
  55. }

在上面的例子中,handler在使用时,是直接执行对象的run方法,而没有调用start方法,所以它与使用它的activity属于同一个线程。

发表评论

表情:
评论列表 (有 0 条评论,418人围观)

还没有评论,来说两句吧...

相关阅读

    相关 androidhandler

    Android程序中一些操作是不能放在activity中的,因为非常耗时,如下载过程。这时,需要使用handler,即重新启动一个与activity并行的线程,下面是使用han