android之HandlerDemo

本文将介绍如何利用Android中的Handler更新UI,并通过Handler实现定时任务的执行。包括Handler的基本概念、如何使用Handler更新UI,以及如何利用Handler与Runnable结合实现简单的定时任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Handler与Runnable

public class MainActivity extends Activity
{
	private Button mStartBtn,mEndBtn;
	private Handler mHandler;
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		initCom();
	} 
	private void initCom()
	{
		
		mHandler = new Handler();
		mStartBtn = (Button)findViewById(R.id.button_start);
		mStartBtn.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				//第一次加入消息队列
				mHandler.post(r);
			}
		});
		
		mEndBtn = (Button)findViewById(R.id.button_end);
		mEndBtn.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				mHandler.removeCallbacks(r);
			}
		});
	}
	
	Runnable r = new Runnable()
	{
		@Override
		public void run()
		{
			//要这些的操作,写在run()方法内部
			Log.e("-------", "------------");
			mHandler.postDelayed(r, 1000);
		}
	};
}


用Handler更新UI

public class MainActivity extends Activity
{
	private Button mStartBtn;
	private ProgressBar bar;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		initCom();
	}

	private void initCom()
	{

		bar = (ProgressBar)findViewById(R.id.progressBar1);
		mStartBtn = (Button) findViewById(R.id.button_start);
		mStartBtn.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				// 第一次把线程加入消息队列
				handler.post(updateBarThread);
			}
		});
	}

	Handler handler = new Handler()
	{
		public void handleMessage(android.os.Message msg)
		{
			//handler更新UI
			bar.setProgress(msg.arg1);
			handler.post(updateBarThread);
		};
	};

	Runnable updateBarThread = new Runnable()
	{
		int i = 0;
		@Override
		public void run()
		{
			i = i + 10;
			Message msg = handler.obtainMessage();
			msg.arg1 = i;//用arg1,提高性能
			handler.sendMessage(msg );
			//睡眠1秒
			try
			{
				Thread.sleep(1000);
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			}
			if (i == 100)
			{
				handler.removeCallbacks(updateBarThread);
			}
			
		}
	};
}

xml中进度条:

<ProgressBar
        android:id="@+id/progressBar1"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

Timer与Handler:

public class MainActivity extends Activity
{
	protected static final int NUM_1 = 1;
	private TextView textView;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		initCom();
	}

	private void initCom()
	{
		textView = (TextView) findViewById(R.id.textView);

		Timer timer = new Timer();
		timer.schedule(new TimerTask()
		{
			@Override
			public void run()
			{
				Message msg = new Message();
				msg.arg1 = 1;
				handler.sendMessage(msg);
			}
		}, 2000);
	}

	Handler handler = new Handler()
	{
		public void handleMessage(android.os.Message msg)
		{
			// handler更新UI
			switch (msg.arg1)
			{
			case NUM_1:
				textView.setText("test");
				break;
			default:
				break;
			}
		};
	};
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值