handler1

来源:互联网 发布:linux man命令 分类 编辑:程序博客网 时间:2024/05/15 12:40

package com.example.hander_1;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;

public class MainActivity extends Activity {
 // 声明2个按钮控件
 private Button startButton = null;
 private Button endButton = null;
 private ProgressBar bar = null;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  // 根据控件的Id找到控件的对象,并且为两个按钮设置监听器
  bar = (ProgressBar) findViewById(R.id.firstBar);
  startButton = (Button) findViewById(R.id.startButton);
  startButton.setOnClickListener(new startListener());
  endButton = (Button) findViewById(R.id.endButton);
  endButton.setOnClickListener(new endListener());

 }

 class startListener implements OnClickListener {
  public void onClick(View v) {
   // 马上把对象直接加载到消息队列中去,直接运行run()方法
   // 2.请用handler的post方法将想要运行的线程添加到消息队列中去。
   bar.setVisibility(View.VISIBLE);
   handler.post(updateThread);
  }
 }

 class endListener implements OnClickListener {
  public void onClick(View v) {
   // 消息队列中的对象移除掉,不在执行这个线程。
   handler.removeCallbacks(updateThread);
  }
 }

 // android系统的类,
 // 1.首先创建handler对象
 Handler handler = new Handler() {

  @Override
  public void handleMessage(Message msg) {
   // TODO Auto-generated method stub
   bar.setProgress(msg.arg1);
   handler.post(updateThread);
  }

  /*
   * public void handlerMessage(Message msg){ bar.setProgress(msg.arg1);
   * handler.post(updateThread); }
   */

 };
 // 线程类,该类使用匿名内部类的方式进行声明
 // 3.将要执行的线程对象写到run方法中
 Runnable updateThread = new Runnable() {

  @Override
  public void run() {
   // TODO Auto-generated method stub
   int i = 0;
   System.out.println("Begin Thread");
   i = i + 10;
   // 得到一个msg消息对象
   Message msg = handler.obtainMessage();
   // Message 的一个整形 arg1的参数值设置为i;用arg1和arg2变量来传递消息 优点是系统性能消耗较少
   msg.arg1 = i;
   try {
    // 设置当前线程睡眠1s
    Thread.sleep(1000);

   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   // 将msg对象加入到消息队列中去
   handler.sendMessage(msg);
   // System.out.println("UpdateTherad");
   // 延迟3s后把对象加载到消息队列中去。
   // 在run函数中运行postDelayed(),或者post();
   // handler.postDelayed(updateThread, 3000);
   if (i == 100) {
    // 如果当前i值为100时候,讲讲吸纳成对象从handler当中移除
    handler.removeCallbacks(updateThread);
   }
   
  }

 };

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

}
// 有两个队列 ,消息队列, 进程队列 。

原创粉丝点击